X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2Fcore%2Fserver%2Fserver.service.ts;h=87280e16fd27d928ceb8f878982df6333167132f;hb=ef4c78da4f0da61aebfa42f6e8420bf431a68bc8;hp=a71c6d0bfbd74811ecc443a0f4592fb979ae0b32;hpb=9d3ef9fe052ed29bd67566754cb28662bd122234;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/core/server/server.service.ts b/client/src/app/core/server/server.service.ts index a71c6d0bf..87280e16f 100644 --- a/client/src/app/core/server/server.service.ts +++ b/client/src/app/core/server/server.service.ts @@ -1,17 +1,20 @@ +import { map, share, switchMap, tap } from 'rxjs/operators' import { HttpClient } from '@angular/common/http' -import { Injectable } from '@angular/core' +import { Inject, Injectable, LOCALE_ID } from '@angular/core' import { peertubeLocalStorage } from '@app/shared/misc/peertube-local-storage' -import 'rxjs/add/operator/do' -import { ReplaySubject } from 'rxjs/ReplaySubject' -import { ServerConfig } from '../../../../../shared' +import { Observable, ReplaySubject, of } from 'rxjs' +import { getCompleteLocale, ServerConfig } from '../../../../../shared' import { About } from '../../../../../shared/models/server/about.model' import { environment } from '../../../environments/environment' import { VideoConstant, VideoPrivacy } from '../../../../../shared/models/videos' +import { isDefaultLocale } from '../../../../../shared/models/i18n' +import { getDevLocale, isOnDevLocale, peertubeTranslate } from '@app/shared/i18n/i18n-utils' @Injectable() export class ServerService { private static BASE_CONFIG_URL = environment.apiUrl + '/api/v1/config/' private static BASE_VIDEO_URL = environment.apiUrl + '/api/v1/videos/' + private static BASE_LOCALE_URL = environment.apiUrl + '/client/locales/' private static CONFIG_LOCAL_STORAGE_KEY = 'server-config' configLoaded = new ReplaySubject(1) @@ -19,6 +22,7 @@ export class ServerService { videoCategoriesLoaded = new ReplaySubject(1) videoLicencesLoaded = new ReplaySubject(1) videoLanguagesLoaded = new ReplaySubject(1) + localeObservable: Observable private config: ServerConfig = { instance: { @@ -34,7 +38,8 @@ export class ServerService { }, serverVersion: 'Unknown', signup: { - allowed: false + allowed: false, + allowedForCurrentIP: false }, transcoding: { enabledResolutions: [] @@ -54,27 +59,37 @@ export class ServerService { extensions: [] } }, + videoCaption: { + file: { + size: { max: 0 }, + extensions: [] + } + }, user: { videoQuota: -1 } } - private videoCategories: Array> = [] - private videoLicences: Array> = [] + private videoCategories: Array> = [] + private videoLicences: Array> = [] private videoLanguages: Array> = [] - private videoPrivacies: Array> = [] + private videoPrivacies: Array> = [] - constructor (private http: HttpClient) { + constructor ( + private http: HttpClient, + @Inject(LOCALE_ID) private localeId: string + ) { + this.loadServerLocale() this.loadConfigLocally() } loadConfig () { this.http.get(ServerService.BASE_CONFIG_URL) - .do(this.saveConfigLocally) - .subscribe(data => { - this.config = data + .pipe(tap(this.saveConfigLocally)) + .subscribe(data => { + this.config = data - this.configLoaded.next(true) - }) + this.configLoaded.next(true) + }) } loadVideoCategories () { @@ -119,30 +134,52 @@ export class ServerService { private loadVideoAttributeEnum ( attributeName: 'categories' | 'licences' | 'languages' | 'privacies', - hashToPopulate: VideoConstant[], + hashToPopulate: VideoConstant[], notifier: ReplaySubject, sort = false ) { - return this.http.get(ServerService.BASE_VIDEO_URL + attributeName) - .subscribe(data => { - Object.keys(data) - .forEach(dataKey => { - hashToPopulate.push({ - id: dataKey, - label: data[dataKey] - }) - }) - - if (sort === true) { - hashToPopulate.sort((a, b) => { - if (a.label < b.label) return -1 - if (a.label === b.label) return 0 - return 1 - }) - } - - notifier.next(true) - }) + this.localeObservable + .pipe( + switchMap(translations => { + return this.http.get(ServerService.BASE_VIDEO_URL + attributeName) + .pipe(map(data => ({ data, translations }))) + }) + ) + .subscribe(({ data, translations }) => { + Object.keys(data) + .forEach(dataKey => { + const label = data[ dataKey ] + + hashToPopulate.push({ + id: dataKey, + label: peertubeTranslate(label, translations) + }) + }) + + if (sort === true) { + hashToPopulate.sort((a, b) => { + if (a.label < b.label) return -1 + if (a.label === b.label) return 0 + return 1 + }) + } + + notifier.next(true) + }) + } + + private loadServerLocale () { + const completeLocale = isOnDevLocale() ? getDevLocale() : getCompleteLocale(this.localeId) + + // Default locale, nothing to translate + if (isDefaultLocale(completeLocale)) { + this.localeObservable = of({}).pipe(share()) + return + } + + this.localeObservable = this.http + .get(ServerService.BASE_LOCALE_URL + completeLocale + '/server.json') + .pipe(share()) } private saveConfigLocally (config: ServerConfig) {