X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2Fcore%2Fserver%2Fserver.service.ts;h=80c52164d578f3bb6323380e3c559ed952f7c2ad;hb=8d76959e11ab7172040853fa4fadaf8d53e6aa12;hp=74363e6a1bac7eedeb7627c3319ae7d3f977d147;hpb=9c2e0dbfa9098675390e00ccb0fa49c51b3c6732;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 74363e6a1..80c52164d 100644 --- a/client/src/app/core/server/server.service.ts +++ b/client/src/app/core/server/server.service.ts @@ -1,24 +1,29 @@ -import { map, share, switchMap, tap } from 'rxjs/operators' +import { map, shareReplay, switchMap, tap } from 'rxjs/operators' import { HttpClient } from '@angular/common/http' import { Inject, Injectable, LOCALE_ID } from '@angular/core' import { peertubeLocalStorage } from '@app/shared/misc/peertube-local-storage' -import { Observable, ReplaySubject, of } from 'rxjs' +import { Observable, of, ReplaySubject } 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' +import { isDefaultLocale, peertubeTranslate } from '../../../../../shared/models/i18n' +import { getDevLocale, isOnDevLocale } from '@app/shared/i18n/i18n-utils' +import { sortBy } from '@app/shared/misc/utils' +import { VideoPlaylistPrivacy } from '@shared/models/videos/playlist/video-playlist-privacy.model' +import { cloneDeep } from 'lodash-es' @Injectable() export class ServerService { + private static BASE_SERVER_URL = environment.apiUrl + '/api/v1/server/' private static BASE_CONFIG_URL = environment.apiUrl + '/api/v1/config/' private static BASE_VIDEO_URL = environment.apiUrl + '/api/v1/videos/' + private static BASE_VIDEO_PLAYLIST_URL = environment.apiUrl + '/api/v1/video-playlists/' private static BASE_LOCALE_URL = environment.apiUrl + '/client/locales/' private static CONFIG_LOCAL_STORAGE_KEY = 'server-config' configLoaded = new ReplaySubject(1) videoPrivaciesLoaded = new ReplaySubject(1) + videoPlaylistPrivaciesLoaded = new ReplaySubject(1) videoCategoriesLoaded = new ReplaySubject(1) videoLicencesLoaded = new ReplaySubject(1) videoLanguagesLoaded = new ReplaySubject(1) @@ -30,19 +35,31 @@ export class ServerService { 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: '' } }, + plugins: [], + email: { + enabled: false + }, + contactForm: { + enabled: false + }, serverVersion: 'Unknown', signup: { allowed: false, - allowedForCurrentIP: false + allowedForCurrentIP: false, + requiresEmailVerification: false }, transcoding: { - enabledResolutions: [] + enabledResolutions: [], + hls: { + enabled: false + } }, avatar: { file: { @@ -59,14 +76,47 @@ export class ServerService { extensions: [] } }, + videoCaption: { + file: { + size: { max: 0 }, + extensions: [] + } + }, user: { - videoQuota: -1 + videoQuota: -1, + videoQuotaDaily: -1 + }, + import: { + videos: { + http: { + enabled: false + }, + torrent: { + enabled: false + } + } + }, + trending: { + videos: { + intervalDays: 0 + } + }, + autoBlacklist: { + videos: { + ofUsers: { + enabled: false + } + } + }, + tracker: { + enabled: true } } private videoCategories: Array> = [] private videoLicences: Array> = [] private videoLanguages: Array> = [] private videoPrivacies: Array> = [] + private videoPlaylistPrivacies: Array> = [] constructor ( private http: HttpClient, @@ -87,55 +137,65 @@ export class ServerService { } loadVideoCategories () { - return this.loadVideoAttributeEnum('categories', this.videoCategories, this.videoCategoriesLoaded, true) + return this.loadAttributeEnum(ServerService.BASE_VIDEO_URL, 'categories', this.videoCategories, this.videoCategoriesLoaded, true) } loadVideoLicences () { - return this.loadVideoAttributeEnum('licences', this.videoLicences, this.videoLicencesLoaded) + return this.loadAttributeEnum(ServerService.BASE_VIDEO_URL, 'licences', this.videoLicences, this.videoLicencesLoaded) } loadVideoLanguages () { - return this.loadVideoAttributeEnum('languages', this.videoLanguages, this.videoLanguagesLoaded, true) + return this.loadAttributeEnum(ServerService.BASE_VIDEO_URL, 'languages', this.videoLanguages, this.videoLanguagesLoaded, true) } loadVideoPrivacies () { - return this.loadVideoAttributeEnum('privacies', this.videoPrivacies, this.videoPrivaciesLoaded) + return this.loadAttributeEnum(ServerService.BASE_VIDEO_URL, 'privacies', this.videoPrivacies, this.videoPrivaciesLoaded) + } + + loadVideoPlaylistPrivacies () { + return this.loadAttributeEnum( + ServerService.BASE_VIDEO_PLAYLIST_URL, + 'privacies', + this.videoPlaylistPrivacies, + this.videoPlaylistPrivaciesLoaded + ) } getConfig () { - return this.config + return cloneDeep(this.config) } getVideoCategories () { - return this.videoCategories + return cloneDeep(this.videoCategories) } getVideoLicences () { - return this.videoLicences + return cloneDeep(this.videoLicences) } getVideoLanguages () { - return this.videoLanguages + return cloneDeep(this.videoLanguages) } getVideoPrivacies () { - return this.videoPrivacies + return cloneDeep(this.videoPrivacies) } - getAbout () { - return this.http.get(ServerService.BASE_CONFIG_URL + '/about') + getVideoPlaylistPrivacies () { + return cloneDeep(this.videoPlaylistPrivacies) } - private loadVideoAttributeEnum ( + private loadAttributeEnum ( + baseUrl: string, attributeName: 'categories' | 'licences' | 'languages' | 'privacies', - hashToPopulate: VideoConstant[], + hashToPopulate: VideoConstant[], notifier: ReplaySubject, sort = false ) { this.localeObservable .pipe( switchMap(translations => { - return this.http.get(ServerService.BASE_VIDEO_URL + attributeName) + return this.http.get<{ [id: string]: string }>(baseUrl + attributeName) .pipe(map(data => ({ data, translations }))) }) ) @@ -145,18 +205,12 @@ export class ServerService { const label = data[ dataKey ] hashToPopulate.push({ - id: dataKey, + id: attributeName === 'languages' ? dataKey : parseInt(dataKey, 10), 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 - }) - } + if (sort === true) sortBy(hashToPopulate, 'label') notifier.next(true) }) @@ -167,13 +221,13 @@ export class ServerService { // Default locale, nothing to translate if (isDefaultLocale(completeLocale)) { - this.localeObservable = of({}).pipe(share()) + this.localeObservable = of({}).pipe(shareReplay()) return } this.localeObservable = this.http .get(ServerService.BASE_LOCALE_URL + completeLocale + '/server.json') - .pipe(share()) + .pipe(shareReplay()) } private saveConfigLocally (config: ServerConfig) {