From c9afd6553655ec29a5f4c907753dc6558302dd66 Mon Sep 17 00:00:00 2001 From: Moyasee Date: Sat, 24 Jan 2026 19:56:55 +0200 Subject: [PATCH] refactor: simplify game entry preparation in download processes by consolidating logic into a helper function --- .../events/torrenting/add-game-to-queue.ts | 34 ++------------ .../events/torrenting/start-game-download.ts | 34 ++------------ src/main/helpers/download-game-helper.ts | 45 +++++++++++++++++++ src/main/helpers/index.ts | 1 + 4 files changed, 52 insertions(+), 62 deletions(-) create mode 100644 src/main/helpers/download-game-helper.ts diff --git a/src/main/events/torrenting/add-game-to-queue.ts b/src/main/events/torrenting/add-game-to-queue.ts index 4ebb447c..f57cfaf6 100644 --- a/src/main/events/torrenting/add-game-to-queue.ts +++ b/src/main/events/torrenting/add-game-to-queue.ts @@ -2,14 +2,9 @@ import { registerEvent } from "../register-event"; import type { Download, StartGameDownloadPayload } from "@types"; import { DownloadManager, HydraApi, logger } from "@main/services"; import { createGame } from "@main/services/library-sync"; -import { - downloadsSublevel, - gamesShopAssetsSublevel, - gamesSublevel, - levelKeys, -} from "@main/level"; +import { downloadsSublevel, gamesSublevel, levelKeys } from "@main/level"; import { parseBytes } from "@shared"; -import { handleDownloadError } from "@main/helpers"; +import { handleDownloadError, prepareGameEntry } from "@main/helpers"; const addGameToQueue = async ( _event: Electron.IpcMainInvokeEvent, @@ -54,30 +49,7 @@ const addGameToQueue = async ( return handleDownloadError(err, downloader); } - const game = await gamesSublevel.get(gameKey); - const gameAssets = await gamesShopAssetsSublevel.get(gameKey); - - await downloadsSublevel.del(gameKey); - - if (game) { - await gamesSublevel.put(gameKey, { - ...game, - isDeleted: false, - }); - } else { - await gamesSublevel.put(gameKey, { - title, - iconUrl: gameAssets?.iconUrl ?? null, - libraryHeroImageUrl: gameAssets?.libraryHeroImageUrl ?? null, - logoImageUrl: gameAssets?.logoImageUrl ?? null, - objectId, - shop, - remoteId: null, - playTimeInMilliseconds: 0, - lastTimePlayed: null, - isDeleted: false, - }); - } + await prepareGameEntry({ gameKey, title, objectId, shop }); try { await downloadsSublevel.put(gameKey, download); diff --git a/src/main/events/torrenting/start-game-download.ts b/src/main/events/torrenting/start-game-download.ts index 852a6d86..71a0cc00 100644 --- a/src/main/events/torrenting/start-game-download.ts +++ b/src/main/events/torrenting/start-game-download.ts @@ -3,13 +3,8 @@ import type { Download, StartGameDownloadPayload } from "@types"; import { DownloadManager, HydraApi, logger } from "@main/services"; import { createGame } from "@main/services/library-sync"; import { parseBytes } from "@shared"; -import { - downloadsSublevel, - gamesShopAssetsSublevel, - gamesSublevel, - levelKeys, -} from "@main/level"; -import { handleDownloadError } from "@main/helpers"; +import { downloadsSublevel, gamesSublevel, levelKeys } from "@main/level"; +import { handleDownloadError, prepareGameEntry } from "@main/helpers"; const startGameDownload = async ( _event: Electron.IpcMainInvokeEvent, @@ -39,30 +34,7 @@ const startGameDownload = async ( } } - const game = await gamesSublevel.get(gameKey); - const gameAssets = await gamesShopAssetsSublevel.get(gameKey); - - await downloadsSublevel.del(gameKey); - - if (game) { - await gamesSublevel.put(gameKey, { - ...game, - isDeleted: false, - }); - } else { - await gamesSublevel.put(gameKey, { - title, - iconUrl: gameAssets?.iconUrl ?? null, - libraryHeroImageUrl: gameAssets?.libraryHeroImageUrl ?? null, - logoImageUrl: gameAssets?.logoImageUrl ?? null, - objectId, - shop, - remoteId: null, - playTimeInMilliseconds: 0, - lastTimePlayed: null, - isDeleted: false, - }); - } + await prepareGameEntry({ gameKey, title, objectId, shop }); await DownloadManager.cancelDownload(gameKey); diff --git a/src/main/helpers/download-game-helper.ts b/src/main/helpers/download-game-helper.ts new file mode 100644 index 00000000..fc779351 --- /dev/null +++ b/src/main/helpers/download-game-helper.ts @@ -0,0 +1,45 @@ +import { + downloadsSublevel, + gamesShopAssetsSublevel, + gamesSublevel, +} from "@main/level"; +import type { GameShop } from "@types"; + +interface PrepareGameEntryParams { + gameKey: string; + title: string; + objectId: string; + shop: GameShop; +} + +export const prepareGameEntry = async ({ + gameKey, + title, + objectId, + shop, +}: PrepareGameEntryParams): Promise => { + const game = await gamesSublevel.get(gameKey); + const gameAssets = await gamesShopAssetsSublevel.get(gameKey); + + await downloadsSublevel.del(gameKey); + + if (game) { + await gamesSublevel.put(gameKey, { + ...game, + isDeleted: false, + }); + } else { + await gamesSublevel.put(gameKey, { + title, + iconUrl: gameAssets?.iconUrl ?? null, + libraryHeroImageUrl: gameAssets?.libraryHeroImageUrl ?? null, + logoImageUrl: gameAssets?.logoImageUrl ?? null, + objectId, + shop, + remoteId: null, + playTimeInMilliseconds: 0, + lastTimePlayed: null, + isDeleted: false, + }); + } +}; diff --git a/src/main/helpers/index.ts b/src/main/helpers/index.ts index f75bd469..c942cb5b 100644 --- a/src/main/helpers/index.ts +++ b/src/main/helpers/index.ts @@ -95,3 +95,4 @@ export const getThemeSoundPath = ( export * from "./reg-parser"; export * from "./download-error-handler"; +export * from "./download-game-helper";