From 6159319172ec11e01034b4975405e752d62d018a Mon Sep 17 00:00:00 2001 From: quexeky Date: Sat, 4 Jan 2025 15:47:14 +1100 Subject: [PATCH] feat(download manager): Added generic download manager Signed-off-by: quexeky --- composables/downloads.ts | 5 +- composables/game.ts | 24 +-- pages/queue.vue | 28 ++-- src-tauri/Cargo.lock | 9 +- src-tauri/Cargo.toml | 1 + src-tauri/src/db.rs | 28 ++-- .../src/download_manager/download_manager.rs | 2 +- .../download_manager_builder.rs | 65 +++++--- .../src/download_manager/downloadable.rs | 6 +- .../download_manager/downloadable_metadata.rs | 7 +- src-tauri/src/downloads/download_agent.rs | 109 +++++++++++-- src-tauri/src/downloads/download_commands.rs | 4 +- src-tauri/src/lib.rs | 18 +-- src-tauri/src/library.rs | 144 +++++++++--------- src-tauri/src/process/process_commands.rs | 16 +- src-tauri/src/process/process_manager.rs | 42 ++--- src-tauri/src/state.rs | 31 ++-- src-tauri/src/tools/tool.rs | 4 +- types.ts | 13 ++ utils/generateGameMeta.ts | 9 ++ 20 files changed, 363 insertions(+), 202 deletions(-) create mode 100644 utils/generateGameMeta.ts diff --git a/composables/downloads.ts b/composables/downloads.ts index 860a8c3..55de7fb 100644 --- a/composables/downloads.ts +++ b/composables/downloads.ts @@ -1,7 +1,8 @@ import { listen } from "@tauri-apps/api/event"; +import type { DownloadableMetadata } from "~/types"; export type QueueState = { - queue: Array<{ id: string; status: string; progress: number | null }>; + queue: Array<{ meta: DownloadableMetadata; status: string; progress: number | null }>; status: string; }; @@ -24,4 +25,4 @@ listen("update_queue", (event) => { listen("update_stats", (event) => { const stats = useStatsState(); stats.value = event.payload as StatsState; -}); +}); \ No newline at end of file diff --git a/composables/game.ts b/composables/game.ts index c2ffc0c..0335a7a 100644 --- a/composables/game.ts +++ b/composables/game.ts @@ -13,6 +13,7 @@ export type SerializedGameStatus = [ ]; export const parseStatus = (status: SerializedGameStatus): GameStatus => { + console.log(status); if (status[0]) { return { type: status[0].type, @@ -28,28 +29,29 @@ export const parseStatus = (status: SerializedGameStatus): GameStatus => { } }; -export const useGame = async (id: string) => { - if (!gameRegistry[id]) { +export const useGame = async (gameId: string) => { + if (!gameRegistry[gameId]) { const data: { game: Game; status: SerializedGameStatus } = await invoke( "fetch_game", { - id, + gameId, } ); - gameRegistry[id] = data.game; - if (!gameStatusRegistry[id]) { - gameStatusRegistry[id] = ref(parseStatus(data.status)); + gameRegistry[gameId] = data.game; + if (!gameStatusRegistry[gameId]) { + gameStatusRegistry[gameId] = ref(parseStatus(data.status)); - listen(`update_game/${id}`, (event) => { + listen(`update_game/${gameId}`, (event) => { const payload: { status: SerializedGameStatus; } = event.payload as any; - gameStatusRegistry[id].value = parseStatus(payload.status); + console.log(payload.status); + gameStatusRegistry[gameId].value = parseStatus(payload.status); }); } } - const game = gameRegistry[id]; - const status = gameStatusRegistry[id]; + const game = gameRegistry[gameId]; + const status = gameStatusRegistry[gameId]; return { game, status }; -}; +}; \ No newline at end of file diff --git a/pages/queue.vue b/pages/queue.vue index 52574dd..d78967c 100644 --- a/pages/queue.vue +++ b/pages/queue.vue @@ -14,19 +14,19 @@