X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2F%2Bvideos%2F%2Bvideo-edit%2Fshared%2Fvideo-edit.component.ts;h=52801802bdd0f21d1e5730c0c3323249e024c5a9;hb=2989628b7913383b39ac34c7db8666a21f8e5037;hp=26d871e59307484b985916b4aac786bd703804c4;hpb=b5b687550d8ef8beafdf706e45d6556fb5f4c876;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/+videos/+video-edit/shared/video-edit.component.ts b/client/src/app/+videos/+video-edit/shared/video-edit.component.ts index 26d871e59..52801802b 100644 --- a/client/src/app/+videos/+video-edit/shared/video-edit.component.ts +++ b/client/src/app/+videos/+video-edit/shared/video-edit.component.ts @@ -1,7 +1,8 @@ import { forkJoin } from 'rxjs' import { map } from 'rxjs/operators' +import { SelectChannelItem } from 'src/types/select-options-item.model' import { Component, EventEmitter, Input, NgZone, OnDestroy, OnInit, Output, ViewChild } from '@angular/core' -import { FormArray, FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms' +import { FormArray, FormControl, FormGroup, Validators } from '@angular/forms' import { HooksService, PluginService, ServerService } from '@app/core' import { removeElementFromArray } from '@app/helpers' import { @@ -17,16 +18,27 @@ import { VIDEO_SUPPORT_VALIDATOR, VIDEO_TAGS_ARRAY_VALIDATOR } from '@app/shared/form-validators/video-validators' -import { FormReactiveValidationMessages, FormValidatorService, SelectChannelItem } from '@app/shared/shared-forms' +import { FormReactiveValidationMessages, FormValidatorService } from '@app/shared/shared-forms' import { InstanceService } from '@app/shared/shared-instance' import { VideoCaptionEdit, VideoEdit, VideoService } from '@app/shared/shared-main' -import { ServerConfig, VideoConstant, LiveVideo, VideoPrivacy } from '@shared/models' -import { RegisterClientFormFieldOptions, RegisterClientVideoFieldOptions } from '@shared/models/plugins/register-client-form-field.model' +import { + HTMLServerConfig, + LiveVideo, + RegisterClientFormFieldOptions, + RegisterClientVideoFieldOptions, + VideoConstant, + VideoDetails, + VideoPrivacy +} from '@shared/models' import { I18nPrimengCalendarService } from './i18n-primeng-calendar.service' import { VideoCaptionAddModalComponent } from './video-caption-add-modal.component' import { VideoEditType } from './video-edit.type' type VideoLanguages = VideoConstant & { group?: string } +type PluginField = { + commonOptions: RegisterClientFormFieldOptions + videoFormOptions: RegisterClientVideoFieldOptions +} @Component({ selector: 'my-video-edit', @@ -37,9 +49,14 @@ export class VideoEditComponent implements OnInit, OnDestroy { @Input() form: FormGroup @Input() formErrors: { [ id: string ]: string } = {} @Input() validationMessages: FormReactiveValidationMessages = {} + + @Input() videoToUpdate: VideoDetails + @Input() userVideoChannels: SelectChannelItem[] = [] @Input() schedulePublicationPossible = true + @Input() videoCaptions: (VideoCaptionEdit & { captionPath?: string })[] = [] + @Input() waitTranscodingEnabled = true @Input() type: VideoEditType @Input() liveVideo: LiveVideo @@ -56,9 +73,6 @@ export class VideoEditComponent implements OnInit, OnDestroy { videoLicences: VideoConstant[] = [] videoLanguages: VideoLanguages[] = [] - tagValidators: ValidatorFn[] - tagValidatorsMessages: { [ name: string ]: string } - pluginDataFormGroup: FormGroup schedulePublicationEnabled = false @@ -70,12 +84,9 @@ export class VideoEditComponent implements OnInit, OnDestroy { calendarTimezone: string calendarDateFormat: string - serverConfig: ServerConfig + serverConfig: HTMLServerConfig - pluginFields: { - commonOptions: RegisterClientFormFieldOptions - videoFormOptions: RegisterClientVideoFieldOptions - }[] = [] + pluginFields: PluginField[] = [] private schedulerInterval: any private firstPatchDone = false @@ -91,17 +102,10 @@ export class VideoEditComponent implements OnInit, OnDestroy { private ngZone: NgZone, private hooks: HooksService ) { - this.calendarLocale = this.i18nPrimengCalendarService.getCalendarLocale() this.calendarTimezone = this.i18nPrimengCalendarService.getTimezone() this.calendarDateFormat = this.i18nPrimengCalendarService.getDateFormat() } - get existingCaptions () { - return this.videoCaptions - .filter(c => c.action !== 'REMOVE') - .map(c => c.language.id) - } - updateForm () { const defaultValues: any = { nsfw: 'false', @@ -128,6 +132,7 @@ export class VideoEditComponent implements OnInit, OnDestroy { schedulePublicationAt: VIDEO_SCHEDULE_PUBLICATION_AT_VALIDATOR, originallyPublishedAt: VIDEO_ORIGINALLY_PUBLISHED_AT_VALIDATOR, liveStreamKey: null, + permanentLive: null, saveReplay: null } @@ -148,6 +153,7 @@ export class VideoEditComponent implements OnInit, OnDestroy { this.trackChannelChange() this.trackPrivacyChange() + this.trackLivePermanentFieldChange() } ngOnInit () { @@ -188,9 +194,8 @@ export class VideoEditComponent implements OnInit, OnDestroy { } }) - this.serverConfig = this.serverService.getTmpConfig() - this.serverService.getConfig() - .subscribe(config => this.serverConfig = config) + + this.serverConfig = this.serverService.getHTMLConfig() this.initialVideoCaptions = this.videoCaptions.map(c => c.language.id) @@ -205,6 +210,12 @@ export class VideoEditComponent implements OnInit, OnDestroy { if (this.schedulerInterval) clearInterval(this.schedulerInterval) } + getExistingCaptions () { + return this.videoCaptions + .filter(c => c.action !== 'REMOVE') + .map(c => c.language.id) + } + onCaptionAdded (caption: VideoCaptionEdit) { const existingCaption = this.videoCaptions.find(c => c.language.id === caption.language.id) @@ -244,6 +255,20 @@ export class VideoEditComponent implements OnInit, OnDestroy { return this.serverConfig.live.allowReplay } + isPermanentLiveEnabled () { + return this.form.value['permanentLive'] === true + } + + isPluginFieldHidden (pluginField: PluginField) { + if (typeof pluginField.commonOptions.hidden !== 'function') return false + + return pluginField.commonOptions.hidden({ + formValues: this.form.value, + videoToUpdate: this.videoToUpdate, + liveVideo: this.liveVideo + }) + } + private sortVideoCaptions () { this.videoCaptions.sort((v1, v2) => { if (v1.language.label < v2.language.label) return -1 @@ -352,6 +377,24 @@ export class VideoEditComponent implements OnInit, OnDestroy { ) } + private trackLivePermanentFieldChange () { + // We will update the "support" field depending on the channel + this.form.controls['permanentLive'] + .valueChanges + .subscribe( + permanentLive => { + const saveReplayControl = this.form.controls['saveReplay'] + + if (permanentLive === true) { + saveReplayControl.setValue(false) + saveReplayControl.disable() + } else { + saveReplayControl.enable() + } + } + ) + } + private updateSupportField (support: string) { return this.form.patchValue({ support: support || '' }) }