]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/+videos/+video-edit/video-add-components/video-import-torrent.component.ts
Refactor form reactive
[github/Chocobozzz/PeerTube.git] / client / src / app / +videos / +video-edit / video-add-components / video-import-torrent.component.ts
index 2837b30c130e69c96d01e4d1113fcda65772333a..4a1408a4af30c1c60f29c80c04f8ede44a3f520a 100644 (file)
@@ -1,11 +1,13 @@
+import { switchMap } from 'rxjs'
 import { AfterViewInit, Component, ElementRef, EventEmitter, OnInit, Output, ViewChild } from '@angular/core'
 import { Router } from '@angular/router'
 import { AuthService, CanComponentDeactivate, HooksService, Notifier, ServerService } from '@app/core'
 import { scrollToTop } from '@app/helpers'
-import { FormValidatorService } from '@app/shared/shared-forms'
+import { FormReactiveService } from '@app/shared/shared-forms'
 import { VideoCaptionService, VideoEdit, VideoImportService, VideoService } from '@app/shared/shared-main'
 import { LoadingBarService } from '@ngx-loading-bar/core'
-import { PeerTubeProblemDocument, ServerErrorCode, VideoPrivacy, VideoUpdate } from '@shared/models'
+import { logger } from '@root-helpers/logger'
+import { PeerTubeProblemDocument, ServerErrorCode, VideoUpdate } from '@shared/models'
 import { hydrateFormFromVideo } from '../shared/video-edit-utils'
 import { VideoSend } from './video-send'
 
@@ -32,10 +34,8 @@ export class VideoImportTorrentComponent extends VideoSend implements OnInit, Af
   video: VideoEdit
   error: string
 
-  protected readonly DEFAULT_VIDEO_PRIVACY = VideoPrivacy.PUBLIC
-
   constructor (
-    protected formValidatorService: FormValidatorService,
+    protected formReactiveService: FormReactiveService,
     protected loadingBar: LoadingBarService,
     protected notifier: Notifier,
     protected authService: AuthService,
@@ -45,7 +45,7 @@ export class VideoImportTorrentComponent extends VideoSend implements OnInit, Af
     private router: Router,
     private videoImportService: VideoImportService,
     private hooks: HooksService
-    ) {
+  ) {
     super()
   }
 
@@ -81,55 +81,47 @@ export class VideoImportTorrentComponent extends VideoSend implements OnInit, Af
     this.isImportingVideo = true
 
     const videoUpdate: VideoUpdate = {
-      privacy: VideoPrivacy.PRIVATE,
+      privacy: this.highestPrivacy,
       waitTranscoding: false,
-      commentsEnabled: true,
-      downloadEnabled: true,
       channelId: this.firstStepChannelId
     }
 
     this.loadingBar.useRef().start()
 
-    this.videoImportService.importVideoTorrent(torrentfile || this.magnetUri, videoUpdate).subscribe(
-      res => {
-        this.loadingBar.useRef().complete()
-        this.firstStepDone.emit(res.video.name)
-        this.isImportingVideo = false
-        this.hasImportedVideo = true
-
-        this.video = new VideoEdit(Object.assign(res.video, {
-          commentsEnabled: videoUpdate.commentsEnabled,
-          downloadEnabled: videoUpdate.downloadEnabled,
-          privacy: { id: this.firstStepPrivacyId },
-          support: null,
-          thumbnailUrl: null,
-          previewUrl: null
-        }))
-
-        hydrateFormFromVideo(this.form, this.video, false)
-      },
-
-      err => {
-        this.loadingBar.useRef().complete()
-        this.isImportingVideo = false
-        this.firstStepError.emit()
-
-        let message = err.message
-
-        const error = err.body as PeerTubeProblemDocument
-        if (error?.code === ServerErrorCode.INCORRECT_FILES_IN_TORRENT) {
-          message = $localize`Torrents with only 1 file are supported.`
-        }
+    this.videoImportService.importVideoTorrent(torrentfile || this.magnetUri, videoUpdate)
+      .pipe(switchMap(({ video }) => this.videoService.getVideo({ videoId: video.uuid })))
+      .subscribe({
+        next: video => {
+          this.loadingBar.useRef().complete()
+          this.firstStepDone.emit(video.name)
+          this.isImportingVideo = false
+          this.hasImportedVideo = true
+
+          this.video = new VideoEdit(video)
+          this.video.patch({ privacy: this.firstStepPrivacyId })
+
+          hydrateFormFromVideo(this.form, this.video, false)
+        },
+
+        error: err => {
+          this.loadingBar.useRef().complete()
+          this.isImportingVideo = false
+          this.firstStepError.emit()
 
-        this.notifier.error(message)
-      }
-    )
+          let message = err.message
+
+          const error = err.body as PeerTubeProblemDocument
+          if (error?.code === ServerErrorCode.INCORRECT_FILES_IN_TORRENT) {
+            message = $localize`Torrents with only 1 file are supported.`
+          }
+
+          this.notifier.error(message)
+        }
+      })
   }
 
-  updateSecondStep () {
-    if (this.checkForm() === false) {
-      return
-    }
+  async updateSecondStep () {
+    if (!await this.isFormValid()) return
 
     this.video.patch(this.form.value)
 
@@ -137,19 +129,19 @@ export class VideoImportTorrentComponent extends VideoSend implements OnInit, Af
 
     // Update the video
     this.updateVideoAndCaptions(this.video)
-        .subscribe(
-          () => {
+        .subscribe({
+          next: () => {
             this.isUpdatingVideo = false
             this.notifier.success($localize`Video to import updated.`)
 
             this.router.navigate([ '/my-library', 'video-imports' ])
           },
 
-          err => {
+          error: err => {
             this.error = err.message
             scrollToTop()
-            console.error(err)
+            logger.error(err)
           }
-        )
+        })
   }
 }