From 34e439bd66804ca8a41f433faea72c447043879d Mon Sep 17 00:00:00 2001 From: Zamitto <167933696+zamitto@users.noreply.github.com> Date: Sun, 2 Feb 2025 20:15:27 -0300 Subject: [PATCH] fix: reset lastPacket on signout --- .../events/library/add-game-to-library.ts | 4 +-- src/main/level/index.ts | 1 - src/main/level/sublevels/index.ts | 1 - .../services/download/download-manager.ts | 2 ++ .../library-sync/merge-with-remote-games.ts | 28 +++++++++---------- src/main/services/steam.ts | 11 ++++++-- src/preload/index.ts | 4 +-- src/renderer/src/app.tsx | 2 +- src/renderer/src/declaration.d.ts | 2 +- src/renderer/src/features/download-slice.ts | 4 +-- src/renderer/src/hooks/use-download.ts | 2 +- src/types/steam.types.ts | 1 + 12 files changed, 34 insertions(+), 28 deletions(-) diff --git a/src/main/events/library/add-game-to-library.ts b/src/main/events/library/add-game-to-library.ts index e27709e9..62993348 100644 --- a/src/main/events/library/add-game-to-library.ts +++ b/src/main/events/library/add-game-to-library.ts @@ -46,9 +46,9 @@ const addGameToLibrary = async ( await gamesSublevel.put(levelKeys.game(shop, objectId), game); - updateLocalUnlockedAchivements(game!); + updateLocalUnlockedAchivements(game); - createGame(game!).catch(() => {}); + createGame(game).catch(() => {}); } }; diff --git a/src/main/level/index.ts b/src/main/level/index.ts index 90a34be3..50df860e 100644 --- a/src/main/level/index.ts +++ b/src/main/level/index.ts @@ -1,3 +1,2 @@ export { db } from "./level"; - export * from "./sublevels"; diff --git a/src/main/level/sublevels/index.ts b/src/main/level/sublevels/index.ts index a96a464c..3f0e840e 100644 --- a/src/main/level/sublevels/index.ts +++ b/src/main/level/sublevels/index.ts @@ -2,5 +2,4 @@ export * from "./downloads"; export * from "./games"; export * from "./game-shop-cache"; export * from "./game-achievements"; - export * from "./keys"; diff --git a/src/main/services/download/download-manager.ts b/src/main/services/download/download-manager.ts index 5c19c1b1..a069deea 100644 --- a/src/main/services/download/download-manager.ts +++ b/src/main/services/download/download-manager.ts @@ -234,6 +234,8 @@ export class DownloadManager { }); WindowManager.mainWindow?.setProgressBar(-1); + WindowManager.mainWindow?.webContents.send("on-download-progress", null); + if (downloadKey === this.downloadingGameId) { this.downloadingGameId = null; } diff --git a/src/main/services/library-sync/merge-with-remote-games.ts b/src/main/services/library-sync/merge-with-remote-games.ts index 2b6eebb0..c3f57c53 100644 --- a/src/main/services/library-sync/merge-with-remote-games.ts +++ b/src/main/services/library-sync/merge-with-remote-games.ts @@ -35,22 +35,20 @@ export const mergeWithRemoteGames = async () => { name: "getById", }); - if (steamGame) { - const iconUrl = steamGame?.clientIcon - ? steamUrlBuilder.icon(game.objectId, steamGame.clientIcon) - : null; + const iconUrl = steamGame?.clientIcon + ? steamUrlBuilder.icon(game.objectId, steamGame.clientIcon) + : null; - gamesSublevel.put(levelKeys.game(game.shop, game.objectId), { - objectId: game.objectId, - title: steamGame?.name, - remoteId: game.id, - shop: game.shop, - iconUrl, - lastTimePlayed: game.lastTimePlayed, - playTimeInMilliseconds: game.playTimeInMilliseconds, - isDeleted: false, - }); - } + gamesSublevel.put(levelKeys.game(game.shop, game.objectId), { + objectId: game.objectId, + title: steamGame?.name, + remoteId: game.id, + shop: game.shop, + iconUrl, + lastTimePlayed: game.lastTimePlayed, + playTimeInMilliseconds: game.playTimeInMilliseconds, + isDeleted: false, + }); } } }) diff --git a/src/main/services/steam.ts b/src/main/services/steam.ts index 1d8ed2d9..18cd8d11 100644 --- a/src/main/services/steam.ts +++ b/src/main/services/steam.ts @@ -21,11 +21,18 @@ export const getSteamAppDetails = async ( }); return axios - .get( + .get( `http://store.steampowered.com/api/appdetails?${searchParams.toString()}` ) .then((response) => { - if (response.data[objectId].success) return response.data[objectId].data; + if (response.data[objectId].success) { + const data = response.data[objectId].data; + return { + ...data, + objectId, + }; + } + return null; }) .catch((err) => { diff --git a/src/preload/index.ts b/src/preload/index.ts index 439327cd..e1393269 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -32,10 +32,10 @@ contextBridge.exposeInMainWorld("electron", { ipcRenderer.invoke("pauseGameSeed", shop, objectId), resumeGameSeed: (shop: GameShop, objectId: string) => ipcRenderer.invoke("resumeGameSeed", shop, objectId), - onDownloadProgress: (cb: (value: DownloadProgress) => void) => { + onDownloadProgress: (cb: (value: DownloadProgress | null) => void) => { const listener = ( _event: Electron.IpcRendererEvent, - value: DownloadProgress + value: DownloadProgress | null ) => cb(value); ipcRenderer.on("on-download-progress", listener); return () => ipcRenderer.removeListener("on-download-progress", listener); diff --git a/src/renderer/src/app.tsx b/src/renderer/src/app.tsx index 2ec917fb..650d4ca0 100644 --- a/src/renderer/src/app.tsx +++ b/src/renderer/src/app.tsx @@ -84,7 +84,7 @@ export function App() { useEffect(() => { const unsubscribe = window.electron.onDownloadProgress( (downloadProgress) => { - if (downloadProgress.progress === 1) { + if (downloadProgress?.progress === 1) { clearDownload(); updateLibrary(); return; diff --git a/src/renderer/src/declaration.d.ts b/src/renderer/src/declaration.d.ts index c1923562..ab485359 100644 --- a/src/renderer/src/declaration.d.ts +++ b/src/renderer/src/declaration.d.ts @@ -50,7 +50,7 @@ declare global { pauseGameSeed: (shop: GameShop, objectId: string) => Promise; resumeGameSeed: (shop: GameShop, objectId: string) => Promise; onDownloadProgress: ( - cb: (value: DownloadProgress) => void + cb: (value: DownloadProgress | null) => void ) => () => Electron.IpcRenderer; onSeedingStatus: ( cb: (value: SeedingStatus[]) => void diff --git a/src/renderer/src/features/download-slice.ts b/src/renderer/src/features/download-slice.ts index cc7c40ea..cb638cda 100644 --- a/src/renderer/src/features/download-slice.ts +++ b/src/renderer/src/features/download-slice.ts @@ -18,9 +18,9 @@ export const downloadSlice = createSlice({ name: "download", initialState, reducers: { - setLastPacket: (state, action: PayloadAction) => { + setLastPacket: (state, action: PayloadAction) => { state.lastPacket = action.payload; - if (!state.gameId) state.gameId = action.payload.gameId; + if (!state.gameId && action.payload) state.gameId = action.payload.gameId; }, clearDownload: (state) => { state.lastPacket = null; diff --git a/src/renderer/src/hooks/use-download.ts b/src/renderer/src/hooks/use-download.ts index b84ac515..49a033c9 100644 --- a/src/renderer/src/hooks/use-download.ts +++ b/src/renderer/src/hooks/use-download.ts @@ -114,7 +114,7 @@ export function useDownload() { pauseSeeding, resumeSeeding, clearDownload: () => dispatch(clearDownload()), - setLastPacket: (packet: DownloadProgress) => + setLastPacket: (packet: DownloadProgress | null) => dispatch(setLastPacket(packet)), }; } diff --git a/src/types/steam.types.ts b/src/types/steam.types.ts index 0792664e..fb5aef6e 100644 --- a/src/types/steam.types.ts +++ b/src/types/steam.types.ts @@ -25,6 +25,7 @@ export interface SteamMovies { export interface SteamAppDetails { name: string; + steam_appid: number; detailed_description: string; about_the_game: string; short_description: string;