From 0dd39fbb0e3ca67294c80fed8ee25d73f6ab1f59 Mon Sep 17 00:00:00 2001 From: Diogo Correia Date: Sun, 19 Jul 2026 13:50:07 +0100 Subject: [PATCH] refactor(web): simplify download manager, use SvelteMap --- .../lib/managers/download-manager.svelte.ts | 29 +++++++------------ web/src/routes/DownloadPanel.svelte | 3 +- 2 files changed, 11 insertions(+), 21 deletions(-) diff --git a/web/src/lib/managers/download-manager.svelte.ts b/web/src/lib/managers/download-manager.svelte.ts index 380622e36a..09765e96d4 100644 --- a/web/src/lib/managers/download-manager.svelte.ts +++ b/web/src/lib/managers/download-manager.svelte.ts @@ -1,3 +1,5 @@ +import { SvelteMap } from 'svelte/reactivity'; + export interface DownloadState { url: string; payload: unknown; @@ -6,34 +8,23 @@ export interface DownloadState { } class DownloadManager { - assets = $state>({}); + assets = new SvelteMap(); - isDownloading = $derived(Object.keys(this.assets).length > 0); - - #update(key: string, value: Partial | null) { - if (value === null) { - delete this.assets[key]; - return; - } - - if (!this.assets[key]) { - this.assets[key] = { url: '', payload: undefined, total: 0, downloaded: false }; - } - - const item = this.assets[key]; - Object.assign(item, value); - } + isDownloading = $derived(this.assets.size > 0); add(key: string, url: string, payload: unknown, total: number) { - this.#update(key, { url, payload, total }); + this.assets.set(key, { url, payload, total, downloaded: false }); } clearAll() { - this.assets = {}; + this.assets.clear(); } markDownloaded(key: string) { - this.#update(key, { downloaded: true }); + const state = this.assets.get(key); + if (state) { + this.assets.set(key, { ...state, downloaded: true }); + } } } diff --git a/web/src/routes/DownloadPanel.svelte b/web/src/routes/DownloadPanel.svelte index 1562e2f548..e7cd0bd156 100644 --- a/web/src/routes/DownloadPanel.svelte +++ b/web/src/routes/DownloadPanel.svelte @@ -28,8 +28,7 @@
- {#each Object.keys(downloadManager.assets) as downloadKey (downloadKey)} - {@const download = downloadManager.assets[downloadKey]} + {#each downloadManager.assets as [downloadKey, download] (downloadKey)}