diff --git a/package.json b/package.json index 3bd0d83..d9ba36e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "real-debrid-downloader", - "version": "1.6.41", + "version": "1.6.42", "description": "Desktop downloader", "main": "build/main/main/main.js", "author": "Sucukdeluxe", diff --git a/src/main/download-manager.ts b/src/main/download-manager.ts index da63efe..96a06cb 100644 --- a/src/main/download-manager.ts +++ b/src/main/download-manager.ts @@ -6377,6 +6377,11 @@ export class DownloadManager extends EventEmitter { maxParallel: this.settings.maxParallelExtract || 2, extractCpuPriority: this.settings.extractCpuPriority, onProgress: (progress) => { + if (progress.phase === "preparing") { + pkg.postProcessLabel = progress.archiveName || "Vorbereiten..."; + this.emitState(); + return; + } if (progress.phase === "done") { // Do NOT mark remaining archives as "Done" here — some may have // failed. The post-extraction code (result.failed check) will @@ -6577,7 +6582,8 @@ export class DownloadManager extends EventEmitter { const allDone = success + failed + cancelled >= items.length; if (!allDone && this.settings.hybridExtract && this.settings.autoExtract && failed === 0 && success > 0) { - pkg.postProcessLabel = "Entpacken..."; + pkg.postProcessLabel = "Entpacken vorbereiten..."; + this.emitState(); await this.runHybridExtraction(packageId, pkg, items, signal); if (signal?.aborted) { pkg.postProcessLabel = undefined; @@ -6612,7 +6618,7 @@ export class DownloadManager extends EventEmitter { const alreadyMarkedExtracted = completedItems.length > 0 && completedItems.every((item) => isExtractedLabel(item.fullStatus)); if (this.settings.autoExtract && failed === 0 && success > 0 && !alreadyMarkedExtracted) { - pkg.postProcessLabel = "Entpacken..."; + pkg.postProcessLabel = "Entpacken vorbereiten..."; pkg.status = "extracting"; this.emitState(); const extractionStartMs = nowMs(); @@ -6684,6 +6690,11 @@ export class DownloadManager extends EventEmitter { maxParallel: this.settings.maxParallelExtract || 2, extractCpuPriority: this.settings.extractCpuPriority, onProgress: (progress) => { + if (progress.phase === "preparing") { + pkg.postProcessLabel = progress.archiveName || "Vorbereiten..."; + this.emitState(); + return; + } if (progress.phase === "done") { // Do NOT mark remaining archives as "Done" here — some may have // failed. The post-extraction code (result.failed check) will diff --git a/src/main/extractor.ts b/src/main/extractor.ts index 4c2da2e..7e916e1 100644 --- a/src/main/extractor.ts +++ b/src/main/extractor.ts @@ -99,7 +99,7 @@ export interface ExtractProgressUpdate { archiveName: string; archivePercent?: number; elapsedMs?: number; - phase: "extracting" | "done"; + phase: "extracting" | "done" | "preparing"; passwordAttempt?: number; passwordTotal?: number; passwordFound?: boolean; @@ -1862,6 +1862,7 @@ export async function extractPackageArchives(options: ExtractOptions): Promise<{ if (options.signal?.aborted) { throw new Error("aborted:extract"); } + options.onProgress?.({ current: 0, total: 0, percent: 0, archiveName: "Archive scannen...", phase: "preparing" }); const allCandidates = await findArchiveCandidates(options.packageDir); const candidates = options.onlyArchives ? allCandidates.filter((archivePath) => { @@ -1873,6 +1874,7 @@ export async function extractPackageArchives(options: ExtractOptions): Promise<{ // Disk space pre-check if (candidates.length > 0) { + options.onProgress?.({ current: 0, total: candidates.length, percent: 0, archiveName: "Speicherplatz prüfen...", phase: "preparing" }); try { await fs.promises.mkdir(options.targetDir, { recursive: true }); } catch { /* ignore */ } diff --git a/src/renderer/App.tsx b/src/renderer/App.tsx index 5da1f9d..8ffe666 100644 --- a/src/renderer/App.tsx +++ b/src/renderer/App.tsx @@ -3371,7 +3371,7 @@ const PackageCard = memo(function PackageCard({ pkg, items, packageSpeed, isFirs {pkg.priority === "high" ? "Hoch" : pkg.priority === "low" ? "Niedrig" : ""} ); case "status": return ( - [{done}/{total}{done === total && total > 0 ? " - Done" : ""}{failed > 0 ? ` · ${failed} Fehler` : ""}{cancelled > 0 ? ` · ${cancelled} abgebr.` : ""}]{pkg.postProcessLabel ? ` ${pkg.postProcessLabel}` : ""} + [{done}/{total}{done === total && total > 0 ? " - Done" : ""}{failed > 0 ? ` · ${failed} Fehler` : ""}{cancelled > 0 ? ` · ${cancelled} abgebr.` : ""}]{pkg.postProcessLabel ? ` - ${pkg.postProcessLabel}` : ""} ); case "speed": return ( {packageSpeed > 0 ? formatSpeedMbps(packageSpeed) : ""}