X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2Fshared%2Fvideo%2Fvideo-edit.model.ts;h=5bb0510f91546be137f8fd4dbbe0c8012e3a85e0;hb=8ea1597fdbb2eb8ef71e805cf175e88ae05629c0;hp=c1a70d1b36ada555342c08df91957a370425410f;hpb=09700934b90e2ac7b1b9ed1694d9d4d52735e2e1;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/shared/video/video-edit.model.ts b/client/src/app/shared/video/video-edit.model.ts index c1a70d1b3..5bb0510f9 100644 --- a/client/src/app/shared/video/video-edit.model.ts +++ b/client/src/app/shared/video/video-edit.model.ts @@ -1,16 +1,22 @@ -import { VideoDetails } from './video-details.model' 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 -export class VideoEdit { category: number licence: number - language: number + language: string description: string name: string tags: string[] nsfw: boolean commentsEnabled: boolean - channel: number + downloadEnabled: boolean + waitTranscoding: boolean + channelId: number privacy: VideoPrivacy support: string thumbnailfile?: any @@ -19,35 +25,62 @@ export class VideoEdit { previewUrl: string uuid?: string id?: number + scheduleUpdate?: VideoScheduleUpdate + + 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 - constructor (videoDetails?: VideoDetails) { - if (videoDetails) { - this.id = videoDetails.id - this.uuid = videoDetails.uuid - this.category = videoDetails.category.id - this.licence = videoDetails.licence.id - this.language = videoDetails.language.id - this.description = videoDetails.description - this.name = videoDetails.name - this.tags = videoDetails.tags - this.nsfw = videoDetails.nsfw - this.commentsEnabled = videoDetails.commentsEnabled - this.channel = videoDetails.channel.id - this.privacy = videoDetails.privacy.id - this.support = videoDetails.support - this.thumbnailUrl = videoDetails.thumbnailUrl - this.previewUrl = videoDetails.previewUrl + this.scheduleUpdate = video.scheduledUpdate } } patch (values: Object) { Object.keys(values).forEach((key) => { - this[key] = values[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 + } } - toJSON () { - return { + toFormPatch () { + const json = { category: this.category, licence: this.licence, language: this.language, @@ -57,8 +90,20 @@ export class VideoEdit { tags: this.tags, nsfw: this.nsfw, commentsEnabled: this.commentsEnabled, - channelId: this.channel, + downloadEnabled: this.downloadEnabled, + 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 } }