Refactor schedule update
This commit is contained in:
parent
20a206c3d1
commit
fd6a74a835
|
@ -7,6 +7,7 @@ import { SCHEDULER_INTERVALS_MS } from '../../initializers/constants'
|
||||||
import { Notifier } from '../notifier'
|
import { Notifier } from '../notifier'
|
||||||
import { sequelizeTypescript } from '../../initializers/database'
|
import { sequelizeTypescript } from '../../initializers/database'
|
||||||
import { MVideoFullLight } from '@server/types/models'
|
import { MVideoFullLight } from '@server/types/models'
|
||||||
|
import { VideoModel } from '@server/models/video/video'
|
||||||
|
|
||||||
export class UpdateVideosScheduler extends AbstractScheduler {
|
export class UpdateVideosScheduler extends AbstractScheduler {
|
||||||
|
|
||||||
|
@ -25,12 +26,13 @@ export class UpdateVideosScheduler extends AbstractScheduler {
|
||||||
private async updateVideos () {
|
private async updateVideos () {
|
||||||
if (!await ScheduleVideoUpdateModel.areVideosToUpdate()) return undefined
|
if (!await ScheduleVideoUpdateModel.areVideosToUpdate()) return undefined
|
||||||
|
|
||||||
const publishedVideos = await sequelizeTypescript.transaction(async t => {
|
const schedules = await ScheduleVideoUpdateModel.listVideosToUpdate()
|
||||||
const schedules = await ScheduleVideoUpdateModel.listVideosToUpdate(t)
|
const publishedVideos: MVideoFullLight[] = []
|
||||||
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)
|
logger.info('Executing scheduled video update on %s.', video.uuid)
|
||||||
|
|
||||||
if (schedule.privacy) {
|
if (schedule.privacy) {
|
||||||
|
@ -42,16 +44,13 @@ export class UpdateVideosScheduler extends AbstractScheduler {
|
||||||
await federateVideoIfNeeded(video, isNewVideo, t)
|
await federateVideoIfNeeded(video, isNewVideo, t)
|
||||||
|
|
||||||
if (wasConfidentialVideo) {
|
if (wasConfidentialVideo) {
|
||||||
const videoToPublish: MVideoFullLight = Object.assign(video, { ScheduleVideoUpdate: schedule, UserVideoHistories: [] })
|
publishedVideos.push(video)
|
||||||
publishedVideos.push(videoToPublish)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await schedule.destroy({ transaction: t })
|
await schedule.destroy({ transaction: t })
|
||||||
}
|
})
|
||||||
|
}
|
||||||
return publishedVideos
|
|
||||||
})
|
|
||||||
|
|
||||||
for (const v of publishedVideos) {
|
for (const v of publishedVideos) {
|
||||||
Notifier.Instance.notifyOnNewVideoIfNeeded(v)
|
Notifier.Instance.notifyOnNewVideoIfNeeded(v)
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
import { Op, Transaction } from 'sequelize'
|
import { Op, Transaction } from 'sequelize'
|
||||||
import { AllowNull, BelongsTo, Column, CreatedAt, Default, ForeignKey, Model, Table, UpdatedAt } from 'sequelize-typescript'
|
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 { AttributesOnly } from '@shared/core-utils'
|
||||||
import { VideoPrivacy } from '../../../shared/models/videos'
|
import { VideoPrivacy } from '../../../shared/models/videos'
|
||||||
import { ScopeNames as VideoScopeNames, VideoModel } from './video'
|
import { VideoModel } from './video'
|
||||||
|
|
||||||
@Table({
|
@Table({
|
||||||
tableName: 'scheduleVideoUpdate',
|
tableName: 'scheduleVideoUpdate',
|
||||||
|
@ -62,31 +62,17 @@ export class ScheduleVideoUpdateModel extends Model<Partial<AttributesOnly<Sched
|
||||||
.then(res => !!res)
|
.then(res => !!res)
|
||||||
}
|
}
|
||||||
|
|
||||||
static listVideosToUpdate (t: Transaction) {
|
static listVideosToUpdate (transaction?: Transaction) {
|
||||||
const query = {
|
const query = {
|
||||||
where: {
|
where: {
|
||||||
updateAt: {
|
updateAt: {
|
||||||
[Op.lte]: new Date()
|
[Op.lte]: new Date()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
include: [
|
transaction
|
||||||
{
|
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ScheduleVideoUpdateModel.findAll<MScheduleVideoUpdateVideoAll>(query)
|
return ScheduleVideoUpdateModel.findAll<MScheduleVideoUpdate>(query)
|
||||||
}
|
}
|
||||||
|
|
||||||
static deleteByVideoId (videoId: number, t: Transaction) {
|
static deleteByVideoId (videoId: number, t: Transaction) {
|
||||||
|
|
|
@ -1,8 +1,4 @@
|
||||||
import { ScheduleVideoUpdateModel } from '../../../models/video/schedule-video-update'
|
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
|
// Format for API or AP object
|
||||||
|
|
||||||
export type MScheduleVideoUpdateFormattable = Pick<MScheduleVideoUpdate, 'updateAt' | 'privacy'>
|
export type MScheduleVideoUpdateFormattable = Pick<MScheduleVideoUpdate, 'updateAt' | 'privacy'>
|
||||||
|
|
Loading…
Reference in New Issue