diff options
Diffstat (limited to 'client/src/app/shared')
13 files changed, 106 insertions, 57 deletions
diff --git a/client/src/app/shared/images/preview-upload.component.ts b/client/src/app/shared/images/preview-upload.component.ts index 44b78866e..f56f5b1f8 100644 --- a/client/src/app/shared/images/preview-upload.component.ts +++ b/client/src/app/shared/images/preview-upload.component.ts | |||
@@ -2,6 +2,7 @@ import { Component, forwardRef, Input, OnInit } from '@angular/core' | |||
2 | import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms' | 2 | import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms' |
3 | import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser' | 3 | import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser' |
4 | import { ServerService } from '@app/core' | 4 | import { ServerService } from '@app/core' |
5 | import { ServerConfig } from '@shared/models' | ||
5 | 6 | ||
6 | @Component({ | 7 | @Component({ |
7 | selector: 'my-preview-upload', | 8 | selector: 'my-preview-upload', |
@@ -24,6 +25,7 @@ export class PreviewUploadComponent implements OnInit, ControlValueAccessor { | |||
24 | imageSrc: SafeResourceUrl | 25 | imageSrc: SafeResourceUrl |
25 | allowedExtensionsMessage = '' | 26 | allowedExtensionsMessage = '' |
26 | 27 | ||
28 | private serverConfig: ServerConfig | ||
27 | private file: File | 29 | private file: File |
28 | 30 | ||
29 | constructor ( | 31 | constructor ( |
@@ -32,14 +34,18 @@ export class PreviewUploadComponent implements OnInit, ControlValueAccessor { | |||
32 | ) {} | 34 | ) {} |
33 | 35 | ||
34 | get videoImageExtensions () { | 36 | get videoImageExtensions () { |
35 | return this.serverService.getConfig().video.image.extensions | 37 | return this.serverConfig.video.image.extensions |
36 | } | 38 | } |
37 | 39 | ||
38 | get maxVideoImageSize () { | 40 | get maxVideoImageSize () { |
39 | return this.serverService.getConfig().video.image.size.max | 41 | return this.serverConfig.video.image.size.max |
40 | } | 42 | } |
41 | 43 | ||
42 | ngOnInit () { | 44 | ngOnInit () { |
45 | this.serverConfig = this.serverService.getTmpConfig() | ||
46 | this.serverService.getConfig() | ||
47 | .subscribe(config => this.serverConfig = config) | ||
48 | |||
43 | this.allowedExtensionsMessage = this.videoImageExtensions.join(', ') | 49 | this.allowedExtensionsMessage = this.videoImageExtensions.join(', ') |
44 | } | 50 | } |
45 | 51 | ||
diff --git a/client/src/app/shared/instance/instance-features-table.component.html b/client/src/app/shared/instance/instance-features-table.component.html index f880a886f..fd8b3354f 100644 --- a/client/src/app/shared/instance/instance-features-table.component.html +++ b/client/src/app/shared/instance/instance-features-table.component.html | |||
@@ -1,6 +1,6 @@ | |||
1 | <div class="feature-table"> | 1 | <div class="feature-table"> |
2 | 2 | ||
3 | <table class="table" *ngIf="config"> | 3 | <table class="table" *ngIf="serverConfig"> |
4 | <tr> | 4 | <tr> |
5 | <td i18n class="label">PeerTube version</td> | 5 | <td i18n class="label">PeerTube version</td> |
6 | 6 | ||
@@ -19,7 +19,7 @@ | |||
19 | <tr> | 19 | <tr> |
20 | <td i18n class="label">User registration allowed</td> | 20 | <td i18n class="label">User registration allowed</td> |
21 | <td> | 21 | <td> |
22 | <my-feature-boolean [value]="config.signup.allowed"></my-feature-boolean> | 22 | <my-feature-boolean [value]="serverConfig.signup.allowed"></my-feature-boolean> |
23 | </td> | 23 | </td> |
24 | </tr> | 24 | </tr> |
25 | 25 | ||
@@ -30,15 +30,15 @@ | |||
30 | <tr> | 30 | <tr> |
31 | <td i18n class="sub-label">Transcoding in multiple resolutions</td> | 31 | <td i18n class="sub-label">Transcoding in multiple resolutions</td> |
32 | <td> | 32 | <td> |
33 | <my-feature-boolean [value]="config.transcoding.enabledResolutions.length !== 0"></my-feature-boolean> | 33 | <my-feature-boolean [value]="serverConfig.transcoding.enabledResolutions.length !== 0"></my-feature-boolean> |
34 | </td> | 34 | </td> |
35 | </tr> | 35 | </tr> |
36 | 36 | ||
37 | <tr> | 37 | <tr> |
38 | <td i18n class="sub-label">Video uploads</td> | 38 | <td i18n class="sub-label">Video uploads</td> |
39 | <td> | 39 | <td> |
40 | <span *ngIf="config.autoBlacklist.videos.ofUsers.enabled">Requires manual validation by moderators</span> | 40 | <span *ngIf="serverConfig.autoBlacklist.videos.ofUsers.enabled">Requires manual validation by moderators</span> |
41 | <span *ngIf="!config.autoBlacklist.videos.ofUsers.enabled">Automatically published</span> | 41 | <span *ngIf="!serverConfig.autoBlacklist.videos.ofUsers.enabled">Automatically published</span> |
42 | </td> | 42 | </td> |
43 | </tr> | 43 | </tr> |
44 | 44 | ||
@@ -69,14 +69,14 @@ | |||
69 | <tr> | 69 | <tr> |
70 | <td i18n class="sub-label">HTTP import (YouTube, Vimeo, direct URL...)</td> | 70 | <td i18n class="sub-label">HTTP import (YouTube, Vimeo, direct URL...)</td> |
71 | <td> | 71 | <td> |
72 | <my-feature-boolean [value]="config.import.videos.http.enabled"></my-feature-boolean> | 72 | <my-feature-boolean [value]="serverConfig.import.videos.http.enabled"></my-feature-boolean> |
73 | </td> | 73 | </td> |
74 | </tr> | 74 | </tr> |
75 | 75 | ||
76 | <tr> | 76 | <tr> |
77 | <td i18n class="sub-label">Torrent import</td> | 77 | <td i18n class="sub-label">Torrent import</td> |
78 | <td> | 78 | <td> |
79 | <my-feature-boolean [value]="config.import.videos.torrent.enabled"></my-feature-boolean> | 79 | <my-feature-boolean [value]="serverConfig.import.videos.torrent.enabled"></my-feature-boolean> |
80 | </td> | 80 | </td> |
81 | </tr> | 81 | </tr> |
82 | 82 | ||
@@ -88,7 +88,7 @@ | |||
88 | <tr> | 88 | <tr> |
89 | <td i18n class="sub-label">P2P enabled</td> | 89 | <td i18n class="sub-label">P2P enabled</td> |
90 | <td> | 90 | <td> |
91 | <my-feature-boolean [value]="config.tracker.enabled"></my-feature-boolean> | 91 | <my-feature-boolean [value]="serverConfig.tracker.enabled"></my-feature-boolean> |
92 | </td> | 92 | </td> |
93 | </tr> | 93 | </tr> |
94 | </table> | 94 | </table> |
diff --git a/client/src/app/shared/instance/instance-features-table.component.ts b/client/src/app/shared/instance/instance-features-table.component.ts index 1661f1efe..8fd15ebad 100644 --- a/client/src/app/shared/instance/instance-features-table.component.ts +++ b/client/src/app/shared/instance/instance-features-table.component.ts | |||
@@ -10,7 +10,7 @@ import { ServerConfig } from '@shared/models' | |||
10 | }) | 10 | }) |
11 | export class InstanceFeaturesTableComponent implements OnInit { | 11 | export class InstanceFeaturesTableComponent implements OnInit { |
12 | quotaHelpIndication = '' | 12 | quotaHelpIndication = '' |
13 | config: ServerConfig | 13 | serverConfig: ServerConfig |
14 | 14 | ||
15 | constructor ( | 15 | constructor ( |
16 | private i18n: I18n, | 16 | private i18n: I18n, |
@@ -19,29 +19,34 @@ export class InstanceFeaturesTableComponent implements OnInit { | |||
19 | } | 19 | } |
20 | 20 | ||
21 | get initialUserVideoQuota () { | 21 | get initialUserVideoQuota () { |
22 | return this.serverService.getConfig().user.videoQuota | 22 | return this.serverConfig.user.videoQuota |
23 | } | 23 | } |
24 | 24 | ||
25 | get dailyUserVideoQuota () { | 25 | get dailyUserVideoQuota () { |
26 | return Math.min(this.initialUserVideoQuota, this.serverService.getConfig().user.videoQuotaDaily) | 26 | return Math.min(this.initialUserVideoQuota, this.serverConfig.user.videoQuotaDaily) |
27 | } | 27 | } |
28 | 28 | ||
29 | ngOnInit () { | 29 | ngOnInit () { |
30 | this.serverService.configLoaded | 30 | this.serverConfig = this.serverService.getTmpConfig() |
31 | .subscribe(() => { | 31 | this.serverService.getConfig() |
32 | this.config = this.serverService.getConfig() | 32 | .subscribe(config => { |
33 | this.serverConfig = config | ||
33 | this.buildQuotaHelpIndication() | 34 | this.buildQuotaHelpIndication() |
34 | }) | 35 | }) |
35 | } | 36 | } |
36 | 37 | ||
37 | buildNSFWLabel () { | 38 | buildNSFWLabel () { |
38 | const policy = this.serverService.getConfig().instance.defaultNSFWPolicy | 39 | const policy = this.serverConfig.instance.defaultNSFWPolicy |
39 | 40 | ||
40 | if (policy === 'do_not_list') return this.i18n('Hidden') | 41 | if (policy === 'do_not_list') return this.i18n('Hidden') |
41 | if (policy === 'blur') return this.i18n('Blurred with confirmation request') | 42 | if (policy === 'blur') return this.i18n('Blurred with confirmation request') |
42 | if (policy === 'display') return this.i18n('Displayed') | 43 | if (policy === 'display') return this.i18n('Displayed') |
43 | } | 44 | } |
44 | 45 | ||
46 | getServerVersionAndCommit () { | ||
47 | return this.serverService.getServerVersionAndCommit() | ||
48 | } | ||
49 | |||
45 | private getApproximateTime (seconds: number) { | 50 | private getApproximateTime (seconds: number) { |
46 | const hours = Math.floor(seconds / 3600) | 51 | const hours = Math.floor(seconds / 3600) |
47 | let pluralSuffix = '' | 52 | let pluralSuffix = '' |
@@ -53,10 +58,6 @@ export class InstanceFeaturesTableComponent implements OnInit { | |||
53 | return this.i18n('~ {{minutes}} {minutes, plural, =1 {minute} other {minutes}}', { minutes }) | 58 | return this.i18n('~ {{minutes}} {minutes, plural, =1 {minute} other {minutes}}', { minutes }) |
54 | } | 59 | } |
55 | 60 | ||
56 | getServerVersionAndCommit () { | ||
57 | return this.serverService.getServerVersionAndCommit() | ||
58 | } | ||
59 | |||
60 | private buildQuotaHelpIndication () { | 61 | private buildQuotaHelpIndication () { |
61 | if (this.initialUserVideoQuota === -1) return | 62 | if (this.initialUserVideoQuota === -1) return |
62 | 63 | ||
diff --git a/client/src/app/shared/instance/instance.service.ts b/client/src/app/shared/instance/instance.service.ts index 44b413fa4..8b26063fb 100644 --- a/client/src/app/shared/instance/instance.service.ts +++ b/client/src/app/shared/instance/instance.service.ts | |||
@@ -1,4 +1,4 @@ | |||
1 | import { catchError } from 'rxjs/operators' | 1 | import { catchError, map } from 'rxjs/operators' |
2 | import { HttpClient } from '@angular/common/http' | 2 | import { HttpClient } from '@angular/common/http' |
3 | import { Injectable } from '@angular/core' | 3 | import { Injectable } from '@angular/core' |
4 | import { environment } from '../../../environments/environment' | 4 | import { environment } from '../../../environments/environment' |
@@ -7,6 +7,7 @@ import { About } from '../../../../../shared/models/server' | |||
7 | import { MarkdownService } from '@app/shared/renderer' | 7 | import { MarkdownService } from '@app/shared/renderer' |
8 | import { peertubeTranslate } from '@shared/models' | 8 | import { peertubeTranslate } from '@shared/models' |
9 | import { ServerService } from '@app/core' | 9 | import { ServerService } from '@app/core' |
10 | import { forkJoin } from 'rxjs' | ||
10 | 11 | ||
11 | @Injectable() | 12 | @Injectable() |
12 | export class InstanceService { | 13 | export class InstanceService { |
@@ -57,25 +58,35 @@ export class InstanceService { | |||
57 | return html | 58 | return html |
58 | } | 59 | } |
59 | 60 | ||
60 | buildTranslatedLanguages (about: About, translations: any) { | 61 | buildTranslatedLanguages (about: About) { |
61 | const languagesArray = this.serverService.getVideoLanguages() | 62 | return forkJoin([ |
63 | this.serverService.getVideoLanguages(), | ||
64 | this.serverService.getServerLocale() | ||
65 | ]).pipe( | ||
66 | map(([ languagesArray, translations ]) => { | ||
67 | return about.instance.languages | ||
68 | .map(l => { | ||
69 | const languageObj = languagesArray.find(la => la.id === l) | ||
62 | 70 | ||
63 | return about.instance.languages | 71 | return peertubeTranslate(languageObj.label, translations) |
64 | .map(l => { | 72 | }) |
65 | const languageObj = languagesArray.find(la => la.id === l) | 73 | }) |
66 | 74 | ) | |
67 | return peertubeTranslate(languageObj.label, translations) | ||
68 | }) | ||
69 | } | 75 | } |
70 | 76 | ||
71 | buildTranslatedCategories (about: About, translations: any) { | 77 | buildTranslatedCategories (about: About) { |
72 | const categoriesArray = this.serverService.getVideoCategories() | 78 | return forkJoin([ |
73 | 79 | this.serverService.getVideoCategories(), | |
74 | return about.instance.categories | 80 | this.serverService.getServerLocale() |
75 | .map(c => { | 81 | ]).pipe( |
76 | const categoryObj = categoriesArray.find(ca => ca.id === c) | 82 | map(([ categoriesArray, translations ]) => { |
83 | return about.instance.categories | ||
84 | .map(c => { | ||
85 | const categoryObj = categoriesArray.find(ca => ca.id === c) | ||
77 | 86 | ||
78 | return peertubeTranslate(categoryObj.label, translations) | 87 | return peertubeTranslate(categoryObj.label, translations) |
79 | }) | 88 | }) |
89 | }) | ||
90 | ) | ||
80 | } | 91 | } |
81 | } | 92 | } |
diff --git a/client/src/app/shared/moderation/user-moderation-dropdown.component.ts b/client/src/app/shared/moderation/user-moderation-dropdown.component.ts index e9d4c1437..d82dc3d94 100644 --- a/client/src/app/shared/moderation/user-moderation-dropdown.component.ts +++ b/client/src/app/shared/moderation/user-moderation-dropdown.component.ts | |||
@@ -1,4 +1,4 @@ | |||
1 | import { Component, EventEmitter, Input, OnChanges, Output, ViewChild } from '@angular/core' | 1 | import { Component, EventEmitter, Input, OnChanges, OnInit, Output, ViewChild } from '@angular/core' |
2 | import { I18n } from '@ngx-translate/i18n-polyfill' | 2 | import { I18n } from '@ngx-translate/i18n-polyfill' |
3 | import { DropdownAction } from '@app/shared/buttons/action-dropdown.component' | 3 | import { DropdownAction } from '@app/shared/buttons/action-dropdown.component' |
4 | import { UserBanModalComponent } from '@app/shared/moderation/user-ban-modal.component' | 4 | import { UserBanModalComponent } from '@app/shared/moderation/user-ban-modal.component' |
@@ -7,12 +7,13 @@ import { AuthService, ConfirmService, Notifier, ServerService } from '@app/core' | |||
7 | import { User, UserRight } from '../../../../../shared/models/users' | 7 | import { User, UserRight } from '../../../../../shared/models/users' |
8 | import { Account } from '@app/shared/account/account.model' | 8 | import { Account } from '@app/shared/account/account.model' |
9 | import { BlocklistService } from '@app/shared/blocklist' | 9 | import { BlocklistService } from '@app/shared/blocklist' |
10 | import { ServerConfig } from '@shared/models' | ||
10 | 11 | ||
11 | @Component({ | 12 | @Component({ |
12 | selector: 'my-user-moderation-dropdown', | 13 | selector: 'my-user-moderation-dropdown', |
13 | templateUrl: './user-moderation-dropdown.component.html' | 14 | templateUrl: './user-moderation-dropdown.component.html' |
14 | }) | 15 | }) |
15 | export class UserModerationDropdownComponent implements OnChanges { | 16 | export class UserModerationDropdownComponent implements OnInit, OnChanges { |
16 | @ViewChild('userBanModal', { static: false }) userBanModal: UserBanModalComponent | 17 | @ViewChild('userBanModal', { static: false }) userBanModal: UserBanModalComponent |
17 | 18 | ||
18 | @Input() user: User | 19 | @Input() user: User |
@@ -26,6 +27,8 @@ export class UserModerationDropdownComponent implements OnChanges { | |||
26 | 27 | ||
27 | userActions: DropdownAction<{ user: User, account: Account }>[][] = [] | 28 | userActions: DropdownAction<{ user: User, account: Account }>[][] = [] |
28 | 29 | ||
30 | private serverConfig: ServerConfig | ||
31 | |||
29 | constructor ( | 32 | constructor ( |
30 | private authService: AuthService, | 33 | private authService: AuthService, |
31 | private notifier: Notifier, | 34 | private notifier: Notifier, |
@@ -38,7 +41,13 @@ export class UserModerationDropdownComponent implements OnChanges { | |||
38 | ) { } | 41 | ) { } |
39 | 42 | ||
40 | get requiresEmailVerification () { | 43 | get requiresEmailVerification () { |
41 | return this.serverService.getConfig().signup.requiresEmailVerification | 44 | return this.serverConfig.signup.requiresEmailVerification |
45 | } | ||
46 | |||
47 | ngOnInit (): void { | ||
48 | this.serverConfig = this.serverService.getTmpConfig() | ||
49 | this.serverService.getConfig() | ||
50 | .subscribe(config => this.serverConfig = config) | ||
42 | } | 51 | } |
43 | 52 | ||
44 | ngOnChanges () { | 53 | ngOnChanges () { |
diff --git a/client/src/app/shared/overview/overview.service.ts b/client/src/app/shared/overview/overview.service.ts index bd4068925..79cb781f7 100644 --- a/client/src/app/shared/overview/overview.service.ts +++ b/client/src/app/shared/overview/overview.service.ts | |||
@@ -60,7 +60,7 @@ export class OverviewService { | |||
60 | .pipe( | 60 | .pipe( |
61 | // Translate categories | 61 | // Translate categories |
62 | switchMap(() => { | 62 | switchMap(() => { |
63 | return this.serverService.localeObservable | 63 | return this.serverService.getServerLocale() |
64 | .pipe( | 64 | .pipe( |
65 | tap(translations => { | 65 | tap(translations => { |
66 | for (const c of videosOverviewResult.categories) { | 66 | for (const c of videosOverviewResult.categories) { |
diff --git a/client/src/app/shared/video-caption/video-caption.service.ts b/client/src/app/shared/video-caption/video-caption.service.ts index 977f6253a..6bfe67435 100644 --- a/client/src/app/shared/video-caption/video-caption.service.ts +++ b/client/src/app/shared/video-caption/video-caption.service.ts | |||
@@ -22,7 +22,7 @@ export class VideoCaptionService { | |||
22 | return this.authHttp.get<ResultList<VideoCaption>>(VideoService.BASE_VIDEO_URL + videoId + '/captions') | 22 | return this.authHttp.get<ResultList<VideoCaption>>(VideoService.BASE_VIDEO_URL + videoId + '/captions') |
23 | .pipe( | 23 | .pipe( |
24 | switchMap(captionsResult => { | 24 | switchMap(captionsResult => { |
25 | return this.serverService.localeObservable | 25 | return this.serverService.getServerLocale() |
26 | .pipe(map(translations => ({ captionsResult, translations }))) | 26 | .pipe(map(translations => ({ captionsResult, translations }))) |
27 | }), | 27 | }), |
28 | map(({ captionsResult, translations }) => { | 28 | map(({ captionsResult, translations }) => { |
diff --git a/client/src/app/shared/video-import/video-import.service.ts b/client/src/app/shared/video-import/video-import.service.ts index 7ae13154d..3e3fb7dfb 100644 --- a/client/src/app/shared/video-import/video-import.service.ts +++ b/client/src/app/shared/video-import/video-import.service.ts | |||
@@ -91,7 +91,7 @@ export class VideoImportService { | |||
91 | } | 91 | } |
92 | 92 | ||
93 | private extractVideoImports (result: ResultList<VideoImport>): Observable<ResultList<VideoImport>> { | 93 | private extractVideoImports (result: ResultList<VideoImport>): Observable<ResultList<VideoImport>> { |
94 | return this.serverService.localeObservable | 94 | return this.serverService.getServerLocale() |
95 | .pipe( | 95 | .pipe( |
96 | map(translations => { | 96 | map(translations => { |
97 | result.data.forEach(d => | 97 | result.data.forEach(d => |
diff --git a/client/src/app/shared/video-playlist/video-playlist-element-miniature.component.ts b/client/src/app/shared/video-playlist/video-playlist-element-miniature.component.ts index a8e5a4885..cd592eab0 100644 --- a/client/src/app/shared/video-playlist/video-playlist-element-miniature.component.ts +++ b/client/src/app/shared/video-playlist/video-playlist-element-miniature.component.ts | |||
@@ -1,6 +1,6 @@ | |||
1 | import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core' | 1 | import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core' |
2 | import { Video } from '@app/shared/video/video.model' | 2 | import { Video } from '@app/shared/video/video.model' |
3 | import { VideoPlaylistElementType, VideoPlaylistElementUpdate } from '@shared/models' | 3 | import { ServerConfig, VideoPlaylistElementType, VideoPlaylistElementUpdate } from '@shared/models' |
4 | import { AuthService, ConfirmService, Notifier, ServerService } from '@app/core' | 4 | import { AuthService, ConfirmService, Notifier, ServerService } from '@app/core' |
5 | import { ActivatedRoute } from '@angular/router' | 5 | import { ActivatedRoute } from '@angular/router' |
6 | import { I18n } from '@ngx-translate/i18n-polyfill' | 6 | import { I18n } from '@ngx-translate/i18n-polyfill' |
@@ -17,7 +17,7 @@ import { VideoPlaylistElement } from '@app/shared/video-playlist/video-playlist- | |||
17 | templateUrl: './video-playlist-element-miniature.component.html', | 17 | templateUrl: './video-playlist-element-miniature.component.html', |
18 | changeDetection: ChangeDetectionStrategy.OnPush | 18 | changeDetection: ChangeDetectionStrategy.OnPush |
19 | }) | 19 | }) |
20 | export class VideoPlaylistElementMiniatureComponent { | 20 | export class VideoPlaylistElementMiniatureComponent implements OnInit { |
21 | @ViewChild('moreDropdown', { static: false }) moreDropdown: NgbDropdown | 21 | @ViewChild('moreDropdown', { static: false }) moreDropdown: NgbDropdown |
22 | 22 | ||
23 | @Input() playlist: VideoPlaylist | 23 | @Input() playlist: VideoPlaylist |
@@ -39,6 +39,8 @@ export class VideoPlaylistElementMiniatureComponent { | |||
39 | stopTimestamp: number | 39 | stopTimestamp: number |
40 | } = {} as any | 40 | } = {} as any |
41 | 41 | ||
42 | private serverConfig: ServerConfig | ||
43 | |||
42 | constructor ( | 44 | constructor ( |
43 | private authService: AuthService, | 45 | private authService: AuthService, |
44 | private serverService: ServerService, | 46 | private serverService: ServerService, |
@@ -51,6 +53,15 @@ export class VideoPlaylistElementMiniatureComponent { | |||
51 | private cdr: ChangeDetectorRef | 53 | private cdr: ChangeDetectorRef |
52 | ) {} | 54 | ) {} |
53 | 55 | ||
56 | ngOnInit (): void { | ||
57 | this.serverConfig = this.serverService.getTmpConfig() | ||
58 | this.serverService.getConfig() | ||
59 | .subscribe(config => { | ||
60 | this.serverConfig = config | ||
61 | this.cdr.detectChanges() | ||
62 | }) | ||
63 | } | ||
64 | |||
54 | isUnavailable (e: VideoPlaylistElement) { | 65 | isUnavailable (e: VideoPlaylistElement) { |
55 | return e.type === VideoPlaylistElementType.UNAVAILABLE | 66 | return e.type === VideoPlaylistElementType.UNAVAILABLE |
56 | } | 67 | } |
@@ -80,7 +91,7 @@ export class VideoPlaylistElementMiniatureComponent { | |||
80 | } | 91 | } |
81 | 92 | ||
82 | isVideoBlur (video: Video) { | 93 | isVideoBlur (video: Video) { |
83 | return video.isVideoNSFWForUser(this.authService.getUser(), this.serverService.getConfig()) | 94 | return video.isVideoNSFWForUser(this.authService.getUser(), this.serverConfig) |
84 | } | 95 | } |
85 | 96 | ||
86 | removeFromPlaylist (playlistElement: VideoPlaylistElement) { | 97 | removeFromPlaylist (playlistElement: VideoPlaylistElement) { |
diff --git a/client/src/app/shared/video-playlist/video-playlist.service.ts b/client/src/app/shared/video-playlist/video-playlist.service.ts index 42791af86..2945b4959 100644 --- a/client/src/app/shared/video-playlist/video-playlist.service.ts +++ b/client/src/app/shared/video-playlist/video-playlist.service.ts | |||
@@ -173,7 +173,7 @@ export class VideoPlaylistService { | |||
173 | } | 173 | } |
174 | 174 | ||
175 | extractPlaylists (result: ResultList<VideoPlaylistServerModel>) { | 175 | extractPlaylists (result: ResultList<VideoPlaylistServerModel>) { |
176 | return this.serverService.localeObservable | 176 | return this.serverService.getServerLocale() |
177 | .pipe( | 177 | .pipe( |
178 | map(translations => { | 178 | map(translations => { |
179 | const playlistsJSON = result.data | 179 | const playlistsJSON = result.data |
@@ -190,12 +190,12 @@ export class VideoPlaylistService { | |||
190 | } | 190 | } |
191 | 191 | ||
192 | extractPlaylist (playlist: VideoPlaylistServerModel) { | 192 | extractPlaylist (playlist: VideoPlaylistServerModel) { |
193 | return this.serverService.localeObservable | 193 | return this.serverService.getServerLocale() |
194 | .pipe(map(translations => new VideoPlaylist(playlist, translations))) | 194 | .pipe(map(translations => new VideoPlaylist(playlist, translations))) |
195 | } | 195 | } |
196 | 196 | ||
197 | extractVideoPlaylistElements (result: ResultList<ServerVideoPlaylistElement>) { | 197 | extractVideoPlaylistElements (result: ResultList<ServerVideoPlaylistElement>) { |
198 | return this.serverService.localeObservable | 198 | return this.serverService.getServerLocale() |
199 | .pipe( | 199 | .pipe( |
200 | map(translations => { | 200 | map(translations => { |
201 | const elementsJson = result.data | 201 | const elementsJson = result.data |
diff --git a/client/src/app/shared/video/abstract-video-list.ts b/client/src/app/shared/video/abstract-video-list.ts index 2926b179b..faeea27d9 100644 --- a/client/src/app/shared/video/abstract-video-list.ts +++ b/client/src/app/shared/video/abstract-video-list.ts | |||
@@ -13,7 +13,7 @@ import { Notifier, ServerService } from '@app/core' | |||
13 | import { DisableForReuseHook } from '@app/core/routing/disable-for-reuse-hook' | 13 | import { DisableForReuseHook } from '@app/core/routing/disable-for-reuse-hook' |
14 | import { I18n } from '@ngx-translate/i18n-polyfill' | 14 | import { I18n } from '@ngx-translate/i18n-polyfill' |
15 | import { isLastMonth, isLastWeek, isToday, isYesterday } from '@shared/core-utils/miscs/date' | 15 | import { isLastMonth, isLastWeek, isToday, isYesterday } from '@shared/core-utils/miscs/date' |
16 | import { ResultList } from '@shared/models' | 16 | import { ResultList, ServerConfig } from '@shared/models' |
17 | 17 | ||
18 | enum GroupDate { | 18 | enum GroupDate { |
19 | UNKNOWN = 0, | 19 | UNKNOWN = 0, |
@@ -61,6 +61,8 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy, DisableFor | |||
61 | 61 | ||
62 | onDataSubject = new Subject<any[]>() | 62 | onDataSubject = new Subject<any[]>() |
63 | 63 | ||
64 | protected serverConfig: ServerConfig | ||
65 | |||
64 | protected abstract notifier: Notifier | 66 | protected abstract notifier: Notifier |
65 | protected abstract authService: AuthService | 67 | protected abstract authService: AuthService |
66 | protected abstract route: ActivatedRoute | 68 | protected abstract route: ActivatedRoute |
@@ -85,6 +87,10 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy, DisableFor | |||
85 | } | 87 | } |
86 | 88 | ||
87 | ngOnInit () { | 89 | ngOnInit () { |
90 | this.serverConfig = this.serverService.getTmpConfig() | ||
91 | this.serverService.getConfig() | ||
92 | .subscribe(config => this.serverConfig = config) | ||
93 | |||
88 | this.groupedDateLabels = { | 94 | this.groupedDateLabels = { |
89 | [GroupDate.UNKNOWN]: null, | 95 | [GroupDate.UNKNOWN]: null, |
90 | [GroupDate.TODAY]: this.i18n('Today'), | 96 | [GroupDate.TODAY]: this.i18n('Today'), |
@@ -251,7 +257,7 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy, DisableFor | |||
251 | } | 257 | } |
252 | 258 | ||
253 | let path = this.router.url | 259 | let path = this.router.url |
254 | if (!path || path === '/') path = this.serverService.getConfig().instance.defaultClientRoute | 260 | if (!path || path === '/') path = this.serverConfig.instance.defaultClientRoute |
255 | 261 | ||
256 | this.router.navigate([ path ], { queryParams, replaceUrl: true, queryParamsHandling: 'merge' }) | 262 | this.router.navigate([ path ], { queryParams, replaceUrl: true, queryParamsHandling: 'merge' }) |
257 | } | 263 | } |
diff --git a/client/src/app/shared/video/video-miniature.component.ts b/client/src/app/shared/video/video-miniature.component.ts index d5c7dfd9b..9fffc7ddb 100644 --- a/client/src/app/shared/video/video-miniature.component.ts +++ b/client/src/app/shared/video/video-miniature.component.ts | |||
@@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, LOCALE | |||
2 | import { User } from '../users' | 2 | import { User } from '../users' |
3 | import { Video } from './video.model' | 3 | import { Video } from './video.model' |
4 | import { ServerService } from '@app/core' | 4 | import { ServerService } from '@app/core' |
5 | import { VideoPrivacy, VideoState } from '../../../../../shared' | 5 | import { ServerConfig, VideoPrivacy, VideoState } from '../../../../../shared' |
6 | import { I18n } from '@ngx-translate/i18n-polyfill' | 6 | import { I18n } from '@ngx-translate/i18n-polyfill' |
7 | import { VideoActionsDisplayType } from '@app/shared/video/video-actions-dropdown.component' | 7 | import { VideoActionsDisplayType } from '@app/shared/video/video-actions-dropdown.component' |
8 | import { ScreenService } from '@app/shared/misc/screen.service' | 8 | import { ScreenService } from '@app/shared/misc/screen.service' |
@@ -55,6 +55,7 @@ export class VideoMiniatureComponent implements OnInit { | |||
55 | report: true | 55 | report: true |
56 | } | 56 | } |
57 | showActions = false | 57 | showActions = false |
58 | serverConfig: ServerConfig | ||
58 | 59 | ||
59 | private ownerDisplayTypeChosen: 'account' | 'videoChannel' | 60 | private ownerDisplayTypeChosen: 'account' | 'videoChannel' |
60 | 61 | ||
@@ -66,10 +67,14 @@ export class VideoMiniatureComponent implements OnInit { | |||
66 | ) { } | 67 | ) { } |
67 | 68 | ||
68 | get isVideoBlur () { | 69 | get isVideoBlur () { |
69 | return this.video.isVideoNSFWForUser(this.user, this.serverService.getConfig()) | 70 | return this.video.isVideoNSFWForUser(this.user, this.serverConfig) |
70 | } | 71 | } |
71 | 72 | ||
72 | ngOnInit () { | 73 | ngOnInit () { |
74 | this.serverConfig = this.serverService.getTmpConfig() | ||
75 | this.serverService.getConfig() | ||
76 | .subscribe(config => this.serverConfig = config) | ||
77 | |||
73 | this.setUpBy() | 78 | this.setUpBy() |
74 | 79 | ||
75 | // We rely on mouseenter to lazy load actions | 80 | // We rely on mouseenter to lazy load actions |
diff --git a/client/src/app/shared/video/video.service.ts b/client/src/app/shared/video/video.service.ts index b0fa55966..9adf46495 100644 --- a/client/src/app/shared/video/video.service.ts +++ b/client/src/app/shared/video/video.service.ts | |||
@@ -64,7 +64,7 @@ export class VideoService implements VideosProvider { | |||
64 | } | 64 | } |
65 | 65 | ||
66 | getVideo (options: { videoId: string }): Observable<VideoDetails> { | 66 | getVideo (options: { videoId: string }): Observable<VideoDetails> { |
67 | return this.serverService.localeObservable | 67 | return this.serverService.getServerLocale() |
68 | .pipe( | 68 | .pipe( |
69 | switchMap(translations => { | 69 | switchMap(translations => { |
70 | return this.authHttp.get<VideoDetailsServerModel>(VideoService.BASE_VIDEO_URL + options.videoId) | 70 | return this.authHttp.get<VideoDetailsServerModel>(VideoService.BASE_VIDEO_URL + options.videoId) |
@@ -315,7 +315,7 @@ export class VideoService implements VideosProvider { | |||
315 | } | 315 | } |
316 | 316 | ||
317 | extractVideos (result: ResultList<VideoServerModel>) { | 317 | extractVideos (result: ResultList<VideoServerModel>) { |
318 | return this.serverService.localeObservable | 318 | return this.serverService.getServerLocale() |
319 | .pipe( | 319 | .pipe( |
320 | map(translations => { | 320 | map(translations => { |
321 | const videosJson = result.data | 321 | const videosJson = result.data |