]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Refactor schedule update
authorChocobozzz <me@florianbigard.com>
Fri, 11 Jun 2021 12:33:16 +0000 (14:33 +0200)
committerChocobozzz <me@florianbigard.com>
Fri, 11 Jun 2021 12:33:34 +0000 (14:33 +0200)
server/lib/schedulers/update-videos-scheduler.ts
server/models/video/schedule-video-update.ts
server/types/models/video/schedule-video-update.ts

index 3e75babcbc65bc35c4cf822383db34b6c4732acd..e61d4c2acf0399ae5dcb97270daf9283c82ad02e 100644 (file)
@@ -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)
index b0952c4316c8e7fd61b42c1be9f2387bdcc7ae84..d462c20c763ca7df8917e8cd6a20b88759faec1e 100644 (file)
@@ -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<Partial<AttributesOnly<Sched
       .then(res => !!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<MScheduleVideoUpdateVideoAll>(query)
+    return ScheduleVideoUpdateModel.findAll<MScheduleVideoUpdate>(query)
   }
 
   static deleteByVideoId (videoId: number, t: Transaction) {
index 5d2936000529ce8ef77add5bc21588a5dc8b6cb7..39fd7350186075da77f5046f6a5e50958c8ac490 100644 (file)
@@ -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<K extends keyof ScheduleVideoUpdateModel, M> = PickWith<ScheduleVideoUpdateModel, K, M>
 
 // ############################################################################
 
@@ -10,10 +6,6 @@ export type MScheduleVideoUpdate = Omit<ScheduleVideoUpdateModel, 'Video'>
 
 // ############################################################################
 
-export type MScheduleVideoUpdateVideoAll =
-  MScheduleVideoUpdate &
-  Use<'Video', MVideoAPWithoutCaption & MVideoWithBlacklistLight>
-
 // Format for API or AP object
 
 export type MScheduleVideoUpdateFormattable = Pick<MScheduleVideoUpdate, 'updateAt' | 'privacy'>