
this enables the `noImplicitAny` flag in the Typescript compiler > When the noImplicitAny flag is true and the TypeScript compiler cannot infer the type, it still generates the JavaScript files, but it also reports an error. Many seasoned developers prefer this stricter setting because type checking catches more unintentional errors at compile time. closes: #1131 replaces #1137
100 lines
2.9 KiB
TypeScript
100 lines
2.9 KiB
TypeScript
import { VideoPrivacy } from '../../../../../shared/models/videos/video-privacy.enum'
|
|
import { VideoUpdate } from '../../../../../shared/models/videos'
|
|
import { VideoScheduleUpdate } from '../../../../../shared/models/videos/video-schedule-update.model'
|
|
import { Video } from '../../../../../shared/models/videos/video.model'
|
|
|
|
export class VideoEdit implements VideoUpdate {
|
|
static readonly SPECIAL_SCHEDULED_PRIVACY = -1
|
|
|
|
category: number
|
|
licence: number
|
|
language: string
|
|
description: string
|
|
name: string
|
|
tags: string[]
|
|
nsfw: boolean
|
|
commentsEnabled: boolean
|
|
waitTranscoding: boolean
|
|
channelId: number
|
|
privacy: VideoPrivacy
|
|
support: string
|
|
thumbnailfile?: any
|
|
previewfile?: any
|
|
thumbnailUrl: string
|
|
previewUrl: string
|
|
uuid?: string
|
|
id?: number
|
|
scheduleUpdate?: VideoScheduleUpdate
|
|
[key: string]: any
|
|
|
|
constructor (video?: Video & { tags: string[], commentsEnabled: 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.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
|
|
}
|
|
}
|
|
|
|
patch (values: any) {
|
|
Object.keys(values).forEach((key) => {
|
|
this[ key ] = values[ key ]
|
|
})
|
|
|
|
// If schedule publication, the video is private and will be changed to public privacy
|
|
if (parseInt(values['privacy'], 10) === VideoEdit.SPECIAL_SCHEDULED_PRIVACY) {
|
|
const updateAt = (values['schedulePublicationAt'] as Date)
|
|
updateAt.setSeconds(0)
|
|
|
|
this.privacy = VideoPrivacy.PRIVATE
|
|
this.scheduleUpdate = {
|
|
updateAt: updateAt.toISOString(),
|
|
privacy: VideoPrivacy.PUBLIC
|
|
}
|
|
} else {
|
|
this.scheduleUpdate = null
|
|
}
|
|
}
|
|
|
|
toFormPatch () {
|
|
const json = {
|
|
category: this.category,
|
|
licence: this.licence,
|
|
language: this.language,
|
|
description: this.description,
|
|
support: this.support,
|
|
name: this.name,
|
|
tags: this.tags,
|
|
nsfw: this.nsfw,
|
|
commentsEnabled: this.commentsEnabled,
|
|
waitTranscoding: this.waitTranscoding,
|
|
channelId: this.channelId,
|
|
privacy: this.privacy
|
|
}
|
|
|
|
// Special case if we scheduled an update
|
|
if (this.scheduleUpdate) {
|
|
Object.assign(json, {
|
|
privacy: VideoEdit.SPECIAL_SCHEDULED_PRIVACY,
|
|
schedulePublicationAt: new Date(this.scheduleUpdate.updateAt.toString())
|
|
})
|
|
}
|
|
|
|
return json
|
|
}
|
|
}
|