From fd6a74a83594bfb59e28bf9cae71a39884ebcc2f Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 11 Jun 2021 14:33:16 +0200 Subject: [PATCH 1/1] Refactor schedule update --- .../lib/schedulers/update-videos-scheduler.ts | 21 ++++++++-------- server/models/video/schedule-video-update.ts | 24 ++++--------------- .../models/video/schedule-video-update.ts | 8 ------- 3 files changed, 15 insertions(+), 38 deletions(-) diff --git a/server/lib/schedulers/update-videos-scheduler.ts b/server/lib/schedulers/update-videos-scheduler.ts index 3e75babcb..e61d4c2ac 100644 --- a/server/lib/schedulers/update-videos-scheduler.ts +++ b/server/lib/schedulers/update-videos-scheduler.ts @@ -7,6 +7,7 @@ import { SCHEDULER_INTERVALS_MS } from '../../initializers/constants' import { Notifier } from '../notifier' import { sequelizeTypescript } from '../../initializers/database' import { MVideoFullLight } from '@server/types/models' +import { VideoModel } from '@server/models/video/video' export class UpdateVideosScheduler extends AbstractScheduler { @@ -25,12 +26,13 @@ export class UpdateVideosScheduler extends AbstractScheduler { private async updateVideos () { if (!await ScheduleVideoUpdateModel.areVideosToUpdate()) return undefined - const publishedVideos = await sequelizeTypescript.transaction(async t => { - const schedules = await ScheduleVideoUpdateModel.listVideosToUpdate(t) - const publishedVideos: MVideoFullLight[] = [] + 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) { @@ -42,16 +44,13 @@ export class UpdateVideosScheduler extends AbstractScheduler { await federateVideoIfNeeded(video, isNewVideo, t) if (wasConfidentialVideo) { - const videoToPublish: MVideoFullLight = Object.assign(video, { ScheduleVideoUpdate: schedule, UserVideoHistories: [] }) - publishedVideos.push(videoToPublish) + publishedVideos.push(video) } } await schedule.destroy({ transaction: t }) - } - - return publishedVideos - }) + }) + } for (const v of publishedVideos) { Notifier.Instance.notifyOnNewVideoIfNeeded(v) diff --git a/server/models/video/schedule-video-update.ts b/server/models/video/schedule-video-update.ts index b0952c431..d462c20c7 100644 --- a/server/models/video/schedule-video-update.ts +++ b/server/models/video/schedule-video-update.ts @@ -1,9 +1,9 @@ import { Op, Transaction } from 'sequelize' import { AllowNull, BelongsTo, Column, CreatedAt, Default, ForeignKey, Model, Table, UpdatedAt } from 'sequelize-typescript' -import { MScheduleVideoUpdateFormattable, MScheduleVideoUpdateVideoAll } from '@server/types/models' +import { MScheduleVideoUpdateFormattable, MScheduleVideoUpdate } from '@server/types/models' import { AttributesOnly } from '@shared/core-utils' import { VideoPrivacy } from '../../../shared/models/videos' -import { ScopeNames as VideoScopeNames, VideoModel } from './video' +import { VideoModel } from './video' @Table({ tableName: 'scheduleVideoUpdate', @@ -62,31 +62,17 @@ export class ScheduleVideoUpdateModel extends Model !!res) } - static listVideosToUpdate (t: Transaction) { + static listVideosToUpdate (transaction?: Transaction) { const query = { where: { updateAt: { [Op.lte]: new Date() } }, - include: [ - { - model: VideoModel.scope( - [ - VideoScopeNames.WITH_WEBTORRENT_FILES, - VideoScopeNames.WITH_STREAMING_PLAYLISTS, - VideoScopeNames.WITH_ACCOUNT_DETAILS, - VideoScopeNames.WITH_BLACKLISTED, - VideoScopeNames.WITH_THUMBNAILS, - VideoScopeNames.WITH_TAGS - ] - ) - } - ], - transaction: t + transaction } - return ScheduleVideoUpdateModel.findAll(query) + return ScheduleVideoUpdateModel.findAll(query) } static deleteByVideoId (videoId: number, t: Transaction) { diff --git a/server/types/models/video/schedule-video-update.ts b/server/types/models/video/schedule-video-update.ts index 5d2936000..39fd73501 100644 --- a/server/types/models/video/schedule-video-update.ts +++ b/server/types/models/video/schedule-video-update.ts @@ -1,8 +1,4 @@ import { ScheduleVideoUpdateModel } from '../../../models/video/schedule-video-update' -import { PickWith } from '@shared/core-utils' -import { MVideoAPWithoutCaption, MVideoWithBlacklistLight } from './video' - -type Use = PickWith // ############################################################################ @@ -10,10 +6,6 @@ export type MScheduleVideoUpdate = Omit // ############################################################################ -export type MScheduleVideoUpdateVideoAll = - MScheduleVideoUpdate & - Use<'Video', MVideoAPWithoutCaption & MVideoWithBlacklistLight> - // Format for API or AP object export type MScheduleVideoUpdateFormattable = Pick -- 2.41.0