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 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
);
}
};

View file

@ -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 */

View file

@ -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);
}),
];

View file

@ -71,8 +71,9 @@ declare global {
removeGame: (gameId: number) => Promise<void>;
deleteGameFolder: (gameId: number) => Promise<unknown>;
getGameByObjectID: (objectID: string) => Promise<Game | null>;
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<UserPreferences | null>;