]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/+videos/+video-edit/video-update.resolver.ts
Merge branch 'release/4.2.0' into develop
[github/Chocobozzz/PeerTube.git] / client / src / app / +videos / +video-edit / video-update.resolver.ts
index 30bcf4d74535ca0dd520d7eac3c83d26b2125cc5..524ceae109ff30e52ca614056054c81d7a0a5483 100644 (file)
@@ -1,44 +1,52 @@
-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 { listUserChannelsForSelect } 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
   ) {
   }
 
   resolve (route: ActivatedRouteSnapshot) {
-    const uuid: string = route.params[ 'uuid' ]
+    const uuid: string = route.params['uuid']
 
     return this.videoService.getVideo({ videoId: uuid })
                .pipe(
-                 switchMap(video => {
-                   return forkJoin([
-                     this.videoService
-                         .loadCompleteDescription(video.descriptionPath)
-                         .pipe(map(description => Object.assign(video, { description }))),
-
-                     this.videoChannelService
-                         .listAccountVideoChannels(video.account)
-                         .pipe(
-                           map(result => result.data),
-                           map(videoChannels => videoChannels.map(c => ({ id: c.id, label: c.displayName, support: c.support })))
-                         ),
-
-                     this.videoCaptionService
-                         .listCaptions(video.id)
-                         .pipe(
-                           map(result => result.data)
-                         )
-                   ])
-                 }),
-                 map(([ video, videoChannels, videoCaptions ]) => ({ video, videoChannels, videoCaptions }))
+                 switchMap(video => forkJoin(this.buildVideoObservables(video))),
+                 map(([ video, videoSource, videoChannels, videoCaptions, liveVideo ]) =>
+                   ({ video, videoChannels, videoCaptions, videoSource, liveVideo }))
                )
   }
+
+  private buildVideoObservables (video: VideoDetails) {
+    return [
+      this.videoService
+        .loadCompleteDescription(video.descriptionPath)
+        .pipe(map(description => Object.assign(video, { description }))),
+
+      this.videoService.getSource(video.id),
+
+      listUserChannelsForSelect(this.authService),
+
+      this.videoCaptionService
+        .listCaptions(video.uuid)
+        .pipe(
+          map(result => result.data)
+        ),
+
+      video.isLive
+        ? this.liveVideoService.getVideoLive(video.id)
+        : of(undefined)
+    ]
+  }
 }