import { CustomConfig } from '../../../../../../shared/models/server/custom-config.model'
import { I18n } from '@ngx-translate/i18n-polyfill'
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'
@Component({
selector: 'my-edit-custom-config',
export class EditCustomConfigComponent extends FormReactive implements OnInit {
customConfig: CustomConfig
- resolutions: string[] = []
+ resolutions: { id: string, label: string }[] = []
transcodingThreadOptions: { label: string, value: number }[] = []
+ languageItems: SelectItem[] = []
+ categoryItems: SelectItem[] = []
+
constructor (
protected formValidatorService: FormValidatorService,
private customConfigValidatorsService: CustomConfigValidatorsService,
super()
this.resolutions = [
- this.i18n('240p'),
- this.i18n('360p'),
- this.i18n('480p'),
- this.i18n('720p'),
- this.i18n('1080p')
+ {
+ id: '0p',
+ label: this.i18n('Audio-only')
+ },
+ {
+ id: '240p',
+ label: this.i18n('240p')
+ },
+ {
+ id: '360p',
+ label: this.i18n('360p')
+ },
+ {
+ id: '480p',
+ label: this.i18n('480p')
+ },
+ {
+ id: '720p',
+ label: this.i18n('720p')
+ },
+ {
+ id: '1080p',
+ label: this.i18n('1080p')
+ },
+ {
+ id: '2160p',
+ label: this.i18n('2160p')
+ }
]
this.transcodingThreadOptions = [
return this.configService.videoQuotaDailyOptions
}
+ get availableThemes () {
+ return this.serverService.getConfig().theme.registered
+ .map(t => t.name)
+ }
+
getResolutionKey (resolution: string) {
return 'transcoding.resolutions.' + resolution
}
name: this.customConfigValidatorsService.INSTANCE_NAME,
shortDescription: this.customConfigValidatorsService.INSTANCE_SHORT_DESCRIPTION,
description: null,
- terms: null,
- defaultClientRoute: null,
+
isNSFW: false,
defaultNSFWPolicy: null,
+
+ terms: null,
+ codeOfConduct: null,
+
+ creationReason: null,
+ moderationInformation: null,
+ administrator: null,
+ maintenanceLifetime: null,
+ businessModel: null,
+
+ hardwareInformation: null,
+
+ categories: null,
+ languages: null,
+
+ defaultClientRoute: null,
+
customizations: {
javascript: null,
css: null
}
},
+ theme: {
+ default: null
+ },
services: {
twitter: {
username: this.customConfigValidatorsService.SERVICES_TWITTER_USERNAME,
threads: this.customConfigValidatorsService.TRANSCODING_THREADS,
allowAdditionalExtensions: null,
allowAudioFiles: null,
- resolutions: {}
+ resolutions: {},
+ hls: {
+ enabled: null
+ },
+ webtorrent: {
+ enabled: null
+ }
},
autoBlacklist: {
videos: {
enabled: null,
manualApproval: null
}
+ },
+ followings: {
+ instance: {
+ autoFollowBack: {
+ enabled: null
+ },
+ autoFollowIndex: {
+ enabled: null,
+ indexUrl: this.customConfigValidatorsService.INDEX_URL
+ }
+ }
}
}
}
}
for (const resolution of this.resolutions) {
- defaultValues.transcoding.resolutions[resolution] = 'false'
- formGroupData.transcoding.resolutions[resolution] = null
+ defaultValues.transcoding.resolutions[resolution.id] = 'false'
+ formGroupData.transcoding.resolutions[resolution.id] = null
}
this.buildForm(formGroupData)
- this.configService.getCustomConfig()
- .subscribe(
- res => {
- this.customConfig = res
+ forkJoin([
+ this.configService.getCustomConfig(),
+ this.serverService.videoLanguagesLoaded.pipe(first()), // First so the observable completes
+ this.serverService.videoCategoriesLoaded.pipe(first())
+ ]).subscribe(
+ ([ config ]) => {
+ this.customConfig = config
- this.updateForm()
- // Force form validation
- this.forceCheck()
- },
+ const languages = this.serverService.getVideoLanguages()
+ this.languageItems = languages.map(l => ({ label: l.label, value: l.id }))
- err => this.notifier.error(err.message)
- )
+ 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)
+ )
}
isTranscodingEnabled () {
)
}
+ getSelectedLanguageLabel () {
+ return this.i18n('{{\'{0} languages selected')
+ }
+
+ getDefaultLanguageLabel () {
+ return this.i18n('No language')
+ }
+
+ getSelectedCategoryLabel () {
+ return this.i18n('{{\'{0} categories selected')
+ }
+
+ getDefaultCategoryLabel () {
+ return this.i18n('No category')
+ }
+
private updateForm () {
this.form.patchValue(this.customConfig)
}
-
}