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() 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 === 'complete') continue if (pendingQueueIds.has(queue.id)) continue if (!queue.currentClipId || pendingSegmentCount(queue) === 0) continue void startQueueBurst(owner, queue.id, 'all').catch(() => null) } } void kickStudioQueue() })