]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
First upload step is ok
authorChocobozzz <florian.bigard@gmail.com>
Thu, 7 Dec 2017 16:22:44 +0000 (17:22 +0100)
committerChocobozzz <florian.bigard@gmail.com>
Thu, 7 Dec 2017 16:22:44 +0000 (17:22 +0100)
client/src/app/core/server/server.service.ts
client/src/app/videos/+video-edit/video-add.component.html
client/src/app/videos/+video-edit/video-add.component.ts
server/initializers/constants.ts
server/initializers/migrations/0120-video-null.ts
shared/models/videos/video-create.model.ts

index cbc4074c9daf40c8908a36c739217db0a0abf2b5..43a836c5a5423f121927dfa6e9582f4e0e7622b3 100644 (file)
@@ -1,5 +1,7 @@
-import { Injectable } from '@angular/core'
 import { HttpClient } from '@angular/common/http'
+import { Injectable } from '@angular/core'
+import 'rxjs/add/operator/do'
+import { ReplaySubject } from 'rxjs/ReplaySubject'
 
 import { ServerConfig } from '../../../../../shared'
 
@@ -8,6 +10,11 @@ export class ServerService {
   private static BASE_CONFIG_URL = API_URL + '/api/v1/config/'
   private static BASE_VIDEO_URL = API_URL + '/api/v1/videos/'
 
+  videoPrivaciesLoaded = new ReplaySubject<boolean>(1)
+  videoCategoriesLoaded = new ReplaySubject<boolean>(1)
+  videoLicencesLoaded = new ReplaySubject<boolean>(1)
+  videoLanguagesLoaded = new ReplaySubject<boolean>(1)
+
   private config: ServerConfig = {
     signup: {
       allowed: false
@@ -29,19 +36,19 @@ export class ServerService {
   }
 
   loadVideoCategories () {
-    return this.loadVideoAttributeEnum('categories', this.videoCategories)
+    return this.loadVideoAttributeEnum('categories', this.videoCategories, this.videoCategoriesLoaded)
   }
 
   loadVideoLicences () {
-    return this.loadVideoAttributeEnum('licences', this.videoLicences)
+    return this.loadVideoAttributeEnum('licences', this.videoLicences, this.videoLicencesLoaded)
   }
 
   loadVideoLanguages () {
-    return this.loadVideoAttributeEnum('languages', this.videoLanguages)
+    return this.loadVideoAttributeEnum('languages', this.videoLanguages, this.videoLanguagesLoaded)
   }
 
   loadVideoPrivacies () {
-    return this.loadVideoAttributeEnum('privacies', this.videoPrivacies)
+    return this.loadVideoAttributeEnum('privacies', this.videoPrivacies, this.videoPrivaciesLoaded)
   }
 
   getConfig () {
@@ -66,17 +73,19 @@ export class ServerService {
 
   private loadVideoAttributeEnum (
     attributeName: 'categories' | 'licences' | 'languages' | 'privacies',
-    hashToPopulate: { id: number, label: string }[]
+    hashToPopulate: { id: number, label: string }[],
+    notifier: ReplaySubject<boolean>
   ) {
     return this.http.get(ServerService.BASE_VIDEO_URL + attributeName)
-               .subscribe(data => {
-                 Object.keys(data)
-                       .forEach(dataKey => {
-                         hashToPopulate.push({
-                           id: parseInt(dataKey, 10),
-                           label: data[dataKey]
-                         })
-                       })
+      .do(() => notifier.next(true))
+       .subscribe(data => {
+         Object.keys(data)
+               .forEach(dataKey => {
+                 hashToPopulate.push({
+                   id: parseInt(dataKey, 10),
+                   label: data[dataKey]
+                 })
                })
+       })
   }
 }
index f8355f3dba6aa04c15e30640e3f0588016c15ae8..78e5bb70e77c937298744eb9bbf67f3b10535130 100644 (file)
@@ -5,13 +5,13 @@
 
   <div *ngIf="error" class="alert alert-danger">{{ error }}</div>
 
-  <div class="upload-video-container">
+  <div *ngIf="!isUploadingVideo" class="upload-video-container">
     <div class="upload-video">
       <div class="icon icon-upload"></div>
 
       <div class="button-file">
         <span>Select the file to upload</span>
-        <input #videofileInput type="file" name="videofile" id="videofile" (change)="fileChange($event)" />
+        <input #videofileInput type="file" name="videofile" id="videofile" (change)="fileChange()" />
       </div>
 
       <div class="form-group">
         </select>
       </div>
     </div>
+  </div>
 
-
-    <form *ngIf="isUploadingVideo" novalidate [formGroup]="form">
-      <my-video-edit
-          [form]="form" [formErrors]="formErrors"
-          [validationMessages]="validationMessages" [videoPrivacies]="videoPrivacies"
-      ></my-video-edit>
-
-      <div class="submit-container">
-        <div class="submit-button" [ngClass]="{ disabled: !form.valid }">
-          <span class="icon icon-validate"></span>
-          <input type="button" value="Publish" (click)="upload()" />
-        </div>
+  <!-- Hidden because we need to load the component -->
+  <form [hidden]="!isUploadingVideo" novalidate [formGroup]="form">
+    <my-video-edit
+        [form]="form" [formErrors]="formErrors"
+        [validationMessages]="validationMessages" [videoPrivacies]="videoPrivacies"
+    ></my-video-edit>
+
+    <div class="submit-container">
+      <div class="submit-button" [ngClass]="{ disabled: !form.valid }">
+        <span class="icon icon-validate"></span>
+        <input type="button" value="Publish" (click)="upload()" />
       </div>
-    </form>
-  </div>
+    </div>
+  </form>
 </div>
index 071f9a28bf6991219a5ce52901bb12ee2fe4bb75..c2ee4ae2e41f8de8eb44069a3bc2f10ca301ab70 100644 (file)
@@ -23,12 +23,14 @@ export class VideoAddComponent extends FormReactive implements OnInit {
   @ViewChild('videofileInput') videofileInput
 
   isUploadingVideo = false
+  videoUploaded = false
   progressPercent = 0
 
   error: string = null
   form: FormGroup
   formErrors: { [ id: string ]: string } = {}
   validationMessages: ValidatorMessage = {}
+
   userVideoChannels = []
   videoPrivacies = []
   firstStepPrivacy = 0
@@ -53,8 +55,12 @@ export class VideoAddComponent extends FormReactive implements OnInit {
   ngOnInit () {
     this.buildForm()
 
-    this.videoPrivacies = this.serverService.getVideoPrivacies()
-    this.firstStepPrivacy = this.videoPrivacies[0].id
+    this.serverService.videoCategoriesLoaded
+      .subscribe(
+        () => {
+          this.videoPrivacies = this.serverService.getVideoPrivacies()
+          this.firstStepPrivacy = this.videoPrivacies[0].id
+        })
 
     this.authService.userInformationLoaded
       .subscribe(
@@ -71,8 +77,8 @@ export class VideoAddComponent extends FormReactive implements OnInit {
       )
   }
 
-  fileChange ($event) {
-    console.log('uploading file ?')
+  fileChange () {
+    this.uploadFirstStep()
   }
 
   checkForm () {
@@ -82,38 +88,26 @@ export class VideoAddComponent extends FormReactive implements OnInit {
   }
 
   uploadFirstStep () {
-    const formValue: VideoCreate = this.form.value
-
-    const name = formValue.name
-    const privacy = formValue.privacy
-    const nsfw = formValue.nsfw
-    const category = formValue.category
-    const licence = formValue.licence
-    const language = formValue.language
-    const channelId = formValue.channelId
-    const description = formValue.description
-    const tags = formValue.tags
     const videofile = this.videofileInput.nativeElement.files[0]
+    const name = videofile.name
+    const privacy = this.firstStepPrivacy.toString()
+    const nsfw = false
+    const channelId = this.firstStepChannel.toString()
 
     const formData = new FormData()
     formData.append('name', name)
     formData.append('privacy', privacy.toString())
-    formData.append('category', '' + category)
     formData.append('nsfw', '' + nsfw)
-    formData.append('licence', '' + licence)
     formData.append('channelId', '' + channelId)
     formData.append('videofile', videofile)
 
-    // Language is optional
-    if (language) {
-      formData.append('language', '' + language)
-    }
-
-    formData.append('description', description)
-
-    for (let i = 0; i < tags.length; i++) {
-      formData.append(`tags[${i}]`, tags[i])
-    }
+    this.isUploadingVideo = true
+    this.form.patchValue({
+      name,
+      privacy,
+      nsfw,
+      channelId
+    })
 
     this.videoService.uploadVideo(formData).subscribe(
       event => {
@@ -121,10 +115,8 @@ export class VideoAddComponent extends FormReactive implements OnInit {
           this.progressPercent = Math.round(100 * event.loaded / event.total)
         } else if (event instanceof HttpResponse) {
           console.log('Video uploaded.')
-          this.notificationsService.success('Success', 'Video uploaded.')
 
-          // Display all the videos once it's finished
-          this.router.navigate([ '/videos/trending' ])
+          this.videoUploaded = true
         }
       },
 
index 3e083fd920569df28df4be7abbc849e81e17e7da..7be7a5f953a25adca7a9dd35ecbf9bddc80dd368 100644 (file)
@@ -14,7 +14,7 @@ import { FollowState } from '../../shared/models/accounts/follow.model'
 
 // ---------------------------------------------------------------------------
 
-const LAST_MIGRATION_VERSION = 115
+const LAST_MIGRATION_VERSION = 120
 
 // ---------------------------------------------------------------------------
 
index 3506a50463f9cbce6217c73fda0e34ef9b35e801..9130d10ee13a88e681ec5fc61f35cfd01866d48b 100644 (file)
@@ -1,4 +1,5 @@
 import * as Sequelize from 'sequelize'
+import { CONSTRAINTS_FIELDS } from '../constants'
 import { PeerTubeDatabase } from '../database'
 
 async function up (utils: {
@@ -28,7 +29,7 @@ async function up (utils: {
 
   {
     const data = {
-      type: Sequelize.INTEGER,
+      type: Sequelize.STRING(CONSTRAINTS_FIELDS.VIDEOS.DESCRIPTION.max),
       allowNull: true,
       defaultValue: null
     }
index e537c38a878a5fe68083c852c0dece96b2dea894..8bc6a66390e327eec84e945072abca52c5a80463 100644 (file)
@@ -1,13 +1,13 @@
 import { VideoPrivacy } from './video-privacy.enum'
 
 export interface VideoCreate {
-  category: number
-  licence: number
-  language: number
-  description: string
+  category?: number
+  licence?: number
+  language?: number
+  description?: string
   channelId: number
   nsfw: boolean
   name: string
-  tags: string[]
+  tags?: string[]
   privacy: VideoPrivacy
 }