Compare commits

..

No commits in common. "927013d9a6131da00c30654851cdb1e6bdccbdf0" and "6897776460d70c35a4552301b0887bc895231662" have entirely different histories.

2 changed files with 25 additions and 14 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "real-debrid-downloader", "name": "real-debrid-downloader",
"version": "1.6.64", "version": "1.6.63",
"description": "Desktop downloader", "description": "Desktop downloader",
"main": "build/main/main/main.js", "main": "build/main/main/main.js",
"author": "Sucukdeluxe", "author": "Sucukdeluxe",

View File

@ -6309,6 +6309,19 @@ export class DownloadManager extends EventEmitter {
} }
if (readyArchives.size === 0) { if (readyArchives.size === 0) {
logger.info(`Hybrid-Extract: pkg=${pkg.name}, keine fertigen Archive-Sets`); logger.info(`Hybrid-Extract: pkg=${pkg.name}, keine fertigen Archive-Sets`);
// Relabel completed items that are part of incomplete multi-part archives
// from "Ausstehend" to "Warten auf Parts" so the UI accurately reflects
// that extraction is waiting for remaining parts to finish downloading.
const allDone = items.every((i) => i.status === "completed" || i.status === "failed" || i.status === "cancelled");
if (!allDone) {
for (const entry of items) {
if (entry.status === "completed" && entry.fullStatus === "Entpacken - Ausstehend") {
entry.fullStatus = "Entpacken - Warten auf Parts";
entry.updatedAt = nowMs();
}
}
this.emitState();
}
return 0; return 0;
} }
@ -6389,26 +6402,24 @@ export class DownloadManager extends EventEmitter {
// Mark items based on whether their archive is actually ready for extraction. // Mark items based on whether their archive is actually ready for extraction.
// Only items whose archive is in readyArchives get "Ausstehend"; others keep // Only items whose archive is in readyArchives get "Ausstehend"; others keep
// their current label to avoid flicker between hybrid runs. // "Warten auf Parts" to avoid flicker between hybrid runs.
const allDownloaded = completedItems.length >= items.length; const allDownloaded = completedItems.length >= items.length;
let labelsChanged = false;
for (const entry of completedItems) { for (const entry of completedItems) {
if (isExtractedLabel(entry.fullStatus)) { if (isExtractedLabel(entry.fullStatus)) {
continue; continue;
} }
const belongsToReady = allDownloaded if (allDownloaded) {
|| hybridFileNames.has((entry.fileName || "").toLowerCase()) // Everything downloaded — all remaining items will be extracted
|| (entry.targetPath && hybridFileNames.has(path.basename(entry.targetPath).toLowerCase())); entry.fullStatus = "Entpacken - Ausstehend";
const targetLabel = belongsToReady ? "Entpacken - Ausstehend" : "Entpacken - Warten auf Parts"; } else if (hybridFileNames.has((entry.fileName || "").toLowerCase()) ||
if (entry.fullStatus !== targetLabel) { (entry.targetPath && hybridFileNames.has(path.basename(entry.targetPath).toLowerCase()))) {
entry.fullStatus = targetLabel; entry.fullStatus = "Entpacken - Ausstehend";
entry.updatedAt = nowMs(); } else {
labelsChanged = true; entry.fullStatus = "Entpacken - Warten auf Parts";
} }
entry.updatedAt = nowMs();
} }
if (labelsChanged) { this.emitState();
this.emitState();
}
try { try {
const result = await extractPackageArchives({ const result = await extractPackageArchives({