aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/models/video
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2018-06-15 16:52:15 +0200
committerChocobozzz <me@florianbigard.com>2018-06-15 18:20:56 +0200
commitbbe0f0645ca958d33a3f409b15166609733b663f (patch)
treeedcd5d702c73cda74a2177c4bdc08c616334337d /server/models/video
parent2baea0c77cc765f7cbca9c9a2f4272268892a35c (diff)
downloadPeerTube-bbe0f0645ca958d33a3f409b15166609733b663f.tar.gz
PeerTube-bbe0f0645ca958d33a3f409b15166609733b663f.tar.zst
PeerTube-bbe0f0645ca958d33a3f409b15166609733b663f.zip
Add ability to schedule video publication
Diffstat (limited to 'server/models/video')
-rw-r--r--server/models/video/schedule-video-update.ts23
-rw-r--r--server/models/video/video.ts33
2 files changed, 45 insertions, 11 deletions
diff --git a/server/models/video/schedule-video-update.ts b/server/models/video/schedule-video-update.ts
index d4e37beb5..3cf5f6c99 100644
--- a/server/models/video/schedule-video-update.ts
+++ b/server/models/video/schedule-video-update.ts
@@ -25,7 +25,7 @@ export class ScheduleVideoUpdateModel extends Model<ScheduleVideoUpdateModel> {
25 @AllowNull(true) 25 @AllowNull(true)
26 @Default(null) 26 @Default(null)
27 @Column 27 @Column
28 privacy: VideoPrivacy 28 privacy: VideoPrivacy.PUBLIC | VideoPrivacy.UNLISTED
29 29
30 @CreatedAt 30 @CreatedAt
31 createdAt: Date 31 createdAt: Date
@@ -45,6 +45,21 @@ export class ScheduleVideoUpdateModel extends Model<ScheduleVideoUpdateModel> {
45 }) 45 })
46 Video: VideoModel 46 Video: VideoModel
47 47
48 static areVideosToUpdate () {
49 const query = {
50 logging: false,
51 attributes: [ 'id' ],
52 where: {
53 updateAt: {
54 [Sequelize.Op.lte]: new Date()
55 }
56 }
57 }
58
59 return ScheduleVideoUpdateModel.findOne(query)
60 .then(res => !!res)
61 }
62
48 static listVideosToUpdate (t: Transaction) { 63 static listVideosToUpdate (t: Transaction) {
49 const query = { 64 const query = {
50 where: { 65 where: {
@@ -68,4 +83,10 @@ export class ScheduleVideoUpdateModel extends Model<ScheduleVideoUpdateModel> {
68 return ScheduleVideoUpdateModel.findAll(query) 83 return ScheduleVideoUpdateModel.findAll(query)
69 } 84 }
70 85
86 toFormattedJSON () {
87 return {
88 updateAt: this.updateAt,
89 privacy: this.privacy || undefined
90 }
91 }
71} 92}
diff --git a/server/models/video/video.ts b/server/models/video/video.ts
index 440f4d171..0041e4d38 100644
--- a/server/models/video/video.ts
+++ b/server/models/video/video.ts
@@ -97,7 +97,8 @@ export enum ScopeNames {
97 AVAILABLE_FOR_LIST = 'AVAILABLE_FOR_LIST', 97 AVAILABLE_FOR_LIST = 'AVAILABLE_FOR_LIST',
98 WITH_ACCOUNT_DETAILS = 'WITH_ACCOUNT_DETAILS', 98 WITH_ACCOUNT_DETAILS = 'WITH_ACCOUNT_DETAILS',
99 WITH_TAGS = 'WITH_TAGS', 99 WITH_TAGS = 'WITH_TAGS',
100 WITH_FILES = 'WITH_FILES' 100 WITH_FILES = 'WITH_FILES',
101 WITH_SCHEDULED_UPDATE = 'WITH_SCHEDULED_UPDATE'
101} 102}
102 103
103@Scopes({ 104@Scopes({
@@ -286,6 +287,14 @@ export enum ScopeNames {
286 required: true 287 required: true
287 } 288 }
288 ] 289 ]
290 },
291 [ScopeNames.WITH_SCHEDULED_UPDATE]: {
292 include: [
293 {
294 model: () => ScheduleVideoUpdateModel.unscoped(),
295 required: false
296 }
297 ]
289 } 298 }
290}) 299})
291@Table({ 300@Table({
@@ -843,7 +852,7 @@ export class VideoModel extends Model<VideoModel> {
843 } 852 }
844 853
845 return VideoModel 854 return VideoModel
846 .scope([ ScopeNames.WITH_TAGS, ScopeNames.WITH_FILES, ScopeNames.WITH_ACCOUNT_DETAILS ]) 855 .scope([ ScopeNames.WITH_TAGS, ScopeNames.WITH_FILES, ScopeNames.WITH_ACCOUNT_DETAILS, ScopeNames.WITH_SCHEDULED_UPDATE ])
847 .findById(id, options) 856 .findById(id, options)
848 } 857 }
849 858
@@ -869,7 +878,7 @@ export class VideoModel extends Model<VideoModel> {
869 } 878 }
870 879
871 return VideoModel 880 return VideoModel
872 .scope([ ScopeNames.WITH_TAGS, ScopeNames.WITH_FILES, ScopeNames.WITH_ACCOUNT_DETAILS ]) 881 .scope([ ScopeNames.WITH_TAGS, ScopeNames.WITH_FILES, ScopeNames.WITH_ACCOUNT_DETAILS, ScopeNames.WITH_SCHEDULED_UPDATE ])
873 .findOne(options) 882 .findOne(options)
874 } 883 }
875 884
@@ -1022,9 +1031,9 @@ export class VideoModel extends Model<VideoModel> {
1022 1031
1023 toFormattedJSON (options?: { 1032 toFormattedJSON (options?: {
1024 additionalAttributes: { 1033 additionalAttributes: {
1025 state: boolean, 1034 state?: boolean,
1026 waitTranscoding: boolean, 1035 waitTranscoding?: boolean,
1027 scheduledUpdate: boolean 1036 scheduledUpdate?: boolean
1028 } 1037 }
1029 }): Video { 1038 }): Video {
1030 const formattedAccount = this.VideoChannel.Account.toFormattedJSON() 1039 const formattedAccount = this.VideoChannel.Account.toFormattedJSON()
@@ -1084,18 +1093,18 @@ export class VideoModel extends Model<VideoModel> {
1084 } 1093 }
1085 1094
1086 if (options) { 1095 if (options) {
1087 if (options.additionalAttributes.state) { 1096 if (options.additionalAttributes.state === true) {
1088 videoObject.state = { 1097 videoObject.state = {
1089 id: this.state, 1098 id: this.state,
1090 label: VideoModel.getStateLabel(this.state) 1099 label: VideoModel.getStateLabel(this.state)
1091 } 1100 }
1092 } 1101 }
1093 1102
1094 if (options.additionalAttributes.waitTranscoding) { 1103 if (options.additionalAttributes.waitTranscoding === true) {
1095 videoObject.waitTranscoding = this.waitTranscoding 1104 videoObject.waitTranscoding = this.waitTranscoding
1096 } 1105 }
1097 1106
1098 if (options.additionalAttributes.scheduledUpdate && this.ScheduleVideoUpdate) { 1107 if (options.additionalAttributes.scheduledUpdate === true && this.ScheduleVideoUpdate) {
1099 videoObject.scheduledUpdate = { 1108 videoObject.scheduledUpdate = {
1100 updateAt: this.ScheduleVideoUpdate.updateAt, 1109 updateAt: this.ScheduleVideoUpdate.updateAt,
1101 privacy: this.ScheduleVideoUpdate.privacy || undefined 1110 privacy: this.ScheduleVideoUpdate.privacy || undefined
@@ -1107,7 +1116,11 @@ export class VideoModel extends Model<VideoModel> {
1107 } 1116 }
1108 1117
1109 toFormattedDetailsJSON (): VideoDetails { 1118 toFormattedDetailsJSON (): VideoDetails {
1110 const formattedJson = this.toFormattedJSON() 1119 const formattedJson = this.toFormattedJSON({
1120 additionalAttributes: {
1121 scheduledUpdate: true
1122 }
1123 })
1111 1124
1112 const detailsJson = { 1125 const detailsJson = {
1113 support: this.support, 1126 support: this.support,