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 route: ActivatedRoute,
|
||||||
protected authService: AuthService,
|
protected authService: AuthService,
|
||||||
protected notificationsService: NotificationsService,
|
protected notificationsService: NotificationsService,
|
||||||
protected confirmService: ConfirmService,
|
|
||||||
protected location: Location,
|
protected location: Location,
|
||||||
protected screenService: ScreenService,
|
protected screenService: ScreenService,
|
||||||
protected i18n: I18n,
|
protected i18n: I18n,
|
||||||
|
private confirmService: ConfirmService,
|
||||||
private videoService: VideoService,
|
private videoService: VideoService,
|
||||||
@Inject(LOCALE_ID) private localeId: string
|
@Inject(LOCALE_ID) private localeId: string
|
||||||
) {
|
) {
|
||||||
|
|
|
@ -5,12 +5,16 @@ import { MetaGuard } from '@ngx-meta/core'
|
||||||
|
|
||||||
import { LoginGuard } from '../../core'
|
import { LoginGuard } from '../../core'
|
||||||
import { VideoUpdateComponent } from './video-update.component'
|
import { VideoUpdateComponent } from './video-update.component'
|
||||||
|
import { VideoUpdateResolver } from '@app/videos/+video-edit/video-update.resolver'
|
||||||
|
|
||||||
const videoUpdateRoutes: Routes = [
|
const videoUpdateRoutes: Routes = [
|
||||||
{
|
{
|
||||||
path: '',
|
path: '',
|
||||||
component: VideoUpdateComponent,
|
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.buildForm({})
|
||||||
|
|
||||||
this.serverService.videoPrivaciesLoaded
|
this.serverService.videoPrivaciesLoaded
|
||||||
.subscribe(() => this.videoPrivacies = this.serverService.getVideoPrivacies())
|
.subscribe(() => this.videoPrivacies = this.serverService.getVideoPrivacies())
|
||||||
|
|
||||||
const uuid: string = this.route.snapshot.params[ 'uuid' ]
|
this.route.data
|
||||||
this.videoService.getVideo(uuid)
|
.pipe(map(data => data.videoData))
|
||||||
.pipe(
|
.subscribe(({ video, videoChannels, videoCaptions }) => {
|
||||||
switchMap(video => {
|
this.video = new VideoEdit(video)
|
||||||
return this.videoService
|
this.userVideoChannels = videoChannels
|
||||||
.loadCompleteDescription(video.descriptionPath)
|
this.videoCaptions = videoCaptions
|
||||||
.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
|
|
||||||
|
|
||||||
// We cannot set private a video that was not private
|
// We cannot set private a video that was not private
|
||||||
if (this.video.privacy !== VideoPrivacy.PRIVATE) {
|
if (this.video.privacy !== VideoPrivacy.PRIVATE) {
|
||||||
this.videoPrivacies = this.videoPrivacies.filter(p => p.id.toString() !== VideoPrivacy.PRIVATE.toString())
|
this.videoPrivacies = this.videoPrivacies.filter(p => p.id.toString() !== VideoPrivacy.PRIVATE.toString())
|
||||||
} else { // We can schedule video publication only if it it is private
|
} else { // We can schedule video publication only if it it is private
|
||||||
this.schedulePublicationPossible = this.video.privacy === VideoPrivacy.PRIVATE
|
this.schedulePublicationPossible = this.video.privacy === VideoPrivacy.PRIVATE
|
||||||
}
|
|
||||||
|
|
||||||
this.hydrateFormFromVideo()
|
|
||||||
},
|
|
||||||
|
|
||||||
err => {
|
|
||||||
console.error(err)
|
|
||||||
this.notificationsService.error(this.i18n('Error'), err.message)
|
|
||||||
}
|
}
|
||||||
)
|
|
||||||
|
// FIXME: Angular does not detec
|
||||||
|
setTimeout(() => this.hydrateFormFromVideo())
|
||||||
|
},
|
||||||
|
|
||||||
|
err => {
|
||||||
|
console.error(err)
|
||||||
|
this.notificationsService.error(this.i18n('Error'), err.message)
|
||||||
|
}
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
checkForm () {
|
checkForm () {
|
||||||
|
|
|
@ -3,6 +3,7 @@ import { SharedModule } from '../../shared'
|
||||||
import { VideoEditModule } from './shared/video-edit.module'
|
import { VideoEditModule } from './shared/video-edit.module'
|
||||||
import { VideoUpdateRoutingModule } from './video-update-routing.module'
|
import { VideoUpdateRoutingModule } from './video-update-routing.module'
|
||||||
import { VideoUpdateComponent } from './video-update.component'
|
import { VideoUpdateComponent } from './video-update.component'
|
||||||
|
import { VideoUpdateResolver } from '@app/videos/+video-edit/video-update.resolver'
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
|
@ -19,6 +20,8 @@ import { VideoUpdateComponent } from './video-update.component'
|
||||||
VideoUpdateComponent
|
VideoUpdateComponent
|
||||||
],
|
],
|
||||||
|
|
||||||
providers: [ ]
|
providers: [
|
||||||
|
VideoUpdateResolver
|
||||||
|
]
|
||||||
})
|
})
|
||||||
export class VideoUpdateModule { }
|
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