Use a resolver when updating the video
This commit is contained in:
parent
ef4c78da4f
commit
308c427551
|
@ -38,10 +38,10 @@ export class MyAccountVideosComponent extends AbstractVideoList implements OnIni
|
|||
protected route: ActivatedRoute,
|
||||
protected authService: AuthService,
|
||||
protected notificationsService: NotificationsService,
|
||||
protected confirmService: ConfirmService,
|
||||
protected location: Location,
|
||||
protected screenService: ScreenService,
|
||||
protected i18n: I18n,
|
||||
private confirmService: ConfirmService,
|
||||
private videoService: VideoService,
|
||||
@Inject(LOCALE_ID) private localeId: string
|
||||
) {
|
||||
|
|
|
@ -5,12 +5,16 @@ import { MetaGuard } from '@ngx-meta/core'
|
|||
|
||||
import { LoginGuard } from '../../core'
|
||||
import { VideoUpdateComponent } from './video-update.component'
|
||||
import { VideoUpdateResolver } from '@app/videos/+video-edit/video-update.resolver'
|
||||
|
||||
const videoUpdateRoutes: Routes = [
|
||||
{
|
||||
path: '',
|
||||
component: VideoUpdateComponent,
|
||||
canActivate: [ MetaGuard, LoginGuard ]
|
||||
canActivate: [ MetaGuard, LoginGuard ],
|
||||
resolve: {
|
||||
videoData: VideoUpdateResolver
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
|
|
|
@ -49,55 +49,31 @@ export class VideoUpdateComponent extends FormReactive implements OnInit {
|
|||
this.buildForm({})
|
||||
|
||||
this.serverService.videoPrivaciesLoaded
|
||||
.subscribe(() => this.videoPrivacies = this.serverService.getVideoPrivacies())
|
||||
.subscribe(() => this.videoPrivacies = this.serverService.getVideoPrivacies())
|
||||
|
||||
const uuid: string = this.route.snapshot.params[ 'uuid' ]
|
||||
this.videoService.getVideo(uuid)
|
||||
.pipe(
|
||||
switchMap(video => {
|
||||
return this.videoService
|
||||
.loadCompleteDescription(video.descriptionPath)
|
||||
.pipe(map(description => Object.assign(video, { description })))
|
||||
}),
|
||||
switchMap(video => {
|
||||
return this.videoChannelService
|
||||
.listAccountVideoChannels(video.account)
|
||||
.pipe(
|
||||
map(result => result.data),
|
||||
map(videoChannels => videoChannels.map(c => ({ id: c.id, label: c.displayName, support: c.support }))),
|
||||
map(videoChannels => ({ video, videoChannels }))
|
||||
)
|
||||
}),
|
||||
switchMap(({ video, videoChannels }) => {
|
||||
return this.videoCaptionService
|
||||
.listCaptions(video.id)
|
||||
.pipe(
|
||||
map(result => result.data),
|
||||
map(videoCaptions => ({ video, videoChannels, videoCaptions }))
|
||||
)
|
||||
})
|
||||
)
|
||||
.subscribe(
|
||||
({ video, videoChannels, videoCaptions }) => {
|
||||
this.video = new VideoEdit(video)
|
||||
this.userVideoChannels = videoChannels
|
||||
this.videoCaptions = videoCaptions
|
||||
this.route.data
|
||||
.pipe(map(data => data.videoData))
|
||||
.subscribe(({ video, videoChannels, videoCaptions }) => {
|
||||
this.video = new VideoEdit(video)
|
||||
this.userVideoChannels = videoChannels
|
||||
this.videoCaptions = videoCaptions
|
||||
|
||||
// We cannot set private a video that was not private
|
||||
if (this.video.privacy !== VideoPrivacy.PRIVATE) {
|
||||
this.videoPrivacies = this.videoPrivacies.filter(p => p.id.toString() !== VideoPrivacy.PRIVATE.toString())
|
||||
} else { // We can schedule video publication only if it it is private
|
||||
this.schedulePublicationPossible = this.video.privacy === VideoPrivacy.PRIVATE
|
||||
}
|
||||
|
||||
this.hydrateFormFromVideo()
|
||||
},
|
||||
|
||||
err => {
|
||||
console.error(err)
|
||||
this.notificationsService.error(this.i18n('Error'), err.message)
|
||||
// We cannot set private a video that was not private
|
||||
if (this.video.privacy !== VideoPrivacy.PRIVATE) {
|
||||
this.videoPrivacies = this.videoPrivacies.filter(p => p.id.toString() !== VideoPrivacy.PRIVATE.toString())
|
||||
} else { // We can schedule video publication only if it it is private
|
||||
this.schedulePublicationPossible = this.video.privacy === VideoPrivacy.PRIVATE
|
||||
}
|
||||
)
|
||||
|
||||
// FIXME: Angular does not detec
|
||||
setTimeout(() => this.hydrateFormFromVideo())
|
||||
},
|
||||
|
||||
err => {
|
||||
console.error(err)
|
||||
this.notificationsService.error(this.i18n('Error'), err.message)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
checkForm () {
|
||||
|
|
|
@ -3,6 +3,7 @@ import { SharedModule } from '../../shared'
|
|||
import { VideoEditModule } from './shared/video-edit.module'
|
||||
import { VideoUpdateRoutingModule } from './video-update-routing.module'
|
||||
import { VideoUpdateComponent } from './video-update.component'
|
||||
import { VideoUpdateResolver } from '@app/videos/+video-edit/video-update.resolver'
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
|
@ -19,6 +20,8 @@ import { VideoUpdateComponent } from './video-update.component'
|
|||
VideoUpdateComponent
|
||||
],
|
||||
|
||||
providers: [ ]
|
||||
providers: [
|
||||
VideoUpdateResolver
|
||||
]
|
||||
})
|
||||
export class VideoUpdateModule { }
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
import { Injectable } from '@angular/core'
|
||||
import { VideoService } from '@app/shared/video/video.service'
|
||||
import { ActivatedRouteSnapshot, Resolve } from '@angular/router'
|
||||
import { map, switchMap } from 'rxjs/operators'
|
||||
import { VideoChannelService } from '@app/shared/video-channel/video-channel.service'
|
||||
import { VideoCaptionService } from '@app/shared/video-caption'
|
||||
|
||||
@Injectable()
|
||||
export class VideoUpdateResolver implements Resolve<any> {
|
||||
constructor (
|
||||
private videoService: VideoService,
|
||||
private videoChannelService: VideoChannelService,
|
||||
private videoCaptionService: VideoCaptionService
|
||||
) {}
|
||||
|
||||
resolve (route: ActivatedRouteSnapshot) {
|
||||
const uuid: string = route.params[ 'uuid' ]
|
||||
|
||||
return this.videoService.getVideo(uuid)
|
||||
.pipe(
|
||||
switchMap(video => {
|
||||
return this.videoService
|
||||
.loadCompleteDescription(video.descriptionPath)
|
||||
.pipe(map(description => Object.assign(video, { description })))
|
||||
}),
|
||||
switchMap(video => {
|
||||
return this.videoChannelService
|
||||
.listAccountVideoChannels(video.account)
|
||||
.pipe(
|
||||
map(result => result.data),
|
||||
map(videoChannels => videoChannels.map(c => ({ id: c.id, label: c.displayName, support: c.support }))),
|
||||
map(videoChannels => ({ video, videoChannels }))
|
||||
)
|
||||
}),
|
||||
switchMap(({ video, videoChannels }) => {
|
||||
return this.videoCaptionService
|
||||
.listCaptions(video.id)
|
||||
.pipe(
|
||||
map(result => result.data),
|
||||
map(videoCaptions => ({ video, videoChannels, videoCaptions }))
|
||||
)
|
||||
})
|
||||
)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue