-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
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
// 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()
}