Files
aigen/server/api/generate/active.get.ts
T

56 lines
1.7 KiB
TypeScript

function livePayload(job: ReturnType<typeof getJob> & {}) {
if (!job) return null
return {
jobId: job.id,
kind: job.kind || 'video',
hideThumbnail: job.hideThumbnail === true,
folderLocked: job.library?.folderLocked === true,
...jobSnapshot(job)
}
}
export default defineEventHandler(async (event) => {
const owner = libraryOwnerKey(event)
const live = listJobs()
.filter(job => job.library?.ownerKey === owner && (job.status === 'queued' || job.status === 'uploading' || job.status === 'running'))
.sort((a, b) => b.startedAt - a.startedAt)
const videoLive = live.find(job => job.kind !== 'edit')
const editLive = live.find(job => job.kind === 'edit')
let video = videoLive ? livePayload(videoLive) : null
const edit = editLive ? livePayload(editLive) : null
if (!video) {
const pending = listPendingJobs()
.filter(job => job.ownerKey === owner)
.sort((a, b) => b.startedAt - a.startedAt)[0]
if (pending) {
const resolved = await resolvePendingJob(pending).catch(() => null)
if (resolved) {
video = {
jobId: pending.jobId,
kind: 'video' as const,
hideThumbnail: pending.hideThumbnail === true,
folderLocked: pending.folderLocked === true,
...resolved
}
} else {
const job = ensurePendingWatch(pending)
video = {
jobId: pending.jobId,
kind: 'video',
hideThumbnail: pending.hideThumbnail === true,
folderLocked: pending.folderLocked === true,
...jobSnapshot(job)
}
}
}
}
return {
jobId: video?.jobId || edit?.jobId || null,
video,
edit
}
})