From efa3fef23ecf4e1c5289f8715de184c272ea49f7 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 8 Oct 2021 15:34:07 +0200 Subject: [PATCH] Fix notification on create transcoding job --- server/lib/video-state.ts | 6 +++--- server/models/video/video.ts | 4 ++-- server/tests/cli/create-transcoding-job.ts | 16 +++++++++++++++- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/server/lib/video-state.ts b/server/lib/video-state.ts index 0613d94bf..9352a67d1 100644 --- a/server/lib/video-state.ts +++ b/server/lib/video-state.ts @@ -70,13 +70,13 @@ async function moveToPublishedState (video: MVideoFullLight, isNewVideo: boolean logger.info('Publishing video %s.', video.uuid, { tags: [ video.uuid ] }) const previousState = video.state - await video.setNewState(VideoState.PUBLISHED, transaction) + await video.setNewState(VideoState.PUBLISHED, isNewVideo, transaction) // If the video was not published, we consider it is a new one for other instances // Live videos are always federated, so it's not a new video await federateVideoIfNeeded(video, isNewVideo, transaction) - Notifier.Instance.notifyOnNewVideoIfNeeded(video) + if (isNewVideo) Notifier.Instance.notifyOnNewVideoIfNeeded(video) if (previousState === VideoState.TO_TRANSCODE) { Notifier.Instance.notifyOnVideoPublishedAfterTranscoding(video) @@ -90,7 +90,7 @@ async function moveToExternalStorageState (video: MVideoFullLight, isNewVideo: b // We want to wait all transcoding jobs before moving the video on an external storage if (pendingTranscode !== 0) return - await video.setNewState(VideoState.TO_MOVE_TO_EXTERNAL_STORAGE, transaction) + await video.setNewState(VideoState.TO_MOVE_TO_EXTERNAL_STORAGE, isNewVideo, transaction) logger.info('Creating external storage move job for video %s.', video.uuid, { tags: [ video.uuid ] }) diff --git a/server/models/video/video.ts b/server/models/video/video.ts index e0c4dd2db..d2daf18ee 100644 --- a/server/models/video/video.ts +++ b/server/models/video/video.ts @@ -1766,12 +1766,12 @@ export class VideoModel extends Model>> { this.privacy === VideoPrivacy.INTERNAL } - async setNewState (newState: VideoState, transaction: Transaction) { + async setNewState (newState: VideoState, isNewVideo: boolean, transaction: Transaction) { if (this.state === newState) throw new Error('Cannot use same state ' + newState) this.state = newState - if (this.state === VideoState.PUBLISHED) { + if (this.state === VideoState.PUBLISHED && isNewVideo) { this.publishedAt = new Date() } diff --git a/server/tests/cli/create-transcoding-job.ts b/server/tests/cli/create-transcoding-job.ts index 3fd624091..2b388ab0c 100644 --- a/server/tests/cli/create-transcoding-job.ts +++ b/server/tests/cli/create-transcoding-job.ts @@ -33,9 +33,10 @@ async function checkFilesInObjectStorage (files: VideoFile[], type: 'webtorrent' function runTests (objectStorage: boolean) { let servers: PeerTubeServer[] = [] const videosUUID: string[] = [] + const publishedAt: string[] = [] before(async function () { - this.timeout(60000) + this.timeout(120000) const config = objectStorage ? ObjectStorageCommand.getDefaultConfig() @@ -54,6 +55,11 @@ function runTests (objectStorage: boolean) { for (let i = 1; i <= 5; i++) { const { uuid, shortUUID } = await servers[0].videos.upload({ attributes: { name: 'video' + i } }) + await waitJobs(servers) + + const video = await servers[0].videos.get({ id: uuid }) + publishedAt.push(video.publishedAt as string) + if (i > 2) { videosUUID.push(uuid) } else { @@ -225,6 +231,14 @@ function runTests (objectStorage: boolean) { } }) + it('Should not have updated published at attributes', async function () { + for (const id of videosUUID) { + const video = await servers[0].videos.get({ id }) + + expect(publishedAt.some(p => video.publishedAt === p)).to.be.true + } + }) + after(async function () { await cleanupTests(servers) })