import { map, switchMap } from 'rxjs/operators'
-import { Component, EventEmitter, OnInit, Output } from '@angular/core'
+import { AfterViewInit, Component, EventEmitter, OnInit, Output } from '@angular/core'
import { Router } from '@angular/router'
-import { AuthService, CanComponentDeactivate, Notifier, ServerService } from '@app/core'
+import { AuthService, CanComponentDeactivate, HooksService, Notifier, ServerService } from '@app/core'
import { getAbsoluteAPIUrl, scrollToTop } from '@app/helpers'
import { FormValidatorService } from '@app/shared/shared-forms'
import { VideoCaptionService, VideoEdit, VideoImportService, VideoService } from '@app/shared/shared-main'
-import { VideoSend } from './video-send'
import { LoadingBarService } from '@ngx-loading-bar/core'
-import { I18n } from '@ngx-translate/i18n-polyfill'
-import { VideoPrivacy, VideoUpdate } from '@shared/models'
+import { VideoUpdate } from '@shared/models'
+import { hydrateFormFromVideo } from '../shared/video-edit-utils'
+import { VideoSend } from './video-send'
@Component({
selector: 'my-video-import-url',
'./video-send.scss'
]
})
-export class VideoImportUrlComponent extends VideoSend implements OnInit, CanComponentDeactivate {
+export class VideoImportUrlComponent extends VideoSend implements OnInit, AfterViewInit, CanComponentDeactivate {
@Output() firstStepDone = new EventEmitter<string>()
@Output() firstStepError = new EventEmitter<void>()
video: VideoEdit
error: string
- protected readonly DEFAULT_VIDEO_PRIVACY = VideoPrivacy.PUBLIC
-
constructor (
protected formValidatorService: FormValidatorService,
protected loadingBar: LoadingBarService,
protected videoCaptionService: VideoCaptionService,
private router: Router,
private videoImportService: VideoImportService,
- private i18n: I18n
+ private hooks: HooksService
) {
super()
}
super.ngOnInit()
}
+ ngAfterViewInit () {
+ this.hooks.runAction('action:video-url-import.init', 'video-edit')
+ }
+
canDeactivate () {
return { canDeactivate: true }
}
isTargetUrlValid () {
- return this.targetUrl && this.targetUrl.match(/https?:\/\//)
+ return this.targetUrl?.match(/https?:\/\//)
}
importVideo () {
this.isImportingVideo = true
const videoUpdate: VideoUpdate = {
- privacy: this.firstStepPrivacyId,
+ privacy: this.highestPrivacy,
waitTranscoding: false,
- commentsEnabled: true,
- downloadEnabled: true,
channelId: this.firstStepChannelId
}
)
})
)
- .subscribe(
- ({ video, videoCaptions }) => {
+ .subscribe({
+ next: ({ video, videoCaptions }) => {
this.loadingBar.useRef().complete()
this.firstStepDone.emit(video.name)
this.isImportingVideo = false
this.video = new VideoEdit(Object.assign(video, {
commentsEnabled: videoUpdate.commentsEnabled,
downloadEnabled: videoUpdate.downloadEnabled,
+ privacy: { id: this.firstStepPrivacyId },
support: null,
thumbnailUrl,
previewUrl
this.videoCaptions = videoCaptions
- this.hydrateFormFromVideo()
+ hydrateFormFromVideo(this.form, this.video, true)
},
- err => {
+ error: err => {
this.loadingBar.useRef().complete()
this.isImportingVideo = false
this.firstStepError.emit()
this.notifier.error(err.message)
}
- )
+ })
}
- updateSecondStep () {
- if (this.checkForm() === false) {
- return
- }
+ async updateSecondStep () {
+ if (!await this.isFormValid()) return
this.video.patch(this.form.value)
// Update the video
this.updateVideoAndCaptions(this.video)
- .subscribe(
- () => {
+ .subscribe({
+ next: () => {
this.isUpdatingVideo = false
- this.notifier.success(this.i18n('Video to import updated.'))
+ this.notifier.success($localize`Video to import updated.`)
- this.router.navigate([ '/my-account', 'video-imports' ])
+ this.router.navigate([ '/my-library', 'video-imports' ])
},
- err => {
+ error: err => {
this.error = err.message
scrollToTop()
console.error(err)
}
- )
-
- }
-
- private hydrateFormFromVideo () {
- this.form.patchValue(this.video.toFormPatch())
-
- 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
- })
})
- }
}
}