mirror of https://github.com/Chocobozzz/PeerTube
Refactor schedule update
parent
20a206c3d1
commit
fd6a74a835
|
@ -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)
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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'>
|
||||
|
|
Loading…
Reference in New Issue