X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Fschedulers%2Fupdate-videos-scheduler.ts;h=3e75babcbc65bc35c4cf822383db34b6c4732acd;hb=ad35265d743e621d86f3f0796dd9d8795c599dca;hp=a964648fd962a386001b306a679609f0ae055f9d;hpb=bbe0f0645ca958d33a3f409b15166609733b663f;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/schedulers/update-videos-scheduler.ts b/server/lib/schedulers/update-videos-scheduler.ts index a964648fd..3e75babcb 100644 --- a/server/lib/schedulers/update-videos-scheduler.ts +++ b/server/lib/schedulers/update-videos-scheduler.ts @@ -1,12 +1,12 @@ -import { isTestInstance } from '../../helpers/core-utils' import { logger } from '../../helpers/logger' -import { JobQueue } from '../job-queue' import { AbstractScheduler } from './abstract-scheduler' import { ScheduleVideoUpdateModel } from '../../models/video/schedule-video-update' import { retryTransactionWrapper } from '../../helpers/database-utils' -import { federateVideoIfNeeded } from '../activitypub' -import { SCHEDULER_INTERVALS_MS, sequelizeTypescript } from '../../initializers' -import { VideoPrivacy } from '../../../shared/models/videos' +import { federateVideoIfNeeded } from '../activitypub/videos' +import { SCHEDULER_INTERVALS_MS } from '../../initializers/constants' +import { Notifier } from '../notifier' +import { sequelizeTypescript } from '../../initializers/database' +import { MVideoFullLight } from '@server/types/models' export class UpdateVideosScheduler extends AbstractScheduler { @@ -14,48 +14,49 @@ export class UpdateVideosScheduler extends AbstractScheduler { protected schedulerIntervalMs = SCHEDULER_INTERVALS_MS.updateVideos - private isRunning = false - private constructor () { super() } - async execute () { - if (this.isRunning === true) return - this.isRunning = true - - try { - await retryTransactionWrapper(this.updateVideos.bind(this)) - } catch (err) { - logger.error('Cannot execute update videos scheduler.', { err }) - } finally { - this.isRunning = false - } + protected async internalExecute () { + return retryTransactionWrapper(this.updateVideos.bind(this)) } private async updateVideos () { if (!await ScheduleVideoUpdateModel.areVideosToUpdate()) return undefined - return sequelizeTypescript.transaction(async t => { + const publishedVideos = await sequelizeTypescript.transaction(async t => { const schedules = await ScheduleVideoUpdateModel.listVideosToUpdate(t) + const publishedVideos: MVideoFullLight[] = [] for (const schedule of schedules) { const video = schedule.Video logger.info('Executing scheduled video update on %s.', video.uuid) if (schedule.privacy) { - const oldPrivacy = video.privacy + const wasConfidentialVideo = video.isConfidential() + const isNewVideo = video.isNewVideo(schedule.privacy) - video.privacy = schedule.privacy + video.setPrivacy(schedule.privacy) await video.save({ transaction: t }) - - const isNewVideo = oldPrivacy === VideoPrivacy.PRIVATE await federateVideoIfNeeded(video, isNewVideo, t) + + if (wasConfidentialVideo) { + const videoToPublish: MVideoFullLight = Object.assign(video, { ScheduleVideoUpdate: schedule, UserVideoHistories: [] }) + publishedVideos.push(videoToPublish) + } } await schedule.destroy({ transaction: t }) } + + return publishedVideos }) + + for (const v of publishedVideos) { + Notifier.Instance.notifyOnNewVideoIfNeeded(v) + Notifier.Instance.notifyOnVideoPublishedAfterScheduledUpdate(v) + } } static get Instance () {