X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2Fcore%2Fserver%2Fserver.service.ts;h=fc269749bf36d0d7df5df070b83de7403fb4ad80;hb=54909304287f3c04dcfb39660be8ead57dc95440;hp=c69e0919ac62b9ae61d3f4f3fe38a07363ba6088;hpb=4504f09f6e85f09b0489debb547a17209d7176ea;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 c69e0919a..fc269749b 100644 --- a/client/src/app/core/server/server.service.ts +++ b/client/src/app/core/server/server.service.ts @@ -3,16 +3,9 @@ import { first, map, share, shareReplay, switchMap, tap } from 'rxjs/operators' import { HttpClient } from '@angular/common/http' import { Inject, Injectable, LOCALE_ID } from '@angular/core' import { getDevLocale, isOnDevLocale, sortBy } from '@app/helpers' -import { peertubeLocalStorage } from '@root-helpers/peertube-web-storage' -import { - getCompleteLocale, - isDefaultLocale, - peertubeTranslate, - SearchTargetType, - ServerConfig, - ServerStats, - VideoConstant -} from '@shared/models' +import { logger } from '@root-helpers/logger' +import { getCompleteLocale, isDefaultLocale, peertubeTranslate } from '@shared/core-utils/i18n' +import { HTMLServerConfig, ServerConfig, ServerStats, VideoConstant } from '@shared/models' import { environment } from '../../../environments/environment' @Injectable() @@ -23,8 +16,6 @@ export class ServerService { private static BASE_LOCALE_URL = environment.apiUrl + '/client/locales/' private static BASE_STATS_URL = environment.apiUrl + '/api/v1/server/stats' - private static CONFIG_LOCAL_STORAGE_KEY = 'server-config' - configReloaded = new Subject() private localeObservable: Observable @@ -38,131 +29,26 @@ export class ServerService { private configReset = false private configLoaded = false - private config: ServerConfig = { - instance: { - name: 'PeerTube', - shortDescription: 'PeerTube, a federated (ActivityPub) video streaming platform ' + - 'using P2P (BitTorrent) directly in the web browser with WebTorrent and Angular.', - defaultClientRoute: '', - isNSFW: false, - defaultNSFWPolicy: 'do_not_list' as 'do_not_list', - customizations: { - javascript: '', - css: '' - } - }, - plugin: { - registered: [], - registeredExternalAuths: [], - registeredIdAndPassAuths: [] - }, - theme: { - registered: [], - default: 'default' - }, - email: { - enabled: false - }, - contactForm: { - enabled: false - }, - serverVersion: 'Unknown', - signup: { - allowed: false, - allowedForCurrentIP: false, - requiresEmailVerification: false - }, - transcoding: { - enabledResolutions: [], - hls: { - enabled: false - }, - webtorrent: { - enabled: true - } - }, - avatar: { - file: { - size: { max: 0 }, - extensions: [] - } - }, - video: { - image: { - size: { max: 0 }, - extensions: [] - }, - file: { - extensions: [] - } - }, - videoCaption: { - file: { - size: { max: 0 }, - extensions: [] - } - }, - user: { - videoQuota: -1, - videoQuotaDaily: -1 - }, - import: { - videos: { - http: { - enabled: false - }, - torrent: { - enabled: false - } - } - }, - trending: { - videos: { - intervalDays: 0 - } - }, - autoBlacklist: { - videos: { - ofUsers: { - enabled: false - } - } - }, - tracker: { - enabled: true - }, - followings: { - instance: { - autoFollowIndex: { - indexUrl: 'https://instances.joinpeertube.org' - } - } - }, - broadcastMessage: { - enabled: false, - message: '', - level: 'info', - dismissable: false - }, - search: { - remoteUri: { - users: true, - anonymous: false - }, - searchIndex: { - enabled: false, - url: '', - disableLocalSearch: false, - isDefaultSearch: false - } - } - } + private config: ServerConfig + private htmlConfig: HTMLServerConfig constructor ( private http: HttpClient, @Inject(LOCALE_ID) private localeId: string ) { - this.loadConfigLocally() + } + + loadHTMLConfig () { + try { + this.loadHTMLConfigLocally() + } catch (err) { + // Expected in dev mode since we can't inject the config in the HTML + if (environment.production !== false) { + logger.error('Cannot load config locally. Fallback to API.') + } + + return this.getConfig() + } } getServerVersionAndCommit () { @@ -180,9 +66,7 @@ export class ServerService { this.configReset = true // Notify config update - this.getConfig().subscribe(() => { - // empty, to fire a reset config event - }) + return this.getConfig() } getConfig () { @@ -191,9 +75,9 @@ export class ServerService { if (!this.configObservable) { this.configObservable = this.http.get(ServerService.BASE_CONFIG_URL) .pipe( - tap(config => this.saveConfigLocally(config)), tap(config => { this.config = config + this.htmlConfig = config this.configLoaded = true }), tap(config => { @@ -209,8 +93,8 @@ export class ServerService { return this.configObservable } - getTmpConfig () { - return this.config + getHTMLConfig () { + return this.htmlConfig } getVideoCategories () { @@ -253,7 +137,7 @@ export class ServerService { return this.videoPlaylistPrivaciesObservable.pipe(first()) } - getServerLocale () { + getServerLocale (): Observable<{ [ id: string ]: string }> { if (!this.localeObservable) { const completeLocale = isOnDevLocale() ? getDevLocale() : getCompleteLocale(this.localeId) @@ -274,20 +158,6 @@ export class ServerService { return this.http.get(ServerService.BASE_STATS_URL) } - getDefaultSearchTarget (): Promise { - return this.getConfig().pipe( - map(config => { - const searchIndexConfig = config.search.searchIndex - - if (searchIndexConfig.enabled && (searchIndexConfig.isDefaultSearch || searchIndexConfig.disableLocalSearch)) { - return 'search-index' - } - - return 'local' - }) - ).toPromise() - } - private loadAttributeEnum ( baseUrl: string, attributeName: 'categories' | 'licences' | 'languages' | 'privacies', @@ -302,7 +172,7 @@ export class ServerService { map(({ data, translations }) => { const hashToPopulate: VideoConstant[] = Object.keys(data) .map(dataKey => { - const label = data[ dataKey ] + const label = data[dataKey] const id = attributeName === 'languages' ? dataKey as T @@ -322,20 +192,13 @@ export class ServerService { ) } - private saveConfigLocally (config: ServerConfig) { - peertubeLocalStorage.setItem(ServerService.CONFIG_LOCAL_STORAGE_KEY, JSON.stringify(config)) - } - - private loadConfigLocally () { - const configString = peertubeLocalStorage.getItem(ServerService.CONFIG_LOCAL_STORAGE_KEY) - - if (configString) { - try { - const parsed = JSON.parse(configString) - Object.assign(this.config, parsed) - } catch (err) { - console.error('Cannot parse config saved in local storage.', err) - } + private loadHTMLConfigLocally () { + // FIXME: typings + const configString = (window as any)['PeerTubeServerConfig'] + if (!configString) { + throw new Error('Could not find PeerTubeServerConfig in HTML') } + + this.htmlConfig = JSON.parse(configString) } }