diff --git a/client/src/app/shared/video/video-edit.model.ts b/client/src/app/shared/video/video-edit.model.ts index fc772a3cf..9078bb5d2 100644 --- a/client/src/app/shared/video/video-edit.model.ts +++ b/client/src/app/shared/video/video-edit.model.ts @@ -25,6 +25,7 @@ export class VideoEdit implements VideoUpdate { uuid?: string id?: number scheduleUpdate?: VideoScheduleUpdate + originallyPublishedAt?: Date | string constructor (video?: Video & { tags: string[], commentsEnabled: boolean, support: string, thumbnailUrl: string, previewUrl: string }) { if (video) { @@ -46,6 +47,7 @@ export class VideoEdit implements VideoUpdate { this.previewUrl = video.previewUrl this.scheduleUpdate = video.scheduledUpdate + this.originallyPublishedAt = new Date(video.originallyPublishedAt) } } @@ -67,6 +69,12 @@ export class VideoEdit implements VideoUpdate { } else { this.scheduleUpdate = null } + + // Convert originallyPublishedAt to string so that function objectToFormData() works correctly + if (this.originallyPublishedAt) { + const originallyPublishedAt = new Date(values['originallyPublishedAt']) + this.originallyPublishedAt = originallyPublishedAt.toISOString() + } } toFormPatch () { @@ -82,7 +90,8 @@ export class VideoEdit implements VideoUpdate { commentsEnabled: this.commentsEnabled, waitTranscoding: this.waitTranscoding, channelId: this.channelId, - privacy: this.privacy + privacy: this.privacy, + originallyPublishedAt: this.originallyPublishedAt } // Special case if we scheduled an update diff --git a/client/src/app/shared/video/video.model.ts b/client/src/app/shared/video/video.model.ts index b92c96450..c9b052951 100644 --- a/client/src/app/shared/video/video.model.ts +++ b/client/src/app/shared/video/video.model.ts @@ -17,6 +17,7 @@ export class Video implements VideoServerModel { createdAt: Date updatedAt: Date publishedAt: Date + originallyPublishedAt: Date | string category: VideoConstant licence: VideoConstant language: VideoConstant @@ -116,6 +117,9 @@ export class Video implements VideoServerModel { this.privacy.label = peertubeTranslate(this.privacy.label, translations) this.scheduledUpdate = hash.scheduledUpdate + this.originallyPublishedAt = hash.originallyPublishedAt ? + new Date(hash.originallyPublishedAt.toString()) + : null if (this.state) this.state.label = peertubeTranslate(this.state.label, translations) this.blacklisted = hash.blacklisted diff --git a/server/models/video/video-format-utils.ts b/server/models/video/video-format-utils.ts index de0747f22..7a9513cbe 100644 --- a/server/models/video/video-format-utils.ts +++ b/server/models/video/video-format-utils.ts @@ -60,6 +60,7 @@ function videoModelToFormattedJSON (video: VideoModel, options?: VideoFormatting createdAt: video.createdAt, updatedAt: video.updatedAt, publishedAt: video.publishedAt, + originallyPublishedAt: video.originallyPublishedAt, account: { id: formattedAccount.id, uuid: formattedAccount.uuid, @@ -264,6 +265,9 @@ function videoModelToActivityPubObject (video: VideoModel): VideoTorrentObject { state: video.state, commentsEnabled: video.commentsEnabled, published: video.publishedAt.toISOString(), + originallyPublishedAt: video.originallyPublishedAt ? + video.originallyPublishedAt.toISOString() : + null, updated: video.updatedAt.toISOString(), mediaType: 'text/markdown', content: video.getTruncatedDescription(), diff --git a/server/models/video/video.ts b/server/models/video/video.ts index 80a6c7832..806b6e046 100644 --- a/server/models/video/video.ts +++ b/server/models/video/video.ts @@ -102,6 +102,7 @@ const indexes: Sequelize.DefineIndexesOptions[] = [ { fields: [ 'createdAt' ] }, { fields: [ 'publishedAt' ] }, + { fields: [ 'originallyPublishedAt' ] }, { fields: [ 'duration' ] }, { fields: [ 'views' ] }, { fields: [ 'channelId' ] }, @@ -684,6 +685,9 @@ export class VideoModel extends Model { @Column publishedAt: Date + @Column + originallyPublishedAt: Date + @ForeignKey(() => VideoChannelModel) @Column channelId: number diff --git a/shared/models/activitypub/objects/video-torrent-object.ts b/shared/models/activitypub/objects/video-torrent-object.ts index 8504c178f..df07507b4 100644 --- a/shared/models/activitypub/objects/video-torrent-object.ts +++ b/shared/models/activitypub/objects/video-torrent-object.ts @@ -24,6 +24,7 @@ export interface VideoTorrentObject { waitTranscoding: boolean state: VideoState published: string + originallyPublishedAt: string updated: string mediaType: 'text/markdown' content: string diff --git a/shared/models/videos/video-create.model.ts b/shared/models/videos/video-create.model.ts index 190d63783..392bd1025 100644 --- a/shared/models/videos/video-create.model.ts +++ b/shared/models/videos/video-create.model.ts @@ -15,4 +15,5 @@ export interface VideoCreate { commentsEnabled?: boolean privacy: VideoPrivacy scheduleUpdate?: VideoScheduleUpdate + originallyPublishedAt: Date | string } diff --git a/shared/models/videos/video-update.model.ts b/shared/models/videos/video-update.model.ts index ed141a824..62e02e079 100644 --- a/shared/models/videos/video-update.model.ts +++ b/shared/models/videos/video-update.model.ts @@ -17,4 +17,5 @@ export interface VideoUpdate { thumbnailfile?: Blob previewfile?: Blob scheduleUpdate?: VideoScheduleUpdate + originallyPublishedAt?: Date | string } diff --git a/shared/models/videos/video.model.ts b/shared/models/videos/video.model.ts index 4a9fa58b1..2373ceb18 100644 --- a/shared/models/videos/video.model.ts +++ b/shared/models/videos/video.model.ts @@ -43,6 +43,7 @@ export interface Video { createdAt: Date | string updatedAt: Date | string publishedAt: Date | string + originallyPublishedAt: Date | string category: VideoConstant licence: VideoConstant language: VideoConstant