diff options
-rw-r--r-- | server/lib/video-state.ts | 6 | ||||
-rw-r--r-- | server/models/video/video.ts | 4 | ||||
-rw-r--r-- | 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 | |||
70 | logger.info('Publishing video %s.', video.uuid, { tags: [ video.uuid ] }) | 70 | logger.info('Publishing video %s.', video.uuid, { tags: [ video.uuid ] }) |
71 | 71 | ||
72 | const previousState = video.state | 72 | const previousState = video.state |
73 | await video.setNewState(VideoState.PUBLISHED, transaction) | 73 | await video.setNewState(VideoState.PUBLISHED, isNewVideo, transaction) |
74 | 74 | ||
75 | // If the video was not published, we consider it is a new one for other instances | 75 | // If the video was not published, we consider it is a new one for other instances |
76 | // Live videos are always federated, so it's not a new video | 76 | // Live videos are always federated, so it's not a new video |
77 | await federateVideoIfNeeded(video, isNewVideo, transaction) | 77 | await federateVideoIfNeeded(video, isNewVideo, transaction) |
78 | 78 | ||
79 | Notifier.Instance.notifyOnNewVideoIfNeeded(video) | 79 | if (isNewVideo) Notifier.Instance.notifyOnNewVideoIfNeeded(video) |
80 | 80 | ||
81 | if (previousState === VideoState.TO_TRANSCODE) { | 81 | if (previousState === VideoState.TO_TRANSCODE) { |
82 | Notifier.Instance.notifyOnVideoPublishedAfterTranscoding(video) | 82 | Notifier.Instance.notifyOnVideoPublishedAfterTranscoding(video) |
@@ -90,7 +90,7 @@ async function moveToExternalStorageState (video: MVideoFullLight, isNewVideo: b | |||
90 | // We want to wait all transcoding jobs before moving the video on an external storage | 90 | // We want to wait all transcoding jobs before moving the video on an external storage |
91 | if (pendingTranscode !== 0) return | 91 | if (pendingTranscode !== 0) return |
92 | 92 | ||
93 | await video.setNewState(VideoState.TO_MOVE_TO_EXTERNAL_STORAGE, transaction) | 93 | await video.setNewState(VideoState.TO_MOVE_TO_EXTERNAL_STORAGE, isNewVideo, transaction) |
94 | 94 | ||
95 | logger.info('Creating external storage move job for video %s.', video.uuid, { tags: [ video.uuid ] }) | 95 | logger.info('Creating external storage move job for video %s.', video.uuid, { tags: [ video.uuid ] }) |
96 | 96 | ||
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<Partial<AttributesOnly<VideoModel>>> { | |||
1766 | this.privacy === VideoPrivacy.INTERNAL | 1766 | this.privacy === VideoPrivacy.INTERNAL |
1767 | } | 1767 | } |
1768 | 1768 | ||
1769 | async setNewState (newState: VideoState, transaction: Transaction) { | 1769 | async setNewState (newState: VideoState, isNewVideo: boolean, transaction: Transaction) { |
1770 | if (this.state === newState) throw new Error('Cannot use same state ' + newState) | 1770 | if (this.state === newState) throw new Error('Cannot use same state ' + newState) |
1771 | 1771 | ||
1772 | this.state = newState | 1772 | this.state = newState |
1773 | 1773 | ||
1774 | if (this.state === VideoState.PUBLISHED) { | 1774 | if (this.state === VideoState.PUBLISHED && isNewVideo) { |
1775 | this.publishedAt = new Date() | 1775 | this.publishedAt = new Date() |
1776 | } | 1776 | } |
1777 | 1777 | ||
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' | |||
33 | function runTests (objectStorage: boolean) { | 33 | function runTests (objectStorage: boolean) { |
34 | let servers: PeerTubeServer[] = [] | 34 | let servers: PeerTubeServer[] = [] |
35 | const videosUUID: string[] = [] | 35 | const videosUUID: string[] = [] |
36 | const publishedAt: string[] = [] | ||
36 | 37 | ||
37 | before(async function () { | 38 | before(async function () { |
38 | this.timeout(60000) | 39 | this.timeout(120000) |
39 | 40 | ||
40 | const config = objectStorage | 41 | const config = objectStorage |
41 | ? ObjectStorageCommand.getDefaultConfig() | 42 | ? ObjectStorageCommand.getDefaultConfig() |
@@ -54,6 +55,11 @@ function runTests (objectStorage: boolean) { | |||
54 | for (let i = 1; i <= 5; i++) { | 55 | for (let i = 1; i <= 5; i++) { |
55 | const { uuid, shortUUID } = await servers[0].videos.upload({ attributes: { name: 'video' + i } }) | 56 | const { uuid, shortUUID } = await servers[0].videos.upload({ attributes: { name: 'video' + i } }) |
56 | 57 | ||
58 | await waitJobs(servers) | ||
59 | |||
60 | const video = await servers[0].videos.get({ id: uuid }) | ||
61 | publishedAt.push(video.publishedAt as string) | ||
62 | |||
57 | if (i > 2) { | 63 | if (i > 2) { |
58 | videosUUID.push(uuid) | 64 | videosUUID.push(uuid) |
59 | } else { | 65 | } else { |
@@ -225,6 +231,14 @@ function runTests (objectStorage: boolean) { | |||
225 | } | 231 | } |
226 | }) | 232 | }) |
227 | 233 | ||
234 | it('Should not have updated published at attributes', async function () { | ||
235 | for (const id of videosUUID) { | ||
236 | const video = await servers[0].videos.get({ id }) | ||
237 | |||
238 | expect(publishedAt.some(p => video.publishedAt === p)).to.be.true | ||
239 | } | ||
240 | }) | ||
241 | |||
228 | after(async function () { | 242 | after(async function () { |
229 | await cleanupTests(servers) | 243 | await cleanupTests(servers) |
230 | }) | 244 | }) |