X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2Fshared%2Frest%2Frest-extractor.service.ts;h=f149569ef5028b2a5c27f6e92dc0bf432db957ba;hb=f7cc67b455a12ccae9b0ea16876d166720364357;hp=4cfe28536d3ddecacee5a97f3df697327b893ebf;hpb=db400f447a9f7aae1c56fa25396e93069744483f;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/shared/rest/rest-extractor.service.ts b/client/src/app/shared/rest/rest-extractor.service.ts index 4cfe28536..f149569ef 100644 --- a/client/src/app/shared/rest/rest-extractor.service.ts +++ b/client/src/app/shared/rest/rest-extractor.service.ts @@ -1,11 +1,18 @@ -import { of, throwError as observableThrowError } from 'rxjs' +import { throwError as observableThrowError } from 'rxjs' import { Injectable } from '@angular/core' import { dateToHuman } from '@app/shared/misc/utils' import { ResultList } from '../../../../../shared' +import { Router } from '@angular/router' +import { I18n } from '@ngx-translate/i18n-polyfill' @Injectable() export class RestExtractor { + constructor ( + private router: Router, + private i18n: I18n + ) { } + extractDataBool () { return true } @@ -26,7 +33,7 @@ export class RestExtractor { return this.applyToResultListData(result, this.convertDateToHuman, [ fieldsToConvert ]) } - convertDateToHuman (target: object, fieldsToConvert: string[]) { + convertDateToHuman (target: { [ id: string ]: string }, fieldsToConvert: string[]) { fieldsToConvert.forEach(field => target[field] = dateToHuman(target[field])) return target @@ -55,17 +62,19 @@ export class RestExtractor { } else if (err.error && err.error.error) { errorMessage = err.error.error } else if (err.status === 413) { - errorMessage = 'Request is too large for the server. Please contact you administrator if you want to increase the limit size.' + errorMessage = this.i18n( + 'Request is too large for the server. Please contact you administrator if you want to increase the limit size.' + ) } else if (err.status === 429) { const secondsLeft = err.headers.get('retry-after') if (secondsLeft) { const minutesLeft = Math.floor(parseInt(secondsLeft, 10) / 60) - errorMessage = 'Too many attempts, please try again after ' + minutesLeft + ' minutes.' + errorMessage = this.i18n('Too many attempts, please try again after {{minutesLeft}} minutes.', { minutesLeft }) } else { - errorMessage = 'Too many attempts, please try again later.' + errorMessage = this.i18n('Too many attempts, please try again later.') } } else if (err.status === 500) { - errorMessage = 'Server error. Please retry later.' + errorMessage = this.i18n('Server error. Please retry later.') } errorMessage = errorMessage ? errorMessage : 'Unknown error.' @@ -74,7 +83,7 @@ export class RestExtractor { errorMessage = err } - const errorObj = { + const errorObj: { message: string, status: string, body: string } = { message: errorMessage, status: undefined, body: undefined @@ -85,8 +94,15 @@ export class RestExtractor { errorObj.body = err.error } - observableThrowError(errorObj) + return observableThrowError(errorObj) + } + + redirectTo404IfNotFound (obj: { status: number }, status = [ 404 ]) { + if (obj && obj.status && status.indexOf(obj.status) !== -1) { + // Do not use redirectService to avoid circular dependencies + this.router.navigate([ '/404' ], { skipLocationChange: true }) + } - return of(undefined) + return observableThrowError(obj) } }