X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Fschedulers%2Fupdate-videos-scheduler.ts;h=c652682dd6a7f4b19a584856dc040e90e2b1ae77;hb=619537426bbb9fcb9f2825068d5f907db0dc1f09;hp=5b673b91321c0abb0edd22e5b53fedad6542f4c5;hpb=5b77537ce54832f47931ba47dc513be2a9197f92;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/schedulers/update-videos-scheduler.ts b/server/lib/schedulers/update-videos-scheduler.ts index 5b673b913..c652682dd 100644 --- a/server/lib/schedulers/update-videos-scheduler.ts +++ b/server/lib/schedulers/update-videos-scheduler.ts @@ -1,60 +1,55 @@ +import { VideoModel } from '@server/models/video/video' +import { MVideoFullLight } from '@server/types/models' import { logger } from '../../helpers/logger' -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 } from '../../initializers/constants' -import { VideoPrivacy } from '../../../shared/models/videos' -import { Notifier } from '../notifier' -import { VideoModel } from '../../models/video/video' import { sequelizeTypescript } from '../../initializers/database' +import { ScheduleVideoUpdateModel } from '../../models/video/schedule-video-update' +import { federateVideoIfNeeded } from '../activitypub/videos' +import { Notifier } from '../notifier' +import { AbstractScheduler } from './abstract-scheduler' export class UpdateVideosScheduler extends AbstractScheduler { private static instance: AbstractScheduler - protected schedulerIntervalMs = SCHEDULER_INTERVALS_MS.updateVideos + protected schedulerIntervalMs = SCHEDULER_INTERVALS_MS.UPDATE_VIDEOS private constructor () { super() } protected async internalExecute () { - return retryTransactionWrapper(this.updateVideos.bind(this)) + return this.updateVideos() } private async updateVideos () { if (!await ScheduleVideoUpdateModel.areVideosToUpdate()) return undefined - const publishedVideos = await sequelizeTypescript.transaction(async t => { - const schedules = await ScheduleVideoUpdateModel.listVideosToUpdate(t) - const publishedVideos: VideoModel[] = [] + const schedules = await ScheduleVideoUpdateModel.listVideosToUpdate() + const publishedVideos: MVideoFullLight[] = [] + + for (const schedule of schedules) { + await sequelizeTypescript.transaction(async t => { + const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(schedule.videoId, t) - 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 isNewVideo = oldPrivacy === VideoPrivacy.PRIVATE - - video.privacy = schedule.privacy - if (isNewVideo === true) video.publishedAt = new Date() + const wasConfidentialVideo = video.isConfidential() + const isNewVideo = video.isNewVideo(schedule.privacy) + video.setPrivacy(schedule.privacy) await video.save({ transaction: t }) await federateVideoIfNeeded(video, isNewVideo, t) - if (oldPrivacy === VideoPrivacy.UNLISTED || oldPrivacy === VideoPrivacy.PRIVATE) { - video.ScheduleVideoUpdate = schedule + if (wasConfidentialVideo) { publishedVideos.push(video) } } await schedule.destroy({ transaction: t }) - } - - return publishedVideos - }) + }) + } for (const v of publishedVideos) { Notifier.Instance.notifyOnNewVideoIfNeeded(v)