mirror of
https://github.com/hydralauncher/hydra.git
synced 2025-03-09 15:40:26 +00:00
feat: process watcher send list of running process
This commit is contained in:
parent
e56a8209e1
commit
e933cec888
4 changed files with 22 additions and 27 deletions
|
@ -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
|
||||||
|
);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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);
|
||||||
}),
|
}),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
5
src/renderer/src/declaration.d.ts
vendored
5
src/renderer/src/declaration.d.ts
vendored
|
@ -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>;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue