feat: process watcher send list of running process

This commit is contained in:
Zamitto 2024-06-19 14:37:26 -03:00
parent e56a8209e1
commit e933cec888
4 changed files with 22 additions and 27 deletions

View file

@ -40,10 +40,6 @@ export const watchProcesses = async () => {
const zero = gamesPlaytime.get(game.id) ?? 0; const zero = gamesPlaytime.get(game.id) ?? 0;
const delta = performance.now() - zero; const delta = performance.now() - zero;
if (WindowManager.mainWindow) {
WindowManager.mainWindow.webContents.send("on-playtime", game.id);
}
await gameRepository.update(game.id, { await gameRepository.update(game.id, {
playTimeInMilliseconds: game.playTimeInMilliseconds + delta, playTimeInMilliseconds: game.playTimeInMilliseconds + delta,
lastTimePlayed: new Date(), lastTimePlayed: new Date(),
@ -53,10 +49,14 @@ export const watchProcesses = async () => {
gamesPlaytime.set(game.id, performance.now()); gamesPlaytime.set(game.id, performance.now());
} else if (gamesPlaytime.has(game.id)) { } else if (gamesPlaytime.has(game.id)) {
gamesPlaytime.delete(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
);
}
}; };

View file

@ -84,17 +84,11 @@ contextBridge.exposeInMainWorld("electron", {
ipcRenderer.invoke("deleteGameFolder", gameId), ipcRenderer.invoke("deleteGameFolder", gameId),
getGameByObjectID: (objectID: string) => getGameByObjectID: (objectID: string) =>
ipcRenderer.invoke("getGameByObjectID", objectID), ipcRenderer.invoke("getGameByObjectID", objectID),
onPlaytime: (cb: (gameId: number) => void) => { onGamesRunning: (cb: (gamesId: number[]) => void) => {
const listener = (_event: Electron.IpcRendererEvent, gameId: number) => const listener = (_event: Electron.IpcRendererEvent, gamesId: number[]) =>
cb(gameId); cb(gamesId);
ipcRenderer.on("on-playtime", listener); ipcRenderer.on("on-games-running", listener);
return () => ipcRenderer.removeListener("on-playtime", listener); return () => ipcRenderer.removeListener("on-games-running", 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);
}, },
/* Hardware */ /* Hardware */

View file

@ -110,14 +110,14 @@ export function GameDetailsContextProvider({
useEffect(() => { useEffect(() => {
const listeners = [ const listeners = [
window.electron.onGameClose(() => { window.electron.onGamesRunning((gamesIds) => {
if (isGameRunning) setisGameRunning(false); const newIsGameRunning = !!game?.id && gamesIds.includes(game.id);
}),
window.electron.onPlaytime((gameId) => { if (isGameRunning != newIsGameRunning) {
if (gameId === game?.id) {
if (!isGameRunning) setisGameRunning(true);
updateGame(); updateGame();
} }
setisGameRunning(newIsGameRunning);
}), }),
]; ];

View file

@ -71,8 +71,9 @@ declare global {
removeGame: (gameId: number) => Promise<void>; removeGame: (gameId: number) => Promise<void>;
deleteGameFolder: (gameId: number) => Promise<unknown>; deleteGameFolder: (gameId: number) => Promise<unknown>;
getGameByObjectID: (objectID: string) => Promise<Game | null>; getGameByObjectID: (objectID: string) => Promise<Game | null>;
onPlaytime: (cb: (gameId: number) => void) => () => Electron.IpcRenderer; onGamesRunning: (
onGameClose: (cb: (gameId: number) => void) => () => Electron.IpcRenderer; cb: (gamesId: number[]) => void
) => () => Electron.IpcRenderer;
/* User preferences */ /* User preferences */
getUserPreferences: () => Promise<UserPreferences | null>; getUserPreferences: () => Promise<UserPreferences | null>;