Compare commits
2 Commits
369d25a365
...
f3e0e54da7
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f3e0e54da7 | ||
|
|
8f6b87ae8c |
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "real-debrid-downloader",
|
"name": "real-debrid-downloader",
|
||||||
"version": "1.7.8",
|
"version": "1.7.9",
|
||||||
"description": "Desktop downloader",
|
"description": "Desktop downloader",
|
||||||
"main": "build/main/main/main.js",
|
"main": "build/main/main/main.js",
|
||||||
"author": "Sucukdeluxe",
|
"author": "Sucukdeluxe",
|
||||||
|
|||||||
@ -3066,7 +3066,6 @@ export class DownloadManager extends EventEmitter {
|
|||||||
this.session.paused = false;
|
this.session.paused = false;
|
||||||
this.session.runStartedAt = nowMs();
|
this.session.runStartedAt = nowMs();
|
||||||
this.session.totalDownloadedBytes = 0;
|
this.session.totalDownloadedBytes = 0;
|
||||||
this.sessionDownloadedBytes = 0;
|
|
||||||
this.session.summaryText = "";
|
this.session.summaryText = "";
|
||||||
this.session.reconnectUntil = 0;
|
this.session.reconnectUntil = 0;
|
||||||
this.session.reconnectReason = "";
|
this.session.reconnectReason = "";
|
||||||
@ -3174,7 +3173,6 @@ export class DownloadManager extends EventEmitter {
|
|||||||
this.session.paused = false;
|
this.session.paused = false;
|
||||||
this.session.runStartedAt = nowMs();
|
this.session.runStartedAt = nowMs();
|
||||||
this.session.totalDownloadedBytes = 0;
|
this.session.totalDownloadedBytes = 0;
|
||||||
this.sessionDownloadedBytes = 0;
|
|
||||||
this.session.summaryText = "";
|
this.session.summaryText = "";
|
||||||
this.session.reconnectUntil = 0;
|
this.session.reconnectUntil = 0;
|
||||||
this.session.reconnectReason = "";
|
this.session.reconnectReason = "";
|
||||||
@ -3304,11 +3302,10 @@ export class DownloadManager extends EventEmitter {
|
|||||||
|
|
||||||
this.session.running = true;
|
this.session.running = true;
|
||||||
this.session.paused = false;
|
this.session.paused = false;
|
||||||
// By design: runStartedAt and totalDownloadedBytes reset on each start/resume so that
|
// Keep cumulative session bytes across stop/resume so the session total stays accurate.
|
||||||
// duration, average speed, and ETA are calculated relative to the current run, not cumulative.
|
// Only runStartedAt resets (for ETA/speed calculations relative to current run).
|
||||||
this.session.runStartedAt = nowMs();
|
this.session.runStartedAt = nowMs();
|
||||||
this.session.totalDownloadedBytes = 0;
|
this.session.totalDownloadedBytes = 0;
|
||||||
this.sessionDownloadedBytes = 0;
|
|
||||||
this.session.summaryText = "";
|
this.session.summaryText = "";
|
||||||
this.session.reconnectUntil = 0;
|
this.session.reconnectUntil = 0;
|
||||||
this.session.reconnectReason = "";
|
this.session.reconnectReason = "";
|
||||||
|
|||||||
@ -2742,6 +2742,35 @@ export async function extractPackageArchives(options: ExtractOptions): Promise<{
|
|||||||
passwordCandidates = frozenPasswords;
|
passwordCandidates = frozenPasswords;
|
||||||
|
|
||||||
if (abortError) throw new Error("aborted:extract");
|
if (abortError) throw new Error("aborted:extract");
|
||||||
|
|
||||||
|
// ── Retry failed wrong_password archives serially ──
|
||||||
|
// Parallel UnRAR processes writing to the same target directory can cause
|
||||||
|
// CRC mismatches that are misreported as "Incorrect password".
|
||||||
|
// If any archive succeeded (i.e. the password is known), retry the failed
|
||||||
|
// ones one-at-a-time to eliminate false positives from I/O contention.
|
||||||
|
if (failed > 0 && extracted > 0) {
|
||||||
|
const failedArchives = parallelQueue.filter((ap) => !extractedArchives.has(ap) && !resumeCompleted.has(archiveNameKey(path.basename(ap))));
|
||||||
|
if (failedArchives.length > 0) {
|
||||||
|
logger.info(`Serielle Wiederholung: ${failedArchives.length} fehlgeschlagene Archive werden einzeln wiederholt (mögliche Parallelitäts-Kollision)`);
|
||||||
|
let retryRecovered = 0;
|
||||||
|
for (const archivePath of failedArchives) {
|
||||||
|
if (options.signal?.aborted || noExtractorEncountered) break;
|
||||||
|
try {
|
||||||
|
// Reset failed count for this archive before retry
|
||||||
|
failed -= 1;
|
||||||
|
await extractSingleArchive(archivePath);
|
||||||
|
retryRecovered += 1;
|
||||||
|
} catch (retryError) {
|
||||||
|
const errText = String(retryError);
|
||||||
|
if (isExtractAbortError(errText)) throw retryError;
|
||||||
|
// extractSingleArchive already incremented failed and logged the error
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (retryRecovered > 0) {
|
||||||
|
logger.info(`Serielle Wiederholung: ${retryRecovered}/${failedArchives.length} Archive erfolgreich entpackt`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (noExtractorEncountered) {
|
if (noExtractorEncountered) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user