diff --git a/.python-version b/.python-version new file mode 100644 index 00000000..94329086 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.9.20 diff --git a/src/main/events/library/close-game.ts b/src/main/events/library/close-game.ts index 9c431d06..48cb681b 100644 --- a/src/main/events/library/close-game.ts +++ b/src/main/events/library/close-game.ts @@ -24,7 +24,11 @@ const closeGame = async ( if (!game) return; const gameProcess = processes.find((runningProcess) => { - return runningProcess.exe === game.executablePath; + if (process.platform === "linux") { + return runningProcess.name === game.executablePath?.split("/").at(-1); + } else { + return runningProcess.exe === game.executablePath; + } }); if (gameProcess) { diff --git a/src/main/services/download/types.ts b/src/main/services/download/types.ts index fd8009a2..3ddaff39 100644 --- a/src/main/services/download/types.ts +++ b/src/main/services/download/types.ts @@ -35,4 +35,5 @@ export interface LibtorrentPayload { export interface ProcessPayload { exe: string; pid: number; + name: string; } diff --git a/src/main/services/process-watcher.ts b/src/main/services/process-watcher.ts index 51b39bbe..fd9bb148 100644 --- a/src/main/services/process-watcher.ts +++ b/src/main/services/process-watcher.ts @@ -14,6 +14,20 @@ export const gamesPlaytime = new Map< const TICKS_TO_UPDATE_API = 120; let currentTick = 1; +const getSystemProcessSet = async () => { + const processes = await PythonInstance.getProcessList(); + + if (process.platform === "linux") + return new Set(processes.map((process) => process.name)); + return new Set(processes.map((process) => process.exe)); +}; + +const getExecutable = (game: Game) => { + if (process.platform === "linux") + return game.executablePath?.split("/").at(-1); + return game.executablePath; +}; + export const watchProcesses = async () => { const games = await gameRepository.find({ where: { @@ -23,14 +37,15 @@ export const watchProcesses = async () => { }); if (games.length === 0) return; - const processes = await PythonInstance.getProcessList(); - const processSet = new Set(processes.map((process) => process.exe)); + const processSet = await getSystemProcessSet(); for (const game of games) { - const executablePath = game.executablePath!; + const executable = getExecutable(game); - const gameProcess = processSet.has(executablePath); + if (!executable) continue; + + const gameProcess = processSet.has(executable); if (gameProcess) { if (gamesPlaytime.has(game.id)) { diff --git a/torrent-client/main.py b/torrent-client/main.py index d62150b8..0e65c564 100644 --- a/torrent-client/main.py +++ b/torrent-client/main.py @@ -60,7 +60,7 @@ class Handler(BaseHTTPRequestHandler): self.end_headers() return - process_list = [proc.info for proc in psutil.process_iter(['exe', 'pid', 'username'])] + process_list = [proc.info for proc in psutil.process_iter(['exe', 'pid', 'name'])] self.send_response(200) self.send_header("Content-type", "application/json")