web/queue: fix total progress

the issue was caused by currentTasks state dependence in ProcessingQueue, now it's properly updated just like before :3
This commit is contained in:
wukko 2025-05-19 16:32:48 +06:00
parent b96b57c216
commit b6693cd4b2
No known key found for this signature in database
GPG Key ID: 3E30B3F26C7B4AA2
3 changed files with 9 additions and 9 deletions

View File

@ -5,9 +5,10 @@
import { clearFileStorage } from "$lib/storage/opfs";
import { queueVisible } from "$lib/state/queue-visibility";
import { clearQueue, queue as readableQueue } from "$lib/state/task-manager/queue";
import { getProgress } from "$lib/task-manager/queue";
import { queueVisible } from "$lib/state/queue-visibility";
import { currentTasks } from "$lib/state/task-manager/current-tasks";
import { clearQueue, queue as readableQueue } from "$lib/state/task-manager/queue";
import SectionHeading from "$components/misc/SectionHeading.svelte";
import PopoverContainer from "$components/misc/PopoverContainer.svelte";
@ -24,7 +25,7 @@
let queue = $derived(Object.entries($readableQueue));
let totalProgress = $derived(queue.length ? queue.map(
([, item]) => getProgress(item) * 100
([, item]) => getProgress(item, $currentTasks) * 100
).reduce((a, b) => a + b) / (100 * queue.length) : 0);
let indeterminate = $derived(queue.length > 0 && totalProgress === 0);

View File

@ -64,7 +64,7 @@
const generateStatusText = ({ info, retrying, currentTasks }: StatusText) => {
switch (info.state) {
case "running":
const progress = getProgress(info);
const progress = getProgress(info, currentTasks);
const runningWorkers = info.pipeline.filter(w => w.workerId in currentTasks);
const running = [...new Set(runningWorkers.map(task => $t(`queue.state.running.${task.worker}`)))].join(', ');

View File

@ -4,11 +4,11 @@ import { ffmpegMetadataArgs } from "$lib/util";
import { createDialog } from "$lib/state/dialogs";
import { addItem } from "$lib/state/task-manager/queue";
import { openQueuePopover } from "$lib/state/queue-visibility";
import { currentTasks } from "$lib/state/task-manager/current-tasks";
import type { CobaltQueueItem } from "$lib/types/queue";
import type { CobaltCurrentTasks } from "$lib/types/task-manager";
import type { CobaltPipelineItem, CobaltPipelineResultFileType } from "$lib/types/workers";
import type { CobaltLocalProcessingResponse, CobaltSaveRequestBody } from "$lib/types/api";
import type { CobaltQueueItem } from "$lib/types/queue";
export const getMediaType = (type: string) => {
const kind = type.split('/')[0];
@ -204,20 +204,19 @@ export const createSavePipeline = (info: CobaltLocalProcessingResponse, request:
openQueuePopover();
}
export const getProgress = (item: CobaltQueueItem): number => {
export const getProgress = (item: CobaltQueueItem, currentTasks: CobaltCurrentTasks): number => {
if (item.state === 'done' || item.state === 'error') {
return 1;
} else if (item.state === 'waiting') {
return 0;
}
const runningTasks = get(currentTasks);
let sum = 0;
for (const worker of item.pipeline) {
if (item.completedWorkers.has(worker.workerId)) {
sum += 1;
} else {
const task = runningTasks[worker.workerId];
const task = currentTasks[worker.workerId];
sum += (task?.progress?.percentage || 0) / 100;
}
}