import { FormValidatorService } from '@app/shared/forms/form-validators/form-validator.service'
import { SelectItem } from 'primeng/api'
import { forkJoin } from 'rxjs'
-import { first } from 'rxjs/operators'
+import { ServerConfig } from '@shared/models'
@Component({
selector: 'my-edit-custom-config',
export class EditCustomConfigComponent extends FormReactive implements OnInit {
customConfig: CustomConfig
- resolutions: { id: string, label: string }[] = []
+ resolutions: { id: string, label: string, description?: string }[] = []
transcodingThreadOptions: { label: string, value: number }[] = []
languageItems: SelectItem[] = []
categoryItems: SelectItem[] = []
+ private serverConfig: ServerConfig
+
constructor (
protected formValidatorService: FormValidatorService,
private customConfigValidatorsService: CustomConfigValidatorsService,
super()
this.resolutions = [
+ {
+ id: '0p',
+ label: this.i18n('Audio-only'),
+ description: this.i18n('A <code>.mp4</code> that keeps the original audio track, with no video')
+ },
{
id: '240p',
label: this.i18n('240p')
}
get availableThemes () {
- return this.serverService.getConfig().theme.registered
+ return this.serverConfig.theme.registered
.map(t => t.name)
}
}
ngOnInit () {
+ this.serverConfig = this.serverService.getTmpConfig()
+ this.serverService.getConfig()
+ .subscribe(config => this.serverConfig = config)
+
const formGroupData: { [key in keyof CustomConfig ]: any } = {
instance: {
name: this.customConfigValidatorsService.INSTANCE_NAME,
}
this.buildForm(formGroupData)
-
- forkJoin([
- this.configService.getCustomConfig(),
- this.serverService.videoLanguagesLoaded.pipe(first()), // First so the observable completes
- this.serverService.videoCategoriesLoaded.pipe(first())
- ]).subscribe(
- ([ config ]) => {
- this.customConfig = config
-
- const languages = this.serverService.getVideoLanguages()
- this.languageItems = languages.map(l => ({ label: l.label, value: l.id }))
-
- const categories = this.serverService.getVideoCategories()
- this.categoryItems = categories.map(l => ({ label: l.label, value: l.id }))
-
- this.updateForm()
- // Force form validation
- this.forceCheck()
- },
-
- err => this.notifier.error(err.message)
- )
+ this.loadForm()
+ this.checkTranscodingFields()
}
isTranscodingEnabled () {
return this.form.value['signup']['enabled'] === true
}
+ isAutoFollowIndexEnabled () {
+ return this.form.value['followings']['instance']['autoFollowIndex']['enabled'] === true
+ }
+
async formValidated () {
- this.configService.updateCustomConfig(this.form.value)
+ this.configService.updateCustomConfig(this.form.getRawValue())
.subscribe(
res => {
this.customConfig = res
// Reload general configuration
- this.serverService.loadConfig()
+ this.serverService.resetConfig()
this.updateForm()
private updateForm () {
this.form.patchValue(this.customConfig)
}
+
+ private loadForm () {
+ forkJoin([
+ this.configService.getCustomConfig(),
+ this.serverService.getVideoLanguages(),
+ this.serverService.getVideoCategories()
+ ]).subscribe(
+ ([ config, languages, categories ]) => {
+ this.customConfig = config
+
+ this.languageItems = languages.map(l => ({ label: l.label, value: l.id }))
+ this.categoryItems = categories.map(l => ({ label: l.label, value: l.id }))
+
+ this.updateForm()
+ // Force form validation
+ this.forceCheck()
+ },
+
+ err => this.notifier.error(err.message)
+ )
+ }
+
+ private checkTranscodingFields () {
+ const hlsControl = this.form.get('transcoding.hls.enabled')
+ const webtorrentControl = this.form.get('transcoding.webtorrent.enabled')
+
+ webtorrentControl.valueChanges
+ .subscribe(newValue => {
+ if (newValue === false && !hlsControl.disabled) {
+ hlsControl.disable()
+ }
+
+ if (newValue === true && !hlsControl.enabled) {
+ hlsControl.enable()
+ }
+ })
+
+ hlsControl.valueChanges
+ .subscribe(newValue => {
+ if (newValue === false && !webtorrentControl.disabled) {
+ webtorrentControl.disable()
+ }
+
+ if (newValue === true && !webtorrentControl.enabled) {
+ webtorrentControl.enable()
+ }
+ })
+ }
}