Files
aigen/server/plugins/resume-queues.ts

30 lines
1.3 KiB
TypeScript

import { listPendingJobs } from '~/server/utils/pending'
import { listOwnersWithQueues, listShotQueues, pendingSegmentCount } from '~/server/utils/shotQueue'
import { kickStudioQueue, listOwnersWithStudioQueues, listStudioJobs } from '~/server/utils/studioQueue'
import { startQueueBurst } from '~/server/utils/videoChain'
export default defineNitroPlugin(() => {
const pendingQueueIds = new Set(listPendingJobs().map(job => job.queueId).filter(Boolean))
const claimedQueueIds = new Set<string>()
for (const owner of listOwnersWithStudioQueues()) {
for (const job of listStudioJobs(owner)) {
if (!job.shotQueueId) continue
if (job.status === 'waiting' || job.status === 'running' || job.status === 'held') {
claimedQueueIds.add(job.shotQueueId)
}
}
}
for (const owner of listOwnersWithQueues()) {
for (const queue of listShotQueues(owner)) {
if (claimedQueueIds.has(queue.id)) continue
if (!queue.autoRun) continue
if (queue.stopAfterCurrent) continue
if (queue.status === 'paused' || queue.status === 'complete' || queue.status === 'error') continue
if (pendingQueueIds.has(queue.id)) continue
if (!queue.currentClipId || pendingSegmentCount(queue) === 0) continue
void startQueueBurst(owner, queue.id, 'all').catch(() => null)
}
}
void kickStudioQueue()
})