30bcf4d74535ca0dd520d7eac3c83d26b2125cc5
[oweals/peertube.git] / client / src / app / videos / +video-edit / video-update.resolver.ts
1 import { forkJoin } from 'rxjs'
2 import { map, switchMap } from 'rxjs/operators'
3 import { Injectable } from '@angular/core'
4 import { ActivatedRouteSnapshot, Resolve } from '@angular/router'
5 import { VideoCaptionService, VideoChannelService, VideoService } from '@app/shared/shared-main'
6
7 @Injectable()
8 export class VideoUpdateResolver implements Resolve<any> {
9   constructor (
10     private videoService: VideoService,
11     private videoChannelService: VideoChannelService,
12     private videoCaptionService: VideoCaptionService
13   ) {
14   }
15
16   resolve (route: ActivatedRouteSnapshot) {
17     const uuid: string = route.params[ 'uuid' ]
18
19     return this.videoService.getVideo({ videoId: uuid })
20                .pipe(
21                  switchMap(video => {
22                    return forkJoin([
23                      this.videoService
24                          .loadCompleteDescription(video.descriptionPath)
25                          .pipe(map(description => Object.assign(video, { description }))),
26
27                      this.videoChannelService
28                          .listAccountVideoChannels(video.account)
29                          .pipe(
30                            map(result => result.data),
31                            map(videoChannels => videoChannels.map(c => ({ id: c.id, label: c.displayName, support: c.support })))
32                          ),
33
34                      this.videoCaptionService
35                          .listCaptions(video.id)
36                          .pipe(
37                            map(result => result.data)
38                          )
39                    ])
40                  }),
41                  map(([ video, videoChannels, videoCaptions ]) => ({ video, videoChannels, videoCaptions }))
42                )
43   }
44 }