X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;ds=sidebyside;f=client%2Fsrc%2Fapp%2Fvideos%2F%2Bvideo-edit%2Fvideo-update.component.ts;h=de34555abc47a5f73c1582e4200993497bd6f8fb;hb=68e24d727969a73a13e3c29b4d3bcfe50c3c52be;hp=30390ac058ef23836a9a2f420e6c0bdaa407d383;hpb=c2962505115563ad1510e8116f3b362887cac71f;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/videos/+video-edit/video-update.component.ts b/client/src/app/videos/+video-edit/video-update.component.ts index 30390ac05..de34555ab 100644 --- a/client/src/app/videos/+video-edit/video-update.component.ts +++ b/client/src/app/videos/+video-edit/video-update.component.ts @@ -1,55 +1,33 @@ import { Component, OnInit } from '@angular/core' import { FormBuilder, FormGroup } from '@angular/forms' import { ActivatedRoute, Router } from '@angular/router' - +import { LoadingBarService } from '@ngx-loading-bar/core' import { NotificationsService } from 'angular2-notifications' - +import 'rxjs/add/observable/forkJoin' +import { VideoPrivacy } from '../../../../../shared/models/videos' import { ServerService } from '../../core' -import { - FormReactive, - VIDEO_NAME, - VIDEO_CATEGORY, - VIDEO_LICENCE, - VIDEO_LANGUAGE, - VIDEO_DESCRIPTION, - VIDEO_TAGS -} from '../../shared' -import { VideoEdit, VideoService } from '../shared' +import { AuthService } from '../../core/auth' +import { FormReactive } from '../../shared' +import { ValidatorMessage } from '../../shared/forms/form-validators/validator-message' +import { populateAsyncUserVideoChannels } from '../../shared/misc/utils' +import { VideoEdit } from '../../shared/video/video-edit.model' +import { VideoService } from '../../shared/video/video.service' @Component({ selector: 'my-videos-update', - styleUrls: [ './video-edit.component.scss' ], + styleUrls: [ './shared/video-edit.component.scss' ], templateUrl: './video-update.component.html' }) export class VideoUpdateComponent extends FormReactive implements OnInit { - tags: string[] = [] - videoCategories = [] - videoLicences = [] - videoLanguages = [] video: VideoEdit - tagValidators = VIDEO_TAGS.VALIDATORS - tagValidatorsMessages = VIDEO_TAGS.MESSAGES - - error: string = null + isUpdatingVideo = false form: FormGroup - formErrors = { - name: '', - category: '', - licence: '', - language: '', - description: '' - } - validationMessages = { - name: VIDEO_NAME.MESSAGES, - category: VIDEO_CATEGORY.MESSAGES, - licence: VIDEO_LICENCE.MESSAGES, - language: VIDEO_LANGUAGE.MESSAGES, - description: VIDEO_DESCRIPTION.MESSAGES - } - - fileError = '' + formErrors: { [ id: string ]: string } = {} + validationMessages: ValidatorMessage = {} + videoPrivacies = [] + userVideoChannels = [] constructor ( private formBuilder: FormBuilder, @@ -57,46 +35,57 @@ export class VideoUpdateComponent extends FormReactive implements OnInit { private router: Router, private notificationsService: NotificationsService, private serverService: ServerService, - private videoService: VideoService + private videoService: VideoService, + private authService: AuthService, + private loadingBar: LoadingBarService ) { super() } buildForm () { - this.form = this.formBuilder.group({ - name: [ '', VIDEO_NAME.VALIDATORS ], - nsfw: [ false ], - category: [ '', VIDEO_CATEGORY.VALIDATORS ], - licence: [ '', VIDEO_LICENCE.VALIDATORS ], - language: [ '', VIDEO_LANGUAGE.VALIDATORS ], - description: [ '', VIDEO_DESCRIPTION.VALIDATORS ], - tags: [ '' ] - }) - + this.form = this.formBuilder.group({}) this.form.valueChanges.subscribe(data => this.onValueChanged(data)) } ngOnInit () { this.buildForm() - this.videoCategories = this.serverService.getVideoCategories() - this.videoLicences = this.serverService.getVideoLicences() - this.videoLanguages = this.serverService.getVideoLanguages() + this.serverService.videoPrivaciesLoaded + .subscribe(() => this.videoPrivacies = this.serverService.getVideoPrivacies()) + + populateAsyncUserVideoChannels(this.authService, this.userVideoChannels) + .catch(err => console.error('Cannot populate async user video channels.', err)) const uuid: string = this.route.snapshot.params['uuid'] this.videoService.getVideo(uuid) - .subscribe( - video => { - this.video = new VideoEdit(video) - - this.hydrateFormFromVideo() - }, - - err => { - console.error(err) - this.error = 'Cannot fetch video.' - } - ) + .switchMap(video => { + return this.videoService + .loadCompleteDescription(video.descriptionPath) + .do(description => video.description = description) + .map(() => video) + }) + .subscribe( + video => { + this.video = new VideoEdit(video) + + // We cannot set private a video that was not private + if (video.privacy !== VideoPrivacy.PRIVATE) { + const newVideoPrivacies = [] + for (const p of this.videoPrivacies) { + if (p.id !== VideoPrivacy.PRIVATE) newVideoPrivacies.push(p) + } + + this.videoPrivacies = newVideoPrivacies + } + + this.hydrateFormFromVideo() + }, + + err => { + console.error(err) + this.notificationsService.error('Error', err.message) + } + ) } checkForm () { @@ -112,15 +101,20 @@ export class VideoUpdateComponent extends FormReactive implements OnInit { this.video.patch(this.form.value) + this.loadingBar.start() + this.isUpdatingVideo = true this.videoService.updateVideo(this.video) .subscribe( () => { + this.isUpdatingVideo = false + this.loadingBar.complete() this.notificationsService.success('Success', 'Video updated.') this.router.navigate([ '/videos/watch', this.video.uuid ]) }, err => { - this.error = 'Cannot update the video.' + this.isUpdatingVideo = false + this.notificationsService.error('Error', err.message) console.error(err) } ) @@ -129,5 +123,26 @@ export class VideoUpdateComponent extends FormReactive implements OnInit { private hydrateFormFromVideo () { this.form.patchValue(this.video.toJSON()) + + const objects = [ + { + url: 'thumbnailUrl', + name: 'thumbnailfile' + }, + { + url: 'previewUrl', + name: 'previewfile' + } + ] + + for (const obj of objects) { + fetch(this.video[obj.url]) + .then(response => response.blob()) + .then(data => { + this.form.patchValue({ + [ obj.name ]: data + }) + }) + } } }