From a3b4b2323f185d13123908c815bca5823487bee8 Mon Sep 17 00:00:00 2001 From: Sucukdeluxe Date: Sat, 15 Aug 2026 18:39:34 +0200 Subject: [PATCH] fix(downloads): finish availability checks after start --- src/main/download-manager.ts | 22 +++++++++++++--------- tests/download-manager.test.ts | 27 +++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 9 deletions(-) diff --git a/src/main/download-manager.ts b/src/main/download-manager.ts index 862233e..f488d2a 100644 --- a/src/main/download-manager.ts +++ b/src/main/download-manager.ts @@ -3482,15 +3482,19 @@ export class DownloadManager extends EventEmitter { } private applyRapidgatorCheckResult(item: DownloadItem, result: Awaited>): void { - if (!result) { - if (item.onlineStatus === "checking") { - item.onlineStatus = undefined; - } - return; - } - if (item.status !== "queued") return; - - if (!result.online) { + if (!result) { + if (item.onlineStatus === "checking") { + item.onlineStatus = undefined; + } + return; + } + if (item.status !== "queued") { + item.onlineStatus = result.online ? "online" : "offline"; + item.updatedAt = nowMs(); + return; + } + + if (!result.online) { item.status = "failed"; item.fullStatus = "Offline"; item.lastError = "Datei nicht gefunden auf Rapidgator"; diff --git a/tests/download-manager.test.ts b/tests/download-manager.test.ts index 48bfba0..fa4c7a8 100644 --- a/tests/download-manager.test.ts +++ b/tests/download-manager.test.ts @@ -796,6 +796,33 @@ describe("download manager", () => { expect(internal.session.items[itemId].status).toBe("queued"); }); + it("finishes a RapidGator availability check after the download has started", () => { + const root = fs.mkdtempSync(path.join(os.tmpdir(), "rd-dm-availability-")); + tempDirs.push(root); + const manager = new DownloadManager(defaultSettings(), emptySession(), createStoragePaths(path.join(root, "state"))); + manager.addPackages([{ name: "availability", links: ["https://example.com/file.bin"] }]); + const snapshot = manager.getSnapshot(); + const itemId = snapshot.session.packages[snapshot.session.packageOrder[0]].itemIds[0]; + const internal = manager as unknown as { + session: typeof snapshot.session; + applyRapidgatorCheckResult: (item: typeof snapshot.session.items[string], result: { online: boolean; fileName: string; fileSizeBytes: number | null }) => void; + }; + const item = internal.session.items[itemId]; + item.status = "downloading"; + item.fullStatus = "Download läuft"; + item.onlineStatus = "checking"; + + internal.applyRapidgatorCheckResult(item, { + online: true, + fileName: "episode.part01.rar", + fileSizeBytes: 524_288_000 + }); + + expect(item.status).toBe("downloading"); + expect(item.fullStatus).toBe("Download läuft"); + expect(item.onlineStatus).toBe("online"); + }); + it("applies an imported settings snapshot without touching queued items or filesystem workflows", () => { const root = fs.mkdtempSync(path.join(os.tmpdir(), "rd-settings-import-")); tempDirs.push(root);