import { of } from 'rxjs'
import { map, switchMap } from 'rxjs/operators'
+import { SelectChannelItem } from 'src/types/select-options-item.model'
import { Component, HostListener, OnInit } from '@angular/core'
import { ActivatedRoute, Router } from '@angular/router'
import { Notifier } from '@app/core'
-import { FormReactive, FormValidatorService, SelectChannelItem } from '@app/shared/shared-forms'
+import { FormReactive, FormValidatorService } from '@app/shared/shared-forms'
import { VideoCaptionEdit, VideoCaptionService, VideoDetails, VideoEdit, VideoService } from '@app/shared/shared-main'
import { LiveVideoService } from '@app/shared/shared-video-live'
import { LoadingBarService } from '@ngx-loading-bar/core'
})
export class VideoUpdateComponent extends FormReactive implements OnInit {
video: VideoEdit
+ videoDetails: VideoDetails
userVideoChannels: SelectChannelItem[] = []
videoCaptions: VideoCaptionEdit[] = []
liveVideo: LiveVideo
.pipe(map(data => data.videoData))
.subscribe(({ video, videoChannels, videoCaptions, liveVideo }) => {
this.video = new VideoEdit(video)
+ this.videoDetails = video
+
this.userVideoChannels = videoChannels
this.videoCaptions = videoCaptions
this.liveVideo = liveVideo
this.schedulePublicationPossible = this.video.privacy === VideoPrivacy.PRIVATE
- const videoFiles = (video as VideoDetails).getFiles()
- if (videoFiles.length > 1) { // Already transcoded
- this.waitTranscodingEnabled = false
- }
-
// FIXME: Angular does not detect the change inside this subscription, so use the patched setTimeout
setTimeout(() => {
hydrateFormFromVideo(this.form, this.video, true)
if (this.liveVideo) {
this.form.patchValue({
- saveReplay: this.liveVideo.saveReplay
+ saveReplay: this.liveVideo.saveReplay,
+ permanentLive: this.liveVideo.permanentLive
})
}
})
return this.form.valid
}
+ isWaitTranscodingEnabled () {
+ if (this.videoDetails.getFiles().length > 1) { // Already transcoded
+ return false
+ }
+
+ if (this.liveVideo && this.form.value['saveReplay'] !== true) {
+ return false
+ }
+
+ return true
+ }
+
update () {
if (this.checkForm() === false
|| this.isUpdatingVideo === true) {
this.video.patch(this.form.value)
- const liveVideoUpdate: LiveVideoUpdate = {
- saveReplay: this.form.value.saveReplay
- }
-
this.loadingBar.useRef().start()
this.isUpdatingVideo = true
switchMap(() => {
if (!this.liveVideo) return of(undefined)
+ const liveVideoUpdate: LiveVideoUpdate = {
+ saveReplay: !!this.form.value.saveReplay,
+ permanentLive: !!this.form.value.permanentLive
+ }
+
+ // Don't update live attributes if they did not change
+ const liveChanged = Object.keys(liveVideoUpdate)
+ .some(key => this.liveVideo[key] !== liveVideoUpdate[key])
+ if (!liveChanged) return of(undefined)
+
return this.liveVideoService.updateLive(this.video.id, liveVideoUpdate)
})
)
this.isUpdatingVideo = false
this.loadingBar.useRef().complete()
this.notifier.success($localize`Video updated.`)
- this.router.navigate([ '/videos/watch', this.video.uuid ])
+ this.router.navigate([ '/w', this.video.uuid ])
},
err => {