2017-06-16 08:32:15 -04:00
|
|
|
import { Component, ElementRef, OnInit } from '@angular/core'
|
|
|
|
import { FormBuilder, FormGroup } from '@angular/forms'
|
|
|
|
import { Router } from '@angular/router'
|
2016-03-14 08:50:19 -04:00
|
|
|
|
2017-06-16 08:32:15 -04:00
|
|
|
import { FileUploader } from 'ng2-file-upload/ng2-file-upload'
|
|
|
|
import { NotificationsService } from 'angular2-notifications'
|
2016-05-23 03:50:26 -04:00
|
|
|
|
2017-06-16 08:32:15 -04:00
|
|
|
import { AuthService } from '../../core'
|
2017-03-22 16:15:55 -04:00
|
|
|
import {
|
|
|
|
FormReactive,
|
|
|
|
VIDEO_NAME,
|
|
|
|
VIDEO_CATEGORY,
|
2017-03-27 15:11:37 -04:00
|
|
|
VIDEO_LICENCE,
|
2017-04-07 08:57:05 -04:00
|
|
|
VIDEO_LANGUAGE,
|
2017-03-22 16:15:55 -04:00
|
|
|
VIDEO_DESCRIPTION,
|
|
|
|
VIDEO_TAGS
|
2017-06-16 08:32:15 -04:00
|
|
|
} from '../../shared'
|
|
|
|
import { VideoService } from '../shared'
|
2017-07-10 13:43:21 -04:00
|
|
|
import { VideoCreate } from '../../../../../shared'
|
2016-04-14 16:07:46 -04:00
|
|
|
|
2016-03-14 08:50:19 -04:00
|
|
|
@Component({
|
|
|
|
selector: 'my-videos-add',
|
2017-04-10 15:15:28 -04:00
|
|
|
styleUrls: [ './video-edit.component.scss' ],
|
2016-09-19 16:49:31 -04:00
|
|
|
templateUrl: './video-add.component.html'
|
2016-03-14 08:50:19 -04:00
|
|
|
})
|
|
|
|
|
2016-09-09 16:16:51 -04:00
|
|
|
export class VideoAddComponent extends FormReactive implements OnInit {
|
2017-06-16 08:32:15 -04:00
|
|
|
tags: string[] = []
|
|
|
|
uploader: FileUploader
|
|
|
|
videoCategories = []
|
|
|
|
videoLicences = []
|
|
|
|
videoLanguages = []
|
2016-09-09 16:16:51 -04:00
|
|
|
|
2017-06-16 08:32:15 -04:00
|
|
|
tagValidators = VIDEO_TAGS.VALIDATORS
|
|
|
|
tagValidatorsMessages = VIDEO_TAGS.MESSAGES
|
2017-04-16 08:06:48 -04:00
|
|
|
|
2017-06-16 08:32:15 -04:00
|
|
|
error: string = null
|
|
|
|
form: FormGroup
|
2016-09-09 16:16:51 -04:00
|
|
|
formErrors = {
|
2016-06-07 16:34:02 -04:00
|
|
|
name: '',
|
2017-03-22 16:15:55 -04:00
|
|
|
category: '',
|
2017-03-27 15:11:37 -04:00
|
|
|
licence: '',
|
2017-04-07 08:57:05 -04:00
|
|
|
language: '',
|
2017-04-16 08:06:48 -04:00
|
|
|
description: ''
|
2017-06-16 08:32:15 -04:00
|
|
|
}
|
2016-09-09 16:16:51 -04:00
|
|
|
validationMessages = {
|
|
|
|
name: VIDEO_NAME.MESSAGES,
|
2017-03-22 16:15:55 -04:00
|
|
|
category: VIDEO_CATEGORY.MESSAGES,
|
2017-03-27 15:11:37 -04:00
|
|
|
licence: VIDEO_LICENCE.MESSAGES,
|
2017-04-07 08:57:05 -04:00
|
|
|
language: VIDEO_LANGUAGE.MESSAGES,
|
2017-04-16 08:06:48 -04:00
|
|
|
description: VIDEO_DESCRIPTION.MESSAGES
|
2017-06-16 08:32:15 -04:00
|
|
|
}
|
2016-03-14 08:50:19 -04:00
|
|
|
|
2016-11-27 12:10:26 -05:00
|
|
|
// Special error messages
|
2017-06-16 08:32:15 -04:00
|
|
|
fileError = ''
|
2016-11-27 12:10:26 -05:00
|
|
|
|
2017-06-16 08:32:15 -04:00
|
|
|
constructor (
|
2016-05-27 11:52:41 -04:00
|
|
|
private authService: AuthService,
|
2016-05-27 11:49:18 -04:00
|
|
|
private elementRef: ElementRef,
|
2016-09-09 16:16:51 -04:00
|
|
|
private formBuilder: FormBuilder,
|
2017-01-27 10:14:11 -05:00
|
|
|
private router: Router,
|
2017-03-22 16:15:55 -04:00
|
|
|
private notificationsService: NotificationsService,
|
|
|
|
private videoService: VideoService
|
2016-09-09 16:16:51 -04:00
|
|
|
) {
|
2017-06-16 08:32:15 -04:00
|
|
|
super()
|
2016-09-09 16:16:51 -04:00
|
|
|
}
|
2016-03-14 08:50:19 -04:00
|
|
|
|
2017-06-16 08:32:15 -04:00
|
|
|
get filename () {
|
2016-06-07 16:34:02 -04:00
|
|
|
if (this.uploader.queue.length === 0) {
|
2017-06-16 08:32:15 -04:00
|
|
|
return null
|
2016-06-07 16:34:02 -04:00
|
|
|
}
|
|
|
|
|
2017-06-16 08:32:15 -04:00
|
|
|
return this.uploader.queue[0].file.name
|
2016-06-07 16:34:02 -04:00
|
|
|
}
|
|
|
|
|
2017-06-16 08:32:15 -04:00
|
|
|
buildForm () {
|
2016-09-09 16:16:51 -04:00
|
|
|
this.form = this.formBuilder.group({
|
|
|
|
name: [ '', VIDEO_NAME.VALIDATORS ],
|
2017-04-04 15:37:03 -04:00
|
|
|
nsfw: [ false ],
|
2017-03-22 16:15:55 -04:00
|
|
|
category: [ '', VIDEO_CATEGORY.VALIDATORS ],
|
2017-03-27 15:11:37 -04:00
|
|
|
licence: [ '', VIDEO_LICENCE.VALIDATORS ],
|
2017-04-07 08:57:05 -04:00
|
|
|
language: [ '', VIDEO_LANGUAGE.VALIDATORS ],
|
2016-09-09 16:16:51 -04:00
|
|
|
description: [ '', VIDEO_DESCRIPTION.VALIDATORS ],
|
2017-04-16 08:06:48 -04:00
|
|
|
tags: [ '']
|
2017-06-16 08:32:15 -04:00
|
|
|
})
|
2016-09-09 16:16:51 -04:00
|
|
|
|
2017-06-16 08:32:15 -04:00
|
|
|
this.form.valueChanges.subscribe(data => this.onValueChanged(data))
|
2016-06-07 16:34:02 -04:00
|
|
|
}
|
|
|
|
|
2017-06-16 08:32:15 -04:00
|
|
|
ngOnInit () {
|
|
|
|
this.videoCategories = this.videoService.videoCategories
|
|
|
|
this.videoLicences = this.videoService.videoLicences
|
|
|
|
this.videoLanguages = this.videoService.videoLanguages
|
2017-03-22 16:15:55 -04:00
|
|
|
|
2016-06-07 16:34:02 -04:00
|
|
|
this.uploader = new FileUploader({
|
|
|
|
authToken: this.authService.getRequestHeaderValue(),
|
|
|
|
queueLimit: 1,
|
2017-06-11 09:19:43 -04:00
|
|
|
url: API_URL + '/api/v1/videos',
|
2016-06-07 16:34:02 -04:00
|
|
|
removeAfterUpload: true
|
2017-06-16 08:32:15 -04:00
|
|
|
})
|
2016-06-07 16:34:02 -04:00
|
|
|
|
2017-07-10 13:43:21 -04:00
|
|
|
this.uploader.onBuildItemForm = (item, form: FormData) => {
|
|
|
|
const formValue: VideoCreate = this.form.value
|
|
|
|
|
|
|
|
const name = formValue.name
|
|
|
|
const nsfw = formValue.nsfw
|
|
|
|
const category = formValue.category
|
|
|
|
const licence = formValue.licence
|
|
|
|
const language = formValue.language
|
|
|
|
const description = formValue.description
|
|
|
|
const tags = formValue.tags
|
2017-06-16 08:32:15 -04:00
|
|
|
|
|
|
|
form.append('name', name)
|
2017-07-10 13:43:21 -04:00
|
|
|
form.append('category', '' + category)
|
|
|
|
form.append('nsfw', '' + nsfw)
|
|
|
|
form.append('licence', '' + licence)
|
2017-04-07 08:57:05 -04:00
|
|
|
|
|
|
|
// Language is optional
|
|
|
|
if (language) {
|
2017-07-10 13:43:21 -04:00
|
|
|
form.append('language', '' + language)
|
2017-04-07 08:57:05 -04:00
|
|
|
}
|
|
|
|
|
2017-06-16 08:32:15 -04:00
|
|
|
form.append('description', description)
|
2016-06-07 16:34:02 -04:00
|
|
|
|
2017-04-16 08:06:48 -04:00
|
|
|
for (let i = 0; i < tags.length; i++) {
|
2017-06-16 08:32:15 -04:00
|
|
|
form.append(`tags[${i}]`, tags[i])
|
2016-06-07 16:34:02 -04:00
|
|
|
}
|
2017-06-16 08:32:15 -04:00
|
|
|
}
|
2016-09-09 16:16:51 -04:00
|
|
|
|
2017-06-16 08:32:15 -04:00
|
|
|
this.buildForm()
|
2016-06-07 16:34:02 -04:00
|
|
|
}
|
|
|
|
|
2017-06-16 08:32:15 -04:00
|
|
|
checkForm () {
|
|
|
|
this.forceCheck()
|
2016-11-27 12:10:26 -05:00
|
|
|
|
|
|
|
if (this.filename === null) {
|
2017-06-16 08:32:15 -04:00
|
|
|
this.fileError = 'You did not add a file.'
|
2016-11-27 12:10:26 -05:00
|
|
|
}
|
|
|
|
|
2017-06-16 08:32:15 -04:00
|
|
|
return this.form.valid === true && this.fileError === ''
|
2016-11-27 12:10:26 -05:00
|
|
|
}
|
|
|
|
|
2017-06-16 08:32:15 -04:00
|
|
|
fileChanged () {
|
|
|
|
this.fileError = ''
|
2016-11-27 12:10:26 -05:00
|
|
|
}
|
|
|
|
|
2017-06-16 08:32:15 -04:00
|
|
|
removeFile () {
|
|
|
|
this.uploader.clearQueue()
|
2016-06-07 16:34:02 -04:00
|
|
|
}
|
|
|
|
|
2017-06-16 08:32:15 -04:00
|
|
|
upload () {
|
2016-11-27 12:10:26 -05:00
|
|
|
if (this.checkForm() === false) {
|
2017-06-16 08:32:15 -04:00
|
|
|
return
|
2016-11-27 12:10:26 -05:00
|
|
|
}
|
|
|
|
|
2017-06-16 08:32:15 -04:00
|
|
|
const item = this.uploader.queue[0]
|
2016-06-07 16:34:02 -04:00
|
|
|
// TODO: wait for https://github.com/valor-software/ng2-file-upload/pull/242
|
2017-06-16 08:32:15 -04:00
|
|
|
item.alias = 'videofile'
|
2016-10-07 08:52:18 -04:00
|
|
|
|
2016-06-07 16:34:02 -04:00
|
|
|
item.onSuccess = () => {
|
2017-06-16 08:32:15 -04:00
|
|
|
console.log('Video uploaded.')
|
|
|
|
this.notificationsService.success('Success', 'Video uploaded.')
|
2016-06-07 16:34:02 -04:00
|
|
|
|
|
|
|
// Print all the videos once it's finished
|
2017-06-16 08:32:15 -04:00
|
|
|
this.router.navigate(['/videos/list'])
|
|
|
|
}
|
2016-06-07 16:34:02 -04:00
|
|
|
|
|
|
|
item.onError = (response: string, status: number) => {
|
2016-07-20 10:24:18 -04:00
|
|
|
// We need to handle manually these cases beceause we use the FileUpload component
|
|
|
|
if (status === 400) {
|
2017-06-16 08:32:15 -04:00
|
|
|
this.error = response
|
2016-07-20 10:24:18 -04:00
|
|
|
} else if (status === 401) {
|
2017-06-16 08:32:15 -04:00
|
|
|
this.error = 'Access token was expired, refreshing token...'
|
2016-07-20 10:24:18 -04:00
|
|
|
this.authService.refreshAccessToken().subscribe(
|
|
|
|
() => {
|
|
|
|
// Update the uploader request header
|
2017-06-16 08:32:15 -04:00
|
|
|
this.uploader.authToken = this.authService.getRequestHeaderValue()
|
|
|
|
this.error += ' access token refreshed. Please retry your request.'
|
2016-07-20 10:24:18 -04:00
|
|
|
}
|
2017-06-16 08:32:15 -04:00
|
|
|
)
|
2016-07-20 10:24:18 -04:00
|
|
|
} else {
|
2017-06-16 08:32:15 -04:00
|
|
|
this.error = 'Unknow error'
|
|
|
|
console.error(this.error)
|
2016-07-20 10:24:18 -04:00
|
|
|
}
|
2017-06-16 08:32:15 -04:00
|
|
|
}
|
2016-06-07 16:34:02 -04:00
|
|
|
|
2017-06-16 08:32:15 -04:00
|
|
|
this.uploader.uploadAll()
|
2016-03-14 08:50:19 -04:00
|
|
|
}
|
|
|
|
}
|