diff --git a/packages/models/src/server/job.model.ts b/packages/models/src/server/job.model.ts index c70add69e..ac90231ef 100644 --- a/packages/models/src/server/job.model.ts +++ b/packages/models/src/server/job.model.ts @@ -269,7 +269,7 @@ export type NotifyPayload = export interface FederateVideoPayload { videoUUID: string - isNewVideo: boolean + isNewVideoForFederation: boolean } // --------------------------------------------------------------------------- diff --git a/server/core/controllers/api/videos/source.ts b/server/core/controllers/api/videos/source.ts index ccba63060..b4bfc3725 100644 --- a/server/core/controllers/api/videos/source.ts +++ b/server/core/controllers/api/videos/source.ts @@ -165,7 +165,7 @@ async function addVideoJobsAfterUpload (video: MVideoFullLight, videoFile: MVide type: 'federate-video' as 'federate-video', payload: { videoUUID: video.uuid, - isNewVideo: false + isNewVideoForFederation: false } } ] diff --git a/server/core/controllers/api/videos/update.ts b/server/core/controllers/api/videos/update.ts index 5adc5e8e5..2e168b029 100644 --- a/server/core/controllers/api/videos/update.ts +++ b/server/core/controllers/api/videos/update.ts @@ -64,7 +64,7 @@ async function updateVideo (req: express.Request, res: express.Response) { const videoFileLockReleaser = await VideoPathManager.Instance.lockFiles(videoFromReq.uuid) try { - const { videoInstanceUpdated, isNewVideo } = await sequelizeTypescript.transaction(async t => { + const { videoInstanceUpdated, isNewVideoForFederation } = await sequelizeTypescript.transaction(async t => { // Refresh video since thumbnails to prevent concurrent updates const video = await VideoModel.loadFull(videoFromReq.id, t) @@ -95,9 +95,15 @@ async function updateVideo (req: express.Request, res: express.Response) { } // Privacy update? - let isNewVideo = false + let isNewVideoForFederation = false + if (videoInfoToUpdate.privacy !== undefined) { - isNewVideo = await updateVideoPrivacy({ videoInstance: video, videoInfoToUpdate, hadPrivacyForFederation, transaction: t }) + isNewVideoForFederation = await updateVideoPrivacy({ + videoInstance: video, + videoInfoToUpdate, + hadPrivacyForFederation, + transaction: t + }) } // Force updatedAt attribute change @@ -154,7 +160,7 @@ async function updateVideo (req: express.Request, res: express.Response) { ) logger.info('Video with name %s and uuid %s updated.', video.name, video.uuid, lTags(video.uuid)) - return { videoInstanceUpdated, isNewVideo } + return { videoInstanceUpdated, isNewVideoForFederation } }) Hooks.runAction('action:api.video.updated', { video: videoInstanceUpdated, body: req.body, req, res }) @@ -163,7 +169,7 @@ async function updateVideo (req: express.Request, res: express.Response) { video: videoInstanceUpdated, nameChanged: !!videoInfoToUpdate.name, oldPrivacy, - isNewVideo + isNewVideoForFederation }) } catch (err) { // If the transaction is retried, sequelize will think the object has not changed @@ -180,6 +186,7 @@ async function updateVideo (req: express.Request, res: express.Response) { .end() } +// Return a boolean indicating if the video is considered as "new" for remote instances in the federation async function updateVideoPrivacy (options: { videoInstance: MVideoFullLight videoInfoToUpdate: VideoUpdate @@ -187,7 +194,7 @@ async function updateVideoPrivacy (options: { transaction: Transaction }) { const { videoInstance, videoInfoToUpdate, hadPrivacyForFederation, transaction } = options - const isNewVideo = videoInstance.isNewVideo(videoInfoToUpdate.privacy) + const isNewVideoForFederation = videoInstance.isNewVideoForFederation(videoInfoToUpdate.privacy) const newPrivacy = forceNumber(videoInfoToUpdate.privacy) as VideoPrivacyType setVideoPrivacy(videoInstance, newPrivacy) @@ -207,7 +214,7 @@ async function updateVideoPrivacy (options: { await VideoModel.sendDelete(videoInstance, { transaction }) } - return isNewVideo + return isNewVideoForFederation } function updateSchedule (videoInstance: MVideoFullLight, videoInfoToUpdate: VideoUpdate, transaction: Transaction) { diff --git a/server/core/controllers/api/videos/upload.ts b/server/core/controllers/api/videos/upload.ts index 195b0ef30..a1a0d5058 100644 --- a/server/core/controllers/api/videos/upload.ts +++ b/server/core/controllers/api/videos/upload.ts @@ -269,7 +269,7 @@ async function addVideoJobsAfterUpload (video: MVideoFullLight, videoFile: MVide type: 'federate-video' as 'federate-video', payload: { videoUUID: video.uuid, - isNewVideo: true + isNewVideoForFederation: true } } ] diff --git a/server/core/lib/job-queue/handlers/federate-video.ts b/server/core/lib/job-queue/handlers/federate-video.ts index 270ce6cc5..8972d92d4 100644 --- a/server/core/lib/job-queue/handlers/federate-video.ts +++ b/server/core/lib/job-queue/handlers/federate-video.ts @@ -16,7 +16,7 @@ function processFederateVideo (job: Job) { const video = await VideoModel.loadFull(payload.videoUUID, t) if (!video) return - return federateVideoIfNeeded(video, payload.isNewVideo, t) + return federateVideoIfNeeded(video, payload.isNewVideoForFederation, t) }) }) } diff --git a/server/core/lib/schedulers/update-videos-scheduler.ts b/server/core/lib/schedulers/update-videos-scheduler.ts index 2d4892013..6e3dcdcb6 100644 --- a/server/core/lib/schedulers/update-videos-scheduler.ts +++ b/server/core/lib/schedulers/update-videos-scheduler.ts @@ -58,7 +58,7 @@ export class UpdateVideosScheduler extends AbstractScheduler { logger.info('Executing scheduled video update on %s.', video.uuid) if (schedule.privacy) { - isNewVideo = video.isNewVideo(schedule.privacy) + isNewVideo = video.isNewVideoForFederation(schedule.privacy) oldPrivacy = video.privacy setVideoPrivacy(video, schedule.privacy) diff --git a/server/core/lib/video-studio.ts b/server/core/lib/video-studio.ts index a8cb19f0d..d248a0f23 100644 --- a/server/core/lib/video-studio.ts +++ b/server/core/lib/video-studio.ts @@ -118,7 +118,7 @@ export async function onVideoStudioEnded (options: { type: 'federate-video' as 'federate-video', payload: { videoUUID: video.uuid, - isNewVideo: false + isNewVideoForFederation: false } }, diff --git a/server/core/lib/video.ts b/server/core/lib/video.ts index b3742fccb..7e88fa991 100644 --- a/server/core/lib/video.ts +++ b/server/core/lib/video.ts @@ -137,12 +137,12 @@ export const getCachedVideoDuration = memoizee(getVideoDuration, { export async function addVideoJobsAfterUpdate (options: { video: MVideoFullLight - isNewVideo: boolean + isNewVideoForFederation: boolean nameChanged: boolean oldPrivacy: VideoPrivacyType }) { - const { video, nameChanged, oldPrivacy, isNewVideo } = options + const { video, nameChanged, oldPrivacy, isNewVideoForFederation } = options const jobs: CreateJobArgument[] = [] const filePathChanged = await moveFilesIfPrivacyChanged(video, oldPrivacy) @@ -167,7 +167,7 @@ export async function addVideoJobsAfterUpdate (options: { type: 'federate-video', payload: { videoUUID: video.uuid, - isNewVideo + isNewVideoForFederation } }) diff --git a/server/core/models/video/video.ts b/server/core/models/video/video.ts index 300667d4e..bc1a47ce1 100644 --- a/server/core/models/video/video.ts +++ b/server/core/models/video/video.ts @@ -2004,7 +2004,7 @@ export class VideoModel extends Model>> { return isStateForFederation(this.state) } - isNewVideo (newPrivacy: VideoPrivacyType) { + isNewVideoForFederation (newPrivacy: VideoPrivacyType) { return this.hasPrivacyForFederation() === false && isPrivacyForFederation(newPrivacy) === true }