]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/shared/shared-main/video/video-edit.model.ts
Bumped to version v5.2.1
[github/Chocobozzz/PeerTube.git] / client / src / app / shared / shared-main / video / video-edit.model.ts
index 757b686c01149d31326839cd11f73cfa3bc84769..47eee80d8930c855db8d95d72e9d5980da70a389 100644 (file)
@@ -1,4 +1,7 @@
-import { Video, VideoPrivacy, VideoScheduleUpdate, VideoUpdate } from '@shared/models'
+import { getAbsoluteAPIUrl } from '@app/helpers'
+import { VideoPrivacy, VideoScheduleUpdate, VideoUpdate } from '@shared/models'
+import { VideoDetails } from './video-details.model'
+import { objectKeysTyped } from '@shared/core-utils'
 
 export class VideoEdit implements VideoUpdate {
   static readonly SPECIAL_SCHEDULED_PRIVACY = -1
@@ -20,51 +23,52 @@ export class VideoEdit implements VideoUpdate {
   previewfile?: any
   thumbnailUrl: string
   previewUrl: string
-  uuid?: string
-  id?: number
   scheduleUpdate?: VideoScheduleUpdate
   originallyPublishedAt?: Date | string
 
+  id?: number
+  uuid?: string
+  shortUUID?: string
+
   pluginData?: any
 
-  constructor (
-    video?: Video & {
-      tags: string[],
-      commentsEnabled: boolean,
-      downloadEnabled: boolean,
-      support: string,
-      thumbnailUrl: string,
-      previewUrl: string
-    }) {
-    if (video) {
-      this.id = video.id
-      this.uuid = video.uuid
-      this.category = video.category.id
-      this.licence = video.licence.id
-      this.language = video.language.id
-      this.description = video.description
-      this.name = video.name
-      this.tags = video.tags
-      this.nsfw = video.nsfw
-      this.commentsEnabled = video.commentsEnabled
-      this.downloadEnabled = video.downloadEnabled
-      this.waitTranscoding = video.waitTranscoding
-      this.channelId = video.channel.id
-      this.privacy = video.privacy.id
-      this.support = video.support
-      this.thumbnailUrl = video.thumbnailUrl
-      this.previewUrl = video.previewUrl
-
-      this.scheduleUpdate = video.scheduledUpdate
-      this.originallyPublishedAt = video.originallyPublishedAt ? new Date(video.originallyPublishedAt) : null
-
-      this.pluginData = video.pluginData
-    }
+  constructor (video?: VideoDetails) {
+    if (!video) return
+
+    this.id = video.id
+    this.uuid = video.uuid
+    this.shortUUID = video.shortUUID
+    this.category = video.category.id
+    this.licence = video.licence.id
+    this.language = video.language.id
+    this.description = video.description
+    this.name = video.name
+    this.tags = video.tags
+    this.nsfw = video.nsfw
+    this.waitTranscoding = video.waitTranscoding
+    this.channelId = video.channel.id
+    this.privacy = video.privacy.id
+
+    this.support = video.support
+
+    this.commentsEnabled = video.commentsEnabled
+    this.downloadEnabled = video.downloadEnabled
+
+    if (video.thumbnailPath) this.thumbnailUrl = getAbsoluteAPIUrl() + video.thumbnailPath
+    if (video.previewPath) this.previewUrl = getAbsoluteAPIUrl() + video.previewPath
+
+    this.scheduleUpdate = video.scheduledUpdate
+    this.originallyPublishedAt = video.originallyPublishedAt
+      ? new Date(video.originallyPublishedAt)
+      : null
+
+    this.pluginData = video.pluginData
   }
 
   patch (values: { [ id: string ]: any }) {
-    Object.keys(values).forEach((key) => {
-      this[ key ] = values[ key ]
+    objectKeysTyped(values).forEach(key => {
+      // FIXME: typings
+      (this as any)[key] = values[key]
     })
 
     // If schedule publication, the video is private and will be changed to public privacy
@@ -83,7 +87,7 @@ export class VideoEdit implements VideoUpdate {
 
     // Convert originallyPublishedAt to string so that function objectToFormData() works correctly
     if (this.originallyPublishedAt) {
-      const originallyPublishedAt = new Date(values['originallyPublishedAt'])
+      const originallyPublishedAt = new Date(this.originallyPublishedAt)
       this.originallyPublishedAt = originallyPublishedAt.toISOString()
     }