From 0c301c81826f1540936f83addc5cc20c9347a047 Mon Sep 17 00:00:00 2001 From: Administrator Date: Wed, 22 Apr 2026 18:17:10 +0200 Subject: [PATCH] =?UTF-8?q?fix(queue):=20consistent=20"Bereit"=20after=20r?= =?UTF-8?q?estart=20=E2=80=94=20no=20more=20Wartet/Bereit=20mix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit buildPersistedQueueState persisted every non-aborted job's status as-is. At restart no upload manager exists, so a serialized 'queued' or 'uploading' job showed up as "Wartet" / "Upload" even though nothing was actually running — next to a "Bereit" job for the same file on a different hoster (screenshot the user sent). Collapse every non-terminal state (queued, getting-server, uploading, retrying, aborted) to 'preview' during persistence. Terminal states (done, error, skipped) survive as-is so the user keeps their history / error messages. Also clears error/result when collapsing so the restored preview row doesn't carry stale failure text. --- renderer/app.js | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/renderer/app.js b/renderer/app.js index 2cbaecf..efa8e92 100644 --- a/renderer/app.js +++ b/renderer/app.js @@ -563,21 +563,29 @@ function buildPersistedQueueState() { return null; } + // After a restart no upload manager is running, so any in-flight state + // (queued / getting-server / uploading / retrying / aborted) is + // meaningless. Collapse them all to 'preview' so the queue shows a + // consistent "Bereit" for everything that didn't actually terminate. + // Only true terminal states (done / error / skipped) survive as-is. + const TERMINAL = new Set(['done', 'error', 'skipped']); return { selectedUploadHosters: getSelectedHosters(), selectedFiles: Array.from(selectedFileMap.values()), - queueJobs: queueJobs.map(job => ({ - id: job.id, - file: job.file, - fileName: job.fileName, - hoster: job.hoster, - // Save aborted jobs as queued so they survive restart - status: job.status === 'aborted' ? 'queued' : job.status, - bytesTotal: job.bytesTotal || 0, - error: job.status === 'aborted' ? null : (job.error || null), - result: job.result || null, - maxAttempts: job.maxAttempts || 0 - })) + queueJobs: queueJobs.map(job => { + const isTerminal = TERMINAL.has(job.status); + return { + id: job.id, + file: job.file, + fileName: job.fileName, + hoster: job.hoster, + status: isTerminal ? job.status : 'preview', + bytesTotal: job.bytesTotal || 0, + error: isTerminal ? (job.error || null) : null, + result: isTerminal ? (job.result || null) : null, + maxAttempts: job.maxAttempts || 0 + }; + }) }; }