Verified Commit 8e08d415 authored by Chocobozzz's avatar Chocobozzz
Browse files

Load server config on app init

parent 584ac47a
...@@ -114,7 +114,7 @@ const routes: Routes = [ ...@@ -114,7 +114,7 @@ const routes: Routes = [
path: 'w', path: 'w',
loadChildren: () => import('@app/+videos/+video-watch/video-watch.module').then(m => m.VideoWatchModule), loadChildren: () => import('@app/+videos/+video-watch/video-watch.module').then(m => m.VideoWatchModule),
data: { data: {
preload: 3000 preload: 5000
} }
}, },
{ {
......
import 'focus-visible' import 'focus-visible'
import { environment } from 'src/environments/environment' import { environment } from 'src/environments/environment'
import { APP_BASE_HREF, registerLocaleData } from '@angular/common' import { APP_BASE_HREF, registerLocaleData } from '@angular/common'
import { NgModule } from '@angular/core' import { APP_INITIALIZER, NgModule } from '@angular/core'
import { BrowserModule } from '@angular/platform-browser' import { BrowserModule } from '@angular/platform-browser'
import { ServiceWorkerModule } from '@angular/service-worker' import { ServiceWorkerModule } from '@angular/service-worker'
import localeOc from '@app/helpers/locales/oc' import localeOc from '@app/helpers/locales/oc'
import { AppRoutingModule } from './app-routing.module' import { AppRoutingModule } from './app-routing.module'
import { AppComponent } from './app.component' import { AppComponent } from './app.component'
import { CoreModule } from './core' import { CoreModule, ServerService } from './core'
import { EmptyComponent } from './empty.component' import { EmptyComponent } from './empty.component'
import { HeaderComponent, SearchTypeaheadComponent, SuggestionComponent } from './header' import { HeaderComponent, SearchTypeaheadComponent, SuggestionComponent } from './header'
import { HighlightPipe } from './header/highlight.pipe' import { HighlightPipe } from './header/highlight.pipe'
...@@ -26,6 +26,10 @@ import { SharedUserInterfaceSettingsModule } from './shared/shared-user-settings ...@@ -26,6 +26,10 @@ import { SharedUserInterfaceSettingsModule } from './shared/shared-user-settings
registerLocaleData(localeOc, 'oc') registerLocaleData(localeOc, 'oc')
export function loadConfigFactory (server: ServerService) {
return () => server.loadConfig()
}
@NgModule({ @NgModule({
bootstrap: [ AppComponent ], bootstrap: [ AppComponent ],
...@@ -67,7 +71,13 @@ registerLocaleData(localeOc, 'oc') ...@@ -67,7 +71,13 @@ registerLocaleData(localeOc, 'oc')
{ {
provide: APP_BASE_HREF, provide: APP_BASE_HREF,
useValue: '/' useValue: '/'
} },
{
provide: APP_INITIALIZER,
useFactory: loadConfigFactory,
deps: [ ServerService ],
multi: true
}
] ]
}) })
export class AppModule {} export class AppModule {}
...@@ -4,7 +4,7 @@ import { HttpClient } from '@angular/common/http' ...@@ -4,7 +4,7 @@ import { HttpClient } from '@angular/common/http'
import { Inject, Injectable, LOCALE_ID } from '@angular/core' import { Inject, Injectable, LOCALE_ID } from '@angular/core'
import { getDevLocale, isOnDevLocale, sortBy } from '@app/helpers' import { getDevLocale, isOnDevLocale, sortBy } from '@app/helpers'
import { getCompleteLocale, isDefaultLocale, peertubeTranslate } from '@shared/core-utils/i18n' import { getCompleteLocale, isDefaultLocale, peertubeTranslate } from '@shared/core-utils/i18n'
import { SearchTargetType, ServerConfig, ServerStats, VideoConstant } from '@shared/models' import { HTMLServerConfig, SearchTargetType, ServerConfig, ServerStats, VideoConstant } from '@shared/models'
import { environment } from '../../../environments/environment' import { environment } from '../../../environments/environment'
@Injectable() @Injectable()
...@@ -28,163 +28,26 @@ export class ServerService { ...@@ -28,163 +28,26 @@ export class ServerService {
private configReset = false private configReset = false
private configLoaded = false private configLoaded = false
private config: ServerConfig = { private config: ServerConfig
instance: { private htmlConfig: HTMLServerConfig
name: 'PeerTube',
shortDescription: 'PeerTube, a federated (ActivityPub) video streaming platform ' +
'using P2P (BitTorrent) directly in the web browser with WebTorrent and Angular.',
isNSFW: false,
defaultNSFWPolicy: 'do_not_list' as 'do_not_list',
defaultClientRoute: '',
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,
minimumAge: 16
},
transcoding: {
profile: 'default',
availableProfiles: [ 'default' ],
enabledResolutions: [],
hls: {
enabled: false
},
webtorrent: {
enabled: true
}
},
live: {
enabled: false,
allowReplay: true,
maxDuration: null,
maxInstanceLives: -1,
maxUserLives: -1,
transcoding: {
enabled: false,
profile: 'default',
availableProfiles: [ 'default' ],
enabledResolutions: []
},
rtmp: {
port: 1935
}
},
avatar: {
file: {
size: { max: 0 },
extensions: []
}
},
banner: {
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,
algorithms: {
enabled: [ 'best', 'hot', 'most-viewed', 'most-liked' ],
default: 'most-viewed'
}
}
},
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
}
},
homepage: {
enabled: false
}
}
constructor ( constructor (
private http: HttpClient, private http: HttpClient,
@Inject(LOCALE_ID) private localeId: string @Inject(LOCALE_ID) private localeId: string
) { ) {
this.loadConfigLocally() }
loadConfig () {
try {
return this.loadConfigLocally()
} catch (err) {
// Expected in dev mode since we can't inject the config in the HTML
if (environment.production !== false) {
console.error('Cannot load config locally. Fallback to API.')
}
return this.getConfig()
}
} }
getServerVersionAndCommit () { getServerVersionAndCommit () {
...@@ -343,13 +206,10 @@ export class ServerService { ...@@ -343,13 +206,10 @@ export class ServerService {
private loadConfigLocally () { private loadConfigLocally () {
const configString = window['PeerTubeServerConfig'] const configString = window['PeerTubeServerConfig']
if (!configString) return if (!configString) {
throw new Error('Could not find PeerTubeServerConfig in HTML')
try {
const parsed = JSON.parse(configString)
Object.assign(this.config, parsed)
} catch (err) {
console.error('Cannot parse config saved in from index.html.', err)
} }
this.config = JSON.parse(configString)
} }
} }
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment