X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2Fshared%2Frest%2Frest-extractor.service.ts;h=32dad5c732e00e47cecf3e67710ad7df7d713388;hb=d5050d1e097e761685fbaafe6e3d4b8b78d48356;hp=fcb1598f4393385a78521c7e8225cd83c73e5abc;hpb=a6375e69668ea42e19531c6bc68dcd37f3f7cbd7;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 fcb1598f4..32dad5c73 100644 --- a/client/src/app/shared/rest/rest-extractor.service.ts +++ b/client/src/app/shared/rest/rest-extractor.service.ts @@ -1,52 +1,58 @@ -import { Injectable } from '@angular/core'; -import { Response } from '@angular/http'; -import { Observable } from 'rxjs/Observable'; +import { Injectable } from '@angular/core' +import { Observable } from 'rxjs/Observable' +import { HttpErrorResponse } from '@angular/common/http' -export interface ResultList { - data: any[]; - total: number; -} +import { Utils } from '../utils' +import { ResultList } from '../../../../../shared' @Injectable() export class RestExtractor { - constructor () { ; } - - extractDataBool(res: Response) { - return true; + extractDataBool () { + return true } - extractDataList(res: Response) { - const body = res.json(); + applyToResultListData (result: ResultList, fun: Function, additionalArgs?: any[]): ResultList { + const data: T[] = result.data + const newData: T[] = [] - const ret: ResultList = { - data: body.data, - total: body.total - }; + data.forEach(d => newData.push(fun.call(this, d, additionalArgs))) - return ret; + return { + total: result.total, + data: newData + } } - extractDataGet(res: Response) { - return res.json(); + convertResultListDateToHuman (result: ResultList, fieldsToConvert: string[] = [ 'createdAt' ]): ResultList { + return this.applyToResultListData(result, this.convertDateToHuman, [ fieldsToConvert ]) } - handleError(res: Response) { - let text = 'Server error: '; - text += res.text(); - let json = ''; - - try { - json = res.json(); - } catch (err) { ; } + convertDateToHuman (target: object, fieldsToConvert: string[]) { + const source = {} + fieldsToConvert.forEach(field => { + source[field] = Utils.dateToHuman(target[field]) + }) - const error = { - json, - text - }; - - console.error(error); + return Object.assign(target, source) + } - return Observable.throw(error); + handleError (err: HttpErrorResponse) { + let errorMessage + + if (err.error instanceof Error) { + // A client-side or network error occurred. Handle it accordingly. + errorMessage = err.error.message + console.error('An error occurred:', errorMessage) + } else if (err.status !== undefined) { + // The backend returned an unsuccessful response code. + // The response body may contain clues as to what went wrong, + errorMessage = err.error + console.error(`Backend returned code ${err.status}, body was: ${errorMessage}`) + } else { + errorMessage = err + } + + return Observable.throw(errorMessage) } }