From 1580a160da2e623fe78b8b1b13cea89d98a8ab57 Mon Sep 17 00:00:00 2001 From: Sucukdeluxe Date: Mon, 31 Aug 2026 15:56:04 +0200 Subject: [PATCH] Keep session bytes on live update cadence --- CHANGELOG.md | 4 ++++ PROJECT_MEMORY.md | 2 ++ src/main/download-manager.ts | 11 +++++++---- tests/download-manager.test.ts | 19 +++++++++++++++++++ 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4092667..f05ae00 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to Multi-Debrid Downloader are documented in this file. ## [Unreleased] +### Download presentation + +- Keep the sidebar session byte counter on the same live snapshot cadence as the remaining byte counter even when large-queue statistics are cached. + ### Proxy limit tuning - Increase the default global proxy connection budget for new settings from 20 to 32 and raise the configurable maximum from 32 to 40 while retaining fair sharing and adaptive 429/503 backoff. diff --git a/PROJECT_MEMORY.md b/PROJECT_MEMORY.md index b886da4..ccfbfe2 100644 --- a/PROJECT_MEMORY.md +++ b/PROJECT_MEMORY.md @@ -175,6 +175,8 @@ npm exec -- tsc --noEmit ## Verifizierungen vom 31. August 2026 +- Unveröffentlichter Sidebar-Live-Takt-Fix: Bei laufenden Queues ab 500 Einträgen bleibt der Sitzungs-Bytezähler trotz des 1,5-Sekunden-Statistik-Caches in jedem 750-Millisekunden-Live-Snapshot aktuell. Die Bedeutung des kumulativen Sitzungszählers bleibt unverändert. Der vollständige Download-Manager-Lauf war mit 263 von 263 Tests erfolgreich. +- Vollständiger Client-Lauf nach dem Live-Takt-Fix: 2.658 Tests erfolgreich und 4 optionale JVM-Tests übersprungen; genau ein unveränderter Entpacktest überschritt unter paralleler Gesamtlast einmal sein 5-Sekunden-Limit. Der unmittelbar folgende isolierte Lauf aller 84 Entpacktests war vollständig grün. TypeScript, Main-/Renderer-Build, Self-Check und 16 von 16 Backup-API-Tests waren ebenfalls erfolgreich; die bekannte Vite-Warnung zum rund 576 KiB großen Renderer-Chunk bleibt bestehen. - Unveröffentlichte 32/40-Limitanpassung: Proxy-Scheduler, Storage, Einstellungen, Renderer-Projektion und visuelle Fixtures 229 von 229 Tests erfolgreich. Die Main-Normalisierung deckt Standard 32, Minimum 2, Maximum 40 und Werte oberhalb des Maximums direkt ab. - Vollständiger Client-Lauf nach der 32/40-Anpassung ohne die zwei lokal nicht ausführbaren Symlink-Fixtures: 140 Testdateien erfolgreich, 1 JVM-Testdatei übersprungen; 2.658 Tests erfolgreich und 4 übersprungen. Die übrigen 22 Public-Release-Metadatentests liefen separat erfolgreich. Alle 84 Entpacktests sind unverändert grün. - Nach der 32/40-Anpassung erfolgreich: TypeScript, vollständiger Main-/Renderer-Build, Self-Check und 16 von 16 Backup-API-Tests. Die bekannte Vite-Warnung zum rund 576 KiB großen Renderer-Chunk bleibt bestehen. diff --git a/src/main/download-manager.ts b/src/main/download-manager.ts index e9182c1..1328e9d 100644 --- a/src/main/download-manager.ts +++ b/src/main/download-manager.ts @@ -2853,10 +2853,13 @@ export class DownloadManager extends EventEmitter { } public getStats(now = nowMs()): DownloadStats { - const itemCount = this.itemCount; - if (this.statsCache && this.session.running && itemCount >= 500 && now - this.statsCacheAt < 1500) { - return this.statsCache; - } + const itemCount = this.itemCount; + if (this.statsCache && this.session.running && itemCount >= 500 && now - this.statsCacheAt < 1500) { + return { + ...this.statsCache, + totalDownloaded: this.sessionDownloadedBytes + }; + } this.resetSessionTotalsIfQueueEmpty(); diff --git a/tests/download-manager.test.ts b/tests/download-manager.test.ts index 9a5f737..98fc5f7 100644 --- a/tests/download-manager.test.ts +++ b/tests/download-manager.test.ts @@ -84,6 +84,25 @@ describe("download live update cadence", () => { vi.useRealTimers(); } }); + + it("keeps the session byte counter live while large-queue statistics are cached", () => { + const root = fs.mkdtempSync(path.join(os.tmpdir(), "rd-live-session-bytes-")); + tempDirs.push(root); + const session = emptySession(); + session.running = true; + const manager = new DownloadManager(defaultSettings(), session, createStoragePaths(path.join(root, "state"))); + const internal = manager as unknown as { + itemCount: number; + sessionDownloadedBytes: number; + }; + + internal.itemCount = 500; + internal.sessionDownloadedBytes = 8 * 1024 * 1024; + expect(manager.getSnapshot().stats.totalDownloaded).toBe(8 * 1024 * 1024); + + internal.sessionDownloadedBytes = 16 * 1024 * 1024; + expect(manager.getSnapshot().stats.totalDownloaded).toBe(16 * 1024 * 1024); + }); }); describe("snapshot revision", () => {