- redirectTo404IfNotFound (obj: { status: number }, type: 'video' | 'other', status = [ HttpStatusCode.NOT_FOUND_404 ]) {
- if (obj && obj.status && status.indexOf(obj.status) !== -1) {
- // Do not use redirectService to avoid circular dependencies
- this.router.navigate([ '/404' ], { state: { type, obj }, skipLocationChange: true })
+ private buildErrorMessage (err: any) {
+ if (err.error instanceof Error) {
+ // A client-side or network error occurred. Handle it accordingly.
+ const errorMessage = err.error.detail || err.error.title
+ console.error('An error occurred:', errorMessage)
+
+ return errorMessage
+ }
+
+ if (typeof err.error === 'string') {
+ return err.error
+ }
+
+ if (err.status !== undefined) {
+ const errorMessage = this.buildServerErrorMessage(err)
+ console.error(`Backend returned code ${err.status}, errorMessage is: ${errorMessage}`)
+
+ return errorMessage
+ }
+
+ console.error(err)
+ return err
+ }
+
+ private buildServerErrorMessage (err: any) {
+ // A server-side error occurred.
+ if (err.error?.errors) {
+ const errors = err.error.errors
+
+ return Object.keys(errors)
+ .map(key => errors[key].msg)
+ .join('. ')
+ }
+
+ if (err.error?.error) {
+ return err.error.error
+ }
+
+ if (err.status === HttpStatusCode.PAYLOAD_TOO_LARGE_413) {
+ return $localize`Media is too large for the server. Please contact you administrator if you want to increase the limit size.`
+ }
+
+ if (err.status === HttpStatusCode.TOO_MANY_REQUESTS_429) {
+ const secondsLeft = err.headers.get('retry-after')
+
+ if (secondsLeft) {
+ const minutesLeft = Math.floor(parseInt(secondsLeft, 10) / 60)
+ return $localize`Too many attempts, please try again after ${minutesLeft} minutes.`
+ }
+
+ return $localize`Too many attempts, please try again later.`
+ }
+
+ if (err.status === HttpStatusCode.INTERNAL_SERVER_ERROR_500) {
+ return $localize`Server error. Please retry later.`