-import { forkJoin } from 'rxjs'
+import { forkJoin, of } from 'rxjs'
import { map, switchMap } from 'rxjs/operators'
import { Injectable } from '@angular/core'
import { ActivatedRouteSnapshot, Resolve } from '@angular/router'
-import { VideoCaptionService, VideoChannelService, VideoService } from '@app/shared/shared-main'
+import { AuthService } from '@app/core'
+import { listUserChannels } from '@app/helpers'
+import { VideoCaptionService, VideoDetails, VideoService } from '@app/shared/shared-main'
+import { LiveVideoService } from '@app/shared/shared-video-live'
@Injectable()
export class VideoUpdateResolver implements Resolve<any> {
constructor (
private videoService: VideoService,
- private videoChannelService: VideoChannelService,
+ private liveVideoService: LiveVideoService,
+ private authService: AuthService,
private videoCaptionService: VideoCaptionService
) {
}
return this.videoService.getVideo({ videoId: uuid })
.pipe(
- switchMap(video => {
- return forkJoin([
- this.videoService
- .loadCompleteDescription(video.descriptionPath)
- .pipe(map(description => Object.assign(video, { description }))),
+ switchMap(video => forkJoin(this.buildVideoObservables(video))),
+ map(([ video, videoChannels, videoCaptions, liveVideo ]) => ({ video, videoChannels, videoCaptions, liveVideo }))
+ )
+ }
- this.videoChannelService
- .listAccountVideoChannels(video.account)
- .pipe(
- map(result => result.data),
- map(videoChannels => videoChannels.map(c => ({ id: c.id, label: c.displayName, support: c.support })))
- ),
+ private buildVideoObservables (video: VideoDetails) {
+ return [
+ this.videoService
+ .loadCompleteDescription(video.descriptionPath)
+ .pipe(map(description => Object.assign(video, { description }))),
- this.videoCaptionService
- .listCaptions(video.id)
- .pipe(
- map(result => result.data)
- )
- ])
- }),
- map(([ video, videoChannels, videoCaptions ]) => ({ video, videoChannels, videoCaptions }))
- )
+ listUserChannels(this.authService),
+
+ this.videoCaptionService
+ .listCaptions(video.id)
+ .pipe(
+ map(result => result.data)
+ ),
+
+ video.isLive
+ ? this.liveVideoService.getVideoLive(video.id)
+ : of(undefined)
+ ]
}
}