From e933cec888293e9650f8d508f3034845691d31e6 Mon Sep 17 00:00:00 2001 From: Zamitto <167933696+zamitto@users.noreply.github.com> Date: Wed, 19 Jun 2024 14:37:26 -0300 Subject: [PATCH] feat: process watcher send list of running process --- src/main/services/process-watcher.ts | 16 ++++++++-------- src/preload/index.ts | 16 +++++----------- .../game-details/game-details.context.tsx | 12 ++++++------ src/renderer/src/declaration.d.ts | 5 +++-- 4 files changed, 22 insertions(+), 27 deletions(-) diff --git a/src/main/services/process-watcher.ts b/src/main/services/process-watcher.ts index ea1b6355..a9ac18d0 100644 --- a/src/main/services/process-watcher.ts +++ b/src/main/services/process-watcher.ts @@ -40,10 +40,6 @@ export const watchProcesses = async () => { const zero = gamesPlaytime.get(game.id) ?? 0; const delta = performance.now() - zero; - if (WindowManager.mainWindow) { - WindowManager.mainWindow.webContents.send("on-playtime", game.id); - } - await gameRepository.update(game.id, { playTimeInMilliseconds: game.playTimeInMilliseconds + delta, lastTimePlayed: new Date(), @@ -53,10 +49,14 @@ export const watchProcesses = async () => { gamesPlaytime.set(game.id, performance.now()); } else if (gamesPlaytime.has(game.id)) { gamesPlaytime.delete(game.id); - - if (WindowManager.mainWindow) { - WindowManager.mainWindow.webContents.send("on-game-close", game.id); - } } } + + if (WindowManager.mainWindow) { + const gamesRunningIds = Array.from(gamesPlaytime.keys()); + WindowManager.mainWindow.webContents.send( + "on-games-running", + gamesRunningIds + ); + } }; diff --git a/src/preload/index.ts b/src/preload/index.ts index 1fe259c8..f649c543 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -84,17 +84,11 @@ contextBridge.exposeInMainWorld("electron", { ipcRenderer.invoke("deleteGameFolder", gameId), getGameByObjectID: (objectID: string) => ipcRenderer.invoke("getGameByObjectID", objectID), - onPlaytime: (cb: (gameId: number) => void) => { - const listener = (_event: Electron.IpcRendererEvent, gameId: number) => - cb(gameId); - ipcRenderer.on("on-playtime", listener); - return () => ipcRenderer.removeListener("on-playtime", listener); - }, - onGameClose: (cb: (gameId: number) => void) => { - const listener = (_event: Electron.IpcRendererEvent, gameId: number) => - cb(gameId); - ipcRenderer.on("on-game-close", listener); - return () => ipcRenderer.removeListener("on-game-close", listener); + onGamesRunning: (cb: (gamesId: number[]) => void) => { + const listener = (_event: Electron.IpcRendererEvent, gamesId: number[]) => + cb(gamesId); + ipcRenderer.on("on-games-running", listener); + return () => ipcRenderer.removeListener("on-games-running", listener); }, /* Hardware */ diff --git a/src/renderer/src/context/game-details/game-details.context.tsx b/src/renderer/src/context/game-details/game-details.context.tsx index ad32f987..fa8309f3 100644 --- a/src/renderer/src/context/game-details/game-details.context.tsx +++ b/src/renderer/src/context/game-details/game-details.context.tsx @@ -110,14 +110,14 @@ export function GameDetailsContextProvider({ useEffect(() => { const listeners = [ - window.electron.onGameClose(() => { - if (isGameRunning) setisGameRunning(false); - }), - window.electron.onPlaytime((gameId) => { - if (gameId === game?.id) { - if (!isGameRunning) setisGameRunning(true); + window.electron.onGamesRunning((gamesIds) => { + const newIsGameRunning = !!game?.id && gamesIds.includes(game.id); + + if (isGameRunning != newIsGameRunning) { updateGame(); } + + setisGameRunning(newIsGameRunning); }), ]; diff --git a/src/renderer/src/declaration.d.ts b/src/renderer/src/declaration.d.ts index 968a7a72..a3ff0ad1 100644 --- a/src/renderer/src/declaration.d.ts +++ b/src/renderer/src/declaration.d.ts @@ -71,8 +71,9 @@ declare global { removeGame: (gameId: number) => Promise; deleteGameFolder: (gameId: number) => Promise; getGameByObjectID: (objectID: string) => Promise; - onPlaytime: (cb: (gameId: number) => void) => () => Electron.IpcRenderer; - onGameClose: (cb: (gameId: number) => void) => () => Electron.IpcRenderer; + onGamesRunning: ( + cb: (gamesId: number[]) => void + ) => () => Electron.IpcRenderer; /* User preferences */ getUserPreferences: () => Promise;