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)
// 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 ] })
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()
}
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()
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 {
}
})
+ 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)
})