aboutsummaryrefslogtreecommitdiffhomepage
path: root/client/src
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2021-06-04 11:46:17 +0200
committerChocobozzz <me@florianbigard.com>2021-06-04 15:45:44 +0200
commit8e08d415f9473b6b72fef698729453e726da16e7 (patch)
treeb03d004eb216fb5e410619aa85ddf57539be47f9 /client/src
parent584ac47a323d6e57233fce4451d43d4943bfaa10 (diff)
downloadPeerTube-8e08d415f9473b6b72fef698729453e726da16e7.tar.gz
PeerTube-8e08d415f9473b6b72fef698729453e726da16e7.tar.zst
PeerTube-8e08d415f9473b6b72fef698729453e726da16e7.zip
Load server config on app init
Diffstat (limited to 'client/src')
-rw-r--r--client/src/app/app-routing.module.ts2
-rw-r--r--client/src/app/app.module.ts16
-rw-r--r--client/src/app/core/server/server.service.ts180
3 files changed, 34 insertions, 164 deletions
diff --git a/client/src/app/app-routing.module.ts b/client/src/app/app-routing.module.ts
index e35f540be..b04e6a42b 100644
--- a/client/src/app/app-routing.module.ts
+++ b/client/src/app/app-routing.module.ts
@@ -114,7 +114,7 @@ const routes: Routes = [
114 path: 'w', 114 path: 'w',
115 loadChildren: () => import('@app/+videos/+video-watch/video-watch.module').then(m => m.VideoWatchModule), 115 loadChildren: () => import('@app/+videos/+video-watch/video-watch.module').then(m => m.VideoWatchModule),
116 data: { 116 data: {
117 preload: 3000 117 preload: 5000
118 } 118 }
119 }, 119 },
120 { 120 {
diff --git a/client/src/app/app.module.ts b/client/src/app/app.module.ts
index 9f46d49a2..8fc054d79 100644
--- a/client/src/app/app.module.ts
+++ b/client/src/app/app.module.ts
@@ -1,13 +1,13 @@
1import 'focus-visible' 1import 'focus-visible'
2import { environment } from 'src/environments/environment' 2import { environment } from 'src/environments/environment'
3import { APP_BASE_HREF, registerLocaleData } from '@angular/common' 3import { APP_BASE_HREF, registerLocaleData } from '@angular/common'
4import { NgModule } from '@angular/core' 4import { APP_INITIALIZER, NgModule } from '@angular/core'
5import { BrowserModule } from '@angular/platform-browser' 5import { BrowserModule } from '@angular/platform-browser'
6import { ServiceWorkerModule } from '@angular/service-worker' 6import { ServiceWorkerModule } from '@angular/service-worker'
7import localeOc from '@app/helpers/locales/oc' 7import localeOc from '@app/helpers/locales/oc'
8import { AppRoutingModule } from './app-routing.module' 8import { AppRoutingModule } from './app-routing.module'
9import { AppComponent } from './app.component' 9import { AppComponent } from './app.component'
10import { CoreModule } from './core' 10import { CoreModule, ServerService } from './core'
11import { EmptyComponent } from './empty.component' 11import { EmptyComponent } from './empty.component'
12import { HeaderComponent, SearchTypeaheadComponent, SuggestionComponent } from './header' 12import { HeaderComponent, SearchTypeaheadComponent, SuggestionComponent } from './header'
13import { HighlightPipe } from './header/highlight.pipe' 13import { HighlightPipe } from './header/highlight.pipe'
@@ -26,6 +26,10 @@ import { SharedUserInterfaceSettingsModule } from './shared/shared-user-settings
26 26
27registerLocaleData(localeOc, 'oc') 27registerLocaleData(localeOc, 'oc')
28 28
29export function loadConfigFactory (server: ServerService) {
30 return () => server.loadConfig()
31}
32
29@NgModule({ 33@NgModule({
30 bootstrap: [ AppComponent ], 34 bootstrap: [ AppComponent ],
31 35
@@ -67,7 +71,13 @@ registerLocaleData(localeOc, 'oc')
67 { 71 {
68 provide: APP_BASE_HREF, 72 provide: APP_BASE_HREF,
69 useValue: '/' 73 useValue: '/'
70 } 74 },
75 {
76 provide: APP_INITIALIZER,
77 useFactory: loadConfigFactory,
78 deps: [ ServerService ],
79 multi: true
80 }
71 ] 81 ]
72}) 82})
73export class AppModule {} 83export class AppModule {}
diff --git a/client/src/app/core/server/server.service.ts b/client/src/app/core/server/server.service.ts
index 6918957f4..251963858 100644
--- a/client/src/app/core/server/server.service.ts
+++ b/client/src/app/core/server/server.service.ts
@@ -4,7 +4,7 @@ import { HttpClient } from '@angular/common/http'
4import { Inject, Injectable, LOCALE_ID } from '@angular/core' 4import { Inject, Injectable, LOCALE_ID } from '@angular/core'
5import { getDevLocale, isOnDevLocale, sortBy } from '@app/helpers' 5import { getDevLocale, isOnDevLocale, sortBy } from '@app/helpers'
6import { getCompleteLocale, isDefaultLocale, peertubeTranslate } from '@shared/core-utils/i18n' 6import { getCompleteLocale, isDefaultLocale, peertubeTranslate } from '@shared/core-utils/i18n'
7import { SearchTargetType, ServerConfig, ServerStats, VideoConstant } from '@shared/models' 7import { HTMLServerConfig, SearchTargetType, ServerConfig, ServerStats, VideoConstant } from '@shared/models'
8import { environment } from '../../../environments/environment' 8import { environment } from '../../../environments/environment'
9 9
10@Injectable() 10@Injectable()
@@ -28,163 +28,26 @@ export class ServerService {
28 private configReset = false 28 private configReset = false
29 29
30 private configLoaded = false 30 private configLoaded = false
31 private config: ServerConfig = { 31 private config: ServerConfig
32 instance: { 32 private htmlConfig: HTMLServerConfig
33 name: 'PeerTube',
34 shortDescription: 'PeerTube, a federated (ActivityPub) video streaming platform ' +
35 'using P2P (BitTorrent) directly in the web browser with WebTorrent and Angular.',
36 isNSFW: false,
37 defaultNSFWPolicy: 'do_not_list' as 'do_not_list',
38 defaultClientRoute: '',
39 customizations: {
40 javascript: '',
41 css: ''
42 }
43 },
44 plugin: {
45 registered: [],
46 registeredExternalAuths: [],
47 registeredIdAndPassAuths: []
48 },
49 theme: {
50 registered: [],
51 default: 'default'
52 },
53 email: {
54 enabled: false
55 },
56 contactForm: {
57 enabled: false
58 },
59 serverVersion: 'Unknown',
60 signup: {
61 allowed: false,
62 allowedForCurrentIP: false,
63 requiresEmailVerification: false,
64 minimumAge: 16
65 },
66 transcoding: {
67 profile: 'default',
68 availableProfiles: [ 'default' ],
69 enabledResolutions: [],
70 hls: {
71 enabled: false
72 },
73 webtorrent: {
74 enabled: true
75 }
76 },
77 live: {
78 enabled: false,
79 allowReplay: true,
80 maxDuration: null,
81 maxInstanceLives: -1,
82 maxUserLives: -1,
83 transcoding: {
84 enabled: false,
85 profile: 'default',
86 availableProfiles: [ 'default' ],
87 enabledResolutions: []
88 },
89 rtmp: {
90 port: 1935
91 }
92 },
93 avatar: {
94 file: {
95 size: { max: 0 },
96 extensions: []
97 }
98 },
99 banner: {
100 file: {
101 size: { max: 0 },
102 extensions: []
103 }
104 },
105 video: {
106 image: {
107 size: { max: 0 },
108 extensions: []
109 },
110 file: {
111 extensions: []
112 }
113 },
114 videoCaption: {
115 file: {
116 size: { max: 0 },
117 extensions: []
118 }
119 },
120 user: {
121 videoQuota: -1,
122 videoQuotaDaily: -1
123 },
124 import: {
125 videos: {
126 http: {
127 enabled: false
128 },
129 torrent: {
130 enabled: false
131 }
132 }
133 },
134 trending: {
135 videos: {
136 intervalDays: 0,
137 algorithms: {
138 enabled: [ 'best', 'hot', 'most-viewed', 'most-liked' ],
139 default: 'most-viewed'
140 }
141 }
142 },
143 autoBlacklist: {
144 videos: {
145 ofUsers: {
146 enabled: false
147 }
148 }
149 },
150 tracker: {
151 enabled: true
152 },
153 followings: {
154 instance: {
155 autoFollowIndex: {
156 indexUrl: 'https://instances.joinpeertube.org'
157 }
158 }
159 },
160 broadcastMessage: {
161 enabled: false,
162 message: '',
163 level: 'info',
164 dismissable: false
165 },
166 search: {
167 remoteUri: {
168 users: true,
169 anonymous: false
170 },
171 searchIndex: {
172 enabled: false,
173 url: '',
174 disableLocalSearch: false,
175 isDefaultSearch: false
176 }
177 },
178 homepage: {
179 enabled: false
180 }
181 }
182 33
183 constructor ( 34 constructor (
184 private http: HttpClient, 35 private http: HttpClient,
185 @Inject(LOCALE_ID) private localeId: string 36 @Inject(LOCALE_ID) private localeId: string
186 ) { 37 ) {
187 this.loadConfigLocally() 38 }
39
40 loadConfig () {
41 try {
42 return this.loadConfigLocally()
43 } catch (err) {
44 // Expected in dev mode since we can't inject the config in the HTML
45 if (environment.production !== false) {
46 console.error('Cannot load config locally. Fallback to API.')
47 }
48
49 return this.getConfig()
50 }
188 } 51 }
189 52
190 getServerVersionAndCommit () { 53 getServerVersionAndCommit () {
@@ -343,13 +206,10 @@ export class ServerService {
343 206
344 private loadConfigLocally () { 207 private loadConfigLocally () {
345 const configString = window['PeerTubeServerConfig'] 208 const configString = window['PeerTubeServerConfig']
346 if (!configString) return 209 if (!configString) {
347 210 throw new Error('Could not find PeerTubeServerConfig in HTML')
348 try {
349 const parsed = JSON.parse(configString)
350 Object.assign(this.config, parsed)
351 } catch (err) {
352 console.error('Cannot parse config saved in from index.html.', err)
353 } 211 }
212
213 this.config = JSON.parse(configString)
354 } 214 }
355} 215}