Show pending Studio 2 jobs and freeze finished timers

This commit is contained in:
Towsty
2026-09-12 10:39:33 -05:00
parent 3e90d2ff45
commit 3da3656140
6 changed files with 43 additions and 5 deletions
+3 -1
View File
@@ -1,3 +1,5 @@
import { jobView } from '~/shared/studio2/queue-view.mjs';
import { getJob } from '../../utils/jobs';
import { records } from '../../utils/studio2/store';
import { listStudioJobs } from '../../utils/studioQueue';
export default defineEventHandler(event => { const { owner } = assertLibraryOwner(event); const rows = listStudioJobs(owner); return records(owner).filter(r => !r.dismissed).filter(r => { try {
@@ -6,4 +8,4 @@ export default defineEventHandler(event => { const { owner } = assertLibraryOwne
}
catch {
return false;
} }).map(r => { const q = rows.find(q => q.id === r.queueId); return { ...r, state: q?.status === 'complete' ? 'complete' : q?.status === 'cancelled' ? 'cancelled' : q?.status === 'error' ? 'failed' : r.state, error: r.error || q?.lastError }; }); });
} }).map(r => { const q = rows.find(q => q.id === r.queueId); const live=r.liveId?getJob(r.liveId):null; if (['waiting','queued','held'].includes(r.state) && !q && !live) return null; return jobView(r,q,live); }).filter(Boolean); });
+2 -1
View File
@@ -28,7 +28,7 @@ type DiskFile = {
subfolder: string;
type: string;
};
function update(r: any, state: string) { r.state = state; r.updatedAt = Date.now(); saveRecord(r); }
function update(r: any, state: string) { r.state = state; r.updatedAt = Date.now(); if (['complete','failed','cancelled'].includes(state)) r.finishedAt ??= r.updatedAt; saveRecord(r); }
// Labels whose pixels must never be resampled: the hero identity still, and the
// extend/video start frame (which is either the exact anchor PNG or an already-canvas-sized
// extracted last frame). Fitting these every hop is what destroys identity across chained extends.
@@ -281,6 +281,7 @@ export async function startStudio2Job(item: StudioJob) {
job.library = { ownerKey: item.ownerKey, folderId: r.request.folderId, extensions: [], queueAutoRun: false } as any;
job.status = 'running';
r.startedAt = Date.now();
delete r.finishedAt;
r.liveId = job.id;
r.clientId = job.clientId;
saveRecord(r);