From 520ef91d2dca1e312d53b09671f1d6941f1af464 Mon Sep 17 00:00:00 2001 From: Sucukdeluxe Date: Sun, 1 Mar 2026 21:09:53 +0100 Subject: [PATCH] Fix duplicate extraction and release v1.4.71 - Don't clear extraction resume state during hybrid mode (skipPostCleanup) - Mark ALL completed items as "Entpackt" after successful hybrid extraction to prevent full extraction from re-extracting already-extracted archives Co-Authored-By: Claude Opus 4.6 --- package.json | 2 +- src/main/download-manager.ts | 11 +++++++++-- src/main/extractor.ts | 2 +- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 3f47acf..4c92ccd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "real-debrid-downloader", - "version": "1.4.70", + "version": "1.4.71", "description": "Real-Debrid Downloader Desktop (Electron + React + TypeScript)", "main": "build/main/main/main.js", "author": "Sucukdeluxe", diff --git a/src/main/download-manager.ts b/src/main/download-manager.ts index ba63d78..c4dbe16 100644 --- a/src/main/download-manager.ts +++ b/src/main/download-manager.ts @@ -4538,9 +4538,16 @@ export class DownloadManager extends EventEmitter { logger.warn(`Hybrid-Extract: ${result.failed} Archive fehlgeschlagen, wird beim finalen Durchlauf erneut versucht`); } + // Mark all hybrid items with final status. + // Use completedItems (not just hybridItems) so that items not matched to any archive + // also get marked — this prevents the final full extraction from re-running. const updatedAt = nowMs(); - for (const entry of hybridItems) { - if (/^Entpacken \(hybrid\)/i.test(entry.fullStatus || "")) { + const targetItems = result.extracted > 0 && result.failed === 0 ? completedItems : hybridItems; + for (const entry of targetItems) { + if (isExtractedLabel(entry.fullStatus)) { + continue; + } + if (/^Entpacken \(hybrid\)/i.test(entry.fullStatus || "") || /^Fertig\b/i.test(entry.fullStatus || "")) { if (result.extracted > 0 && result.failed === 0) { entry.fullStatus = "Entpackt"; } else { diff --git a/src/main/extractor.ts b/src/main/extractor.ts index 4d40e17..4ec748e 100644 --- a/src/main/extractor.ts +++ b/src/main/extractor.ts @@ -1321,7 +1321,7 @@ export async function extractPackageArchives(options: ExtractOptions): Promise<{ } } - if (failed === 0 && resumeCompleted.size >= allCandidates.length) { + if (failed === 0 && resumeCompleted.size >= allCandidates.length && !options.skipPostCleanup) { clearExtractResumeState(options.packageDir, options.packageId); }