aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/models/video/video.ts
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2018-06-14 18:06:56 +0200
committerChocobozzz <me@florianbigard.com>2018-06-14 18:06:56 +0200
commit2baea0c77cc765f7cbca9c9a2f4272268892a35c (patch)
tree47b1be5535439409a97eb80c0222c9c821b83dae /server/models/video/video.ts
parentbf079b7bfd7f0fb75ceb28e333bb4b74d8840dd4 (diff)
downloadPeerTube-2baea0c77cc765f7cbca9c9a2f4272268892a35c.tar.gz
PeerTube-2baea0c77cc765f7cbca9c9a2f4272268892a35c.tar.zst
PeerTube-2baea0c77cc765f7cbca9c9a2f4272268892a35c.zip
Add ability for uploaders to schedule video update
Diffstat (limited to 'server/models/video/video.ts')
-rw-r--r--server/models/video/video.ts37
1 files changed, 32 insertions, 5 deletions
diff --git a/server/models/video/video.ts b/server/models/video/video.ts
index 59c378efa..440f4d171 100644
--- a/server/models/video/video.ts
+++ b/server/models/video/video.ts
@@ -15,6 +15,7 @@ import {
15 Default, 15 Default,
16 ForeignKey, 16 ForeignKey,
17 HasMany, 17 HasMany,
18 HasOne,
18 IFindOptions, 19 IFindOptions,
19 Is, 20 Is,
20 IsInt, 21 IsInt,
@@ -47,7 +48,8 @@ import {
47 isVideoLanguageValid, 48 isVideoLanguageValid,
48 isVideoLicenceValid, 49 isVideoLicenceValid,
49 isVideoNameValid, 50 isVideoNameValid,
50 isVideoPrivacyValid, isVideoStateValid, 51 isVideoPrivacyValid,
52 isVideoStateValid,
51 isVideoSupportValid 53 isVideoSupportValid
52} from '../../helpers/custom-validators/videos' 54} from '../../helpers/custom-validators/videos'
53import { generateImageFromVideoFile, getVideoFileResolution, transcode } from '../../helpers/ffmpeg-utils' 55import { generateImageFromVideoFile, getVideoFileResolution, transcode } from '../../helpers/ffmpeg-utils'
@@ -66,7 +68,8 @@ import {
66 VIDEO_EXT_MIMETYPE, 68 VIDEO_EXT_MIMETYPE,
67 VIDEO_LANGUAGES, 69 VIDEO_LANGUAGES,
68 VIDEO_LICENCES, 70 VIDEO_LICENCES,
69 VIDEO_PRIVACIES, VIDEO_STATES 71 VIDEO_PRIVACIES,
72 VIDEO_STATES
70} from '../../initializers' 73} from '../../initializers'
71import { 74import {
72 getVideoCommentsActivityPubUrl, 75 getVideoCommentsActivityPubUrl,
@@ -88,8 +91,9 @@ import { VideoCommentModel } from './video-comment'
88import { VideoFileModel } from './video-file' 91import { VideoFileModel } from './video-file'
89import { VideoShareModel } from './video-share' 92import { VideoShareModel } from './video-share'
90import { VideoTagModel } from './video-tag' 93import { VideoTagModel } from './video-tag'
94import { ScheduleVideoUpdateModel } from './schedule-video-update'
91 95
92enum ScopeNames { 96export enum ScopeNames {
93 AVAILABLE_FOR_LIST = 'AVAILABLE_FOR_LIST', 97 AVAILABLE_FOR_LIST = 'AVAILABLE_FOR_LIST',
94 WITH_ACCOUNT_DETAILS = 'WITH_ACCOUNT_DETAILS', 98 WITH_ACCOUNT_DETAILS = 'WITH_ACCOUNT_DETAILS',
95 WITH_TAGS = 'WITH_TAGS', 99 WITH_TAGS = 'WITH_TAGS',
@@ -495,6 +499,15 @@ export class VideoModel extends Model<VideoModel> {
495 }) 499 })
496 VideoComments: VideoCommentModel[] 500 VideoComments: VideoCommentModel[]
497 501
502 @HasOne(() => ScheduleVideoUpdateModel, {
503 foreignKey: {
504 name: 'videoId',
505 allowNull: false
506 },
507 onDelete: 'cascade'
508 })
509 ScheduleVideoUpdate: ScheduleVideoUpdateModel
510
498 @BeforeDestroy 511 @BeforeDestroy
499 static async sendDelete (instance: VideoModel, options) { 512 static async sendDelete (instance: VideoModel, options) {
500 if (instance.isOwned()) { 513 if (instance.isOwned()) {
@@ -673,6 +686,10 @@ export class VideoModel extends Model<VideoModel> {
673 required: true 686 required: true
674 } 687 }
675 ] 688 ]
689 },
690 {
691 model: ScheduleVideoUpdateModel,
692 required: false
676 } 693 }
677 ] 694 ]
678 } 695 }
@@ -1006,7 +1023,8 @@ export class VideoModel extends Model<VideoModel> {
1006 toFormattedJSON (options?: { 1023 toFormattedJSON (options?: {
1007 additionalAttributes: { 1024 additionalAttributes: {
1008 state: boolean, 1025 state: boolean,
1009 waitTranscoding: boolean 1026 waitTranscoding: boolean,
1027 scheduledUpdate: boolean
1010 } 1028 }
1011 }): Video { 1029 }): Video {
1012 const formattedAccount = this.VideoChannel.Account.toFormattedJSON() 1030 const formattedAccount = this.VideoChannel.Account.toFormattedJSON()
@@ -1073,7 +1091,16 @@ export class VideoModel extends Model<VideoModel> {
1073 } 1091 }
1074 } 1092 }
1075 1093
1076 if (options.additionalAttributes.waitTranscoding) videoObject.waitTranscoding = this.waitTranscoding 1094 if (options.additionalAttributes.waitTranscoding) {
1095 videoObject.waitTranscoding = this.waitTranscoding
1096 }
1097
1098 if (options.additionalAttributes.scheduledUpdate && this.ScheduleVideoUpdate) {
1099 videoObject.scheduledUpdate = {
1100 updateAt: this.ScheduleVideoUpdate.updateAt,
1101 privacy: this.ScheduleVideoUpdate.privacy || undefined
1102 }
1103 }
1077 } 1104 }
1078 1105
1079 return videoObject 1106 return videoObject