diff options
author | Chocobozzz <me@florianbigard.com> | 2022-05-24 16:29:01 +0200 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2022-06-08 13:40:40 +0200 |
commit | eaa529528cafcfb291009f9f99d296c81e792899 (patch) | |
tree | c8e3562f73312fb331a363e1daeaeb4949cc8448 /client/src/app/core | |
parent | e435cf44c00aba359bf0f265d06bff4841b3f7fe (diff) | |
download | PeerTube-eaa529528cafcfb291009f9f99d296c81e792899.tar.gz PeerTube-eaa529528cafcfb291009f9f99d296c81e792899.tar.zst PeerTube-eaa529528cafcfb291009f9f99d296c81e792899.zip |
Support ICU in TS components
Diffstat (limited to 'client/src/app/core')
-rw-r--r-- | client/src/app/core/rest/rest-extractor.service.ts | 111 |
1 files changed, 65 insertions, 46 deletions
diff --git a/client/src/app/core/rest/rest-extractor.service.ts b/client/src/app/core/rest/rest-extractor.service.ts index 17053811c..86c7484a5 100644 --- a/client/src/app/core/rest/rest-extractor.service.ts +++ b/client/src/app/core/rest/rest-extractor.service.ts | |||
@@ -34,49 +34,17 @@ export class RestExtractor { | |||
34 | return target | 34 | return target |
35 | } | 35 | } |
36 | 36 | ||
37 | handleError (err: any) { | 37 | redirectTo404IfNotFound (obj: { status: number }, type: 'video' | 'other', status = [ HttpStatusCode.NOT_FOUND_404 ]) { |
38 | let errorMessage | 38 | if (obj?.status && status.includes(obj.status)) { |
39 | // Do not use redirectService to avoid circular dependencies | ||
40 | this.router.navigate([ '/404' ], { state: { type, obj }, skipLocationChange: true }) | ||
41 | } | ||
39 | 42 | ||
40 | if (err.error instanceof Error) { | 43 | return observableThrowError(() => obj) |
41 | // A client-side or network error occurred. Handle it accordingly. | 44 | } |
42 | errorMessage = err.error.detail || err.error.title | ||
43 | console.error('An error occurred:', errorMessage) | ||
44 | } else if (typeof err.error === 'string') { | ||
45 | errorMessage = err.error | ||
46 | } else if (err.status !== undefined) { | ||
47 | // A server-side error occurred. | ||
48 | if (err.error?.errors) { | ||
49 | const errors = err.error.errors | ||
50 | const errorsArray: string[] = [] | ||
51 | |||
52 | Object.keys(errors).forEach(key => { | ||
53 | errorsArray.push(errors[key].msg) | ||
54 | }) | ||
55 | |||
56 | errorMessage = errorsArray.join('. ') | ||
57 | } else if (err.error?.error) { | ||
58 | errorMessage = err.error.error | ||
59 | } else if (err.status === HttpStatusCode.PAYLOAD_TOO_LARGE_413) { | ||
60 | // eslint-disable-next-line max-len | ||
61 | errorMessage = $localize`Media is too large for the server. Please contact you administrator if you want to increase the limit size.` | ||
62 | } else if (err.status === HttpStatusCode.TOO_MANY_REQUESTS_429) { | ||
63 | const secondsLeft = err.headers.get('retry-after') | ||
64 | if (secondsLeft) { | ||
65 | const minutesLeft = Math.floor(parseInt(secondsLeft, 10) / 60) | ||
66 | errorMessage = $localize`Too many attempts, please try again after ${minutesLeft} minutes.` | ||
67 | } else { | ||
68 | errorMessage = $localize`Too many attempts, please try again later.` | ||
69 | } | ||
70 | } else if (err.status === HttpStatusCode.INTERNAL_SERVER_ERROR_500) { | ||
71 | errorMessage = $localize`Server error. Please retry later.` | ||
72 | } | ||
73 | 45 | ||
74 | errorMessage = errorMessage || 'Unknown error.' | 46 | handleError (err: any) { |
75 | console.error(`Backend returned code ${err.status}, errorMessage is: ${errorMessage}`) | 47 | const errorMessage = this.buildErrorMessage(err) |
76 | } else { | ||
77 | console.error(err) | ||
78 | errorMessage = err | ||
79 | } | ||
80 | 48 | ||
81 | const errorObj: { message: string, status: string, body: string } = { | 49 | const errorObj: { message: string, status: string, body: string } = { |
82 | message: errorMessage, | 50 | message: errorMessage, |
@@ -92,12 +60,63 @@ export class RestExtractor { | |||
92 | return observableThrowError(() => errorObj) | 60 | return observableThrowError(() => errorObj) |
93 | } | 61 | } |
94 | 62 | ||
95 | redirectTo404IfNotFound (obj: { status: number }, type: 'video' | 'other', status = [ HttpStatusCode.NOT_FOUND_404 ]) { | 63 | private buildErrorMessage (err: any) { |
96 | if (obj?.status && status.includes(obj.status)) { | 64 | if (err.error instanceof Error) { |
97 | // Do not use redirectService to avoid circular dependencies | 65 | // A client-side or network error occurred. Handle it accordingly. |
98 | this.router.navigate([ '/404' ], { state: { type, obj }, skipLocationChange: true }) | 66 | const errorMessage = err.error.detail || err.error.title |
67 | console.error('An error occurred:', errorMessage) | ||
68 | |||
69 | return errorMessage | ||
99 | } | 70 | } |
100 | 71 | ||
101 | return observableThrowError(() => obj) | 72 | if (typeof err.error === 'string') { |
73 | return err.error | ||
74 | } | ||
75 | |||
76 | if (err.status !== undefined) { | ||
77 | const errorMessage = this.buildServerErrorMessage(err) | ||
78 | console.error(`Backend returned code ${err.status}, errorMessage is: ${errorMessage}`) | ||
79 | |||
80 | return errorMessage | ||
81 | } | ||
82 | |||
83 | console.error(err) | ||
84 | return err | ||
85 | } | ||
86 | |||
87 | private buildServerErrorMessage (err: any) { | ||
88 | // A server-side error occurred. | ||
89 | if (err.error?.errors) { | ||
90 | const errors = err.error.errors | ||
91 | |||
92 | return Object.keys(errors) | ||
93 | .map(key => errors[key].msg) | ||
94 | .join('. ') | ||
95 | } | ||
96 | |||
97 | if (err.error?.error) { | ||
98 | return err.error.error | ||
99 | } | ||
100 | |||
101 | if (err.status === HttpStatusCode.PAYLOAD_TOO_LARGE_413) { | ||
102 | return $localize`Media is too large for the server. Please contact you administrator if you want to increase the limit size.` | ||
103 | } | ||
104 | |||
105 | if (err.status === HttpStatusCode.TOO_MANY_REQUESTS_429) { | ||
106 | const secondsLeft = err.headers.get('retry-after') | ||
107 | |||
108 | if (secondsLeft) { | ||
109 | const minutesLeft = Math.floor(parseInt(secondsLeft, 10) / 60) | ||
110 | return $localize`Too many attempts, please try again after ${minutesLeft} minutes.` | ||
111 | } | ||
112 | |||
113 | return $localize`Too many attempts, please try again later.` | ||
114 | } | ||
115 | |||
116 | if (err.status === HttpStatusCode.INTERNAL_SERVER_ERROR_500) { | ||
117 | return $localize`Server error. Please retry later.` | ||
118 | } | ||
119 | |||
120 | return $localize`Unknown server error` | ||
102 | } | 121 | } |
103 | } | 122 | } |