X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2Fvideos%2F%2Bvideo-edit%2Fvideo-update.component.ts;h=de34555abc47a5f73c1582e4200993497bd6f8fb;hb=68e24d727969a73a13e3c29b4d3bcfe50c3c52be;hp=0e966cb509e6163eec76259b25f60d1a7c43ebdd;hpb=80958c78fdc733c02077a9d2200be0c3f5ee623e;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 0e966cb50..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,23 +1,17 @@ import { Component, OnInit } from '@angular/core' import { FormBuilder, FormGroup } from '@angular/forms' import { ActivatedRoute, Router } from '@angular/router' -import 'rxjs/add/observable/forkJoin' - +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, - VIDEO_PRIVACY -} from '../../shared' -import { VideoEdit, VideoService } from '../shared' -import { VideoPrivacy } from '../../../../../shared/models/videos/video-privacy.enum' +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', @@ -26,36 +20,14 @@ import { VideoPrivacy } from '../../../../../shared/models/videos/video-privacy. }) export class VideoUpdateComponent extends FormReactive implements OnInit { - tags: string[] = [] - videoCategories = [] - videoLicences = [] - videoLanguages = [] - videoPrivacies = [] video: VideoEdit - tagValidators = VIDEO_TAGS.VALIDATORS - tagValidatorsMessages = VIDEO_TAGS.MESSAGES - - error: string = null + isUpdatingVideo = false form: FormGroup - formErrors = { - name: '', - privacy: '', - category: '', - licence: '', - language: '', - description: '' - } - validationMessages = { - name: VIDEO_NAME.MESSAGES, - privacy: VIDEO_PRIVACY.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, @@ -63,36 +35,28 @@ 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 ], - privacy: [ '', VIDEO_PRIVACY.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.videoPrivacies = this.serverService.getVideoPrivacies() + this.serverService.videoPrivaciesLoaded + .subscribe(() => this.videoPrivacies = this.serverService.getVideoPrivacies()) - const uuid: string = this.route.snapshot.params['uuid'] + 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) .switchMap(video => { return this.videoService @@ -104,7 +68,7 @@ export class VideoUpdateComponent extends FormReactive implements OnInit { video => { this.video = new VideoEdit(video) - // We cannot set private a video that was not private anymore + // We cannot set private a video that was not private if (video.privacy !== VideoPrivacy.PRIVATE) { const newVideoPrivacies = [] for (const p of this.videoPrivacies) { @@ -119,7 +83,7 @@ export class VideoUpdateComponent extends FormReactive implements OnInit { err => { console.error(err) - this.error = 'Cannot fetch video.' + this.notificationsService.error('Error', err.message) } ) } @@ -137,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) } ) @@ -154,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 + }) + }) + } } }