From e18200d79628da6009fb83108050c46bd4dd637e Mon Sep 17 00:00:00 2001 From: Magrid Date: Wed, 24 Apr 2024 20:21:37 +0200 Subject: [PATCH 01/13] fix french translation --- src/locales/fr/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locales/fr/translation.json b/src/locales/fr/translation.json index e3d2bd3d..154186be 100644 --- a/src/locales/fr/translation.json +++ b/src/locales/fr/translation.json @@ -25,7 +25,7 @@ "downloads": "Téléchargements", "search_results": "Résultats de la recherche", "settings": "Paramètres", - "home": "Maison" + "home": "Accueil" }, "bottom_panel": { "no_downloads_in_progress": "Aucun téléchargement en cours", From ecac6376d75da72db0732fd73a14e8a8d1e19cf9 Mon Sep 17 00:00:00 2001 From: Zamitto Date: Tue, 23 Apr 2024 21:10:15 -0300 Subject: [PATCH 02/13] feat: use psList on windows (~25ms vs ~320ms) --- src/main/helpers/ps.ts | 7 ------- src/main/services/process-watcher.ts | 17 +++++++++-------- yarn.lock | 2 +- 3 files changed, 10 insertions(+), 16 deletions(-) diff --git a/src/main/helpers/ps.ts b/src/main/helpers/ps.ts index f7ce3391..5a30a9ed 100644 --- a/src/main/helpers/ps.ts +++ b/src/main/helpers/ps.ts @@ -1,12 +1,5 @@ import psList from "ps-list"; -import { tasklist } from "tasklist"; export const getProcesses = async () => { - if (process.platform === "win32") { - return tasklist().then((tasks) => - tasks.map((task) => ({ ...task, name: task.imageName })) - ); - } - return psList(); }; diff --git a/src/main/services/process-watcher.ts b/src/main/services/process-watcher.ts index 96244a60..c67f6815 100644 --- a/src/main/services/process-watcher.ts +++ b/src/main/services/process-watcher.ts @@ -1,7 +1,7 @@ import path from "node:path"; import { IsNull, Not } from "typeorm"; - +import { exec } from "child_process" import { gameRepository } from "@main/repository"; import { getProcesses } from "@main/helpers"; import { WindowManager } from "./window-manager"; @@ -14,13 +14,21 @@ export const startProcessWatcher = async () => { // eslint-disable-next-line no-constant-condition while (true) { + await sleep(sleepTime); + const games = await gameRepository.find({ where: { executablePath: Not(IsNull()), }, }); + if (games.length == 0) { + continue; + } + + console.time("getProcesses") const processes = await getProcesses(); + console.timeEnd("getProcesses") for (const game of games) { const gameProcess = processes.find((runningProcess) => { @@ -55,15 +63,10 @@ export const startProcessWatcher = async () => { gameRepository.update(game.id, { lastTimePlayed: new Date().toUTCString(), }); - - gamesPlaytime.set(game.id, performance.now()); - await sleep(sleepTime); - continue; } gamesPlaytime.set(game.id, performance.now()); - await sleep(sleepTime); continue; } @@ -73,8 +76,6 @@ export const startProcessWatcher = async () => { WindowManager.mainWindow.webContents.send("on-game-close", game.id); } } - - await sleep(sleepTime); } } }; diff --git a/yarn.lock b/yarn.lock index 8b36bcdb..c6450c09 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8866,7 +8866,7 @@ proxy-from-env@^1.1.0: ps-list@^8.1.1: version "8.1.1" - resolved "https://registry.npmjs.org/ps-list/-/ps-list-8.1.1.tgz" + resolved "https://registry.yarnpkg.com/ps-list/-/ps-list-8.1.1.tgz#9ff1952b26a9a07fcc05270407e60544237ae581" integrity sha512-OPS9kEJYVmiO48u/B9qneqhkMvgCxT+Tm28VCEJpheTpl8cJ0ffZRRNgS5mrQRTrX5yRTpaJ+hRDeefXYmmorQ== psl@^1.1.33: From 2675641f7bd70cd22e293d5800d065d5eed6c413 Mon Sep 17 00:00:00 2001 From: Zamitto Date: Tue, 23 Apr 2024 21:42:35 -0300 Subject: [PATCH 03/13] feat: add total loop time log --- src/main/services/process-watcher.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/services/process-watcher.ts b/src/main/services/process-watcher.ts index c67f6815..89e49b51 100644 --- a/src/main/services/process-watcher.ts +++ b/src/main/services/process-watcher.ts @@ -16,6 +16,7 @@ export const startProcessWatcher = async () => { while (true) { await sleep(sleepTime); + console.log("loopTotalTime") const games = await gameRepository.find({ where: { executablePath: Not(IsNull()), @@ -31,13 +32,13 @@ export const startProcessWatcher = async () => { console.timeEnd("getProcesses") for (const game of games) { - const gameProcess = processes.find((runningProcess) => { - const basename = path.win32.basename(game.executablePath); + const basename = path.win32.basename(game.executablePath); const basenameWithoutExtension = path.win32.basename( game.executablePath, path.extname(game.executablePath) ); + const gameProcess = processes.find((runningProcess) => { if (process.platform === "win32") { return runningProcess.name === basename; } From 1620437d1e107520f7c69d63147a9d4f4df32147 Mon Sep 17 00:00:00 2001 From: Zamitto Date: Tue, 23 Apr 2024 21:44:09 -0300 Subject: [PATCH 04/13] format with prettier --- src/main/services/process-watcher.ts | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/main/services/process-watcher.ts b/src/main/services/process-watcher.ts index 89e49b51..2ed46cd0 100644 --- a/src/main/services/process-watcher.ts +++ b/src/main/services/process-watcher.ts @@ -1,7 +1,6 @@ import path from "node:path"; import { IsNull, Not } from "typeorm"; -import { exec } from "child_process" import { gameRepository } from "@main/repository"; import { getProcesses } from "@main/helpers"; import { WindowManager } from "./window-manager"; @@ -16,7 +15,7 @@ export const startProcessWatcher = async () => { while (true) { await sleep(sleepTime); - console.log("loopTotalTime") + console.log("loopTotalTime"); const games = await gameRepository.find({ where: { executablePath: Not(IsNull()), @@ -27,16 +26,16 @@ export const startProcessWatcher = async () => { continue; } - console.time("getProcesses") + console.time("getProcesses"); const processes = await getProcesses(); - console.timeEnd("getProcesses") + console.timeEnd("getProcesses"); for (const game of games) { const basename = path.win32.basename(game.executablePath); - const basenameWithoutExtension = path.win32.basename( - game.executablePath, - path.extname(game.executablePath) - ); + const basenameWithoutExtension = path.win32.basename( + game.executablePath, + path.extname(game.executablePath) + ); const gameProcess = processes.find((runningProcess) => { if (process.platform === "win32") { From 854b23e4ef164d396ada17bb6cedc6af5fd9b067 Mon Sep 17 00:00:00 2001 From: Zamitto Date: Tue, 23 Apr 2024 22:21:07 -0300 Subject: [PATCH 05/13] correctly print time logs --- src/main/services/process-watcher.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/main/services/process-watcher.ts b/src/main/services/process-watcher.ts index 2ed46cd0..c040373a 100644 --- a/src/main/services/process-watcher.ts +++ b/src/main/services/process-watcher.ts @@ -15,7 +15,7 @@ export const startProcessWatcher = async () => { while (true) { await sleep(sleepTime); - console.log("loopTotalTime"); + console.time("loopTotalTime"); const games = await gameRepository.find({ where: { executablePath: Not(IsNull()), @@ -66,16 +66,13 @@ export const startProcessWatcher = async () => { } gamesPlaytime.set(game.id, performance.now()); - - continue; - } - - if (gamesPlaytime.has(game.id)) { + } else if (gamesPlaytime.has(game.id)) { gamesPlaytime.delete(game.id); if (WindowManager.mainWindow) { WindowManager.mainWindow.webContents.send("on-game-close", game.id); } } } + console.timeEnd("loopTotalTime"); } }; From 0bbd7d013fcf3cf0355783196c61be8115470ac2 Mon Sep 17 00:00:00 2001 From: Zamitto Date: Thu, 25 Apr 2024 21:40:46 -0300 Subject: [PATCH 06/13] feat: run fastfile binary from resources folder feat: run process watcher each 300ms feat: add build step to copy fastlist from node_modules feat: create postinstall script to copy fastlist binary remove debug logs --- .gitignore | 3 +++ package.json | 3 ++- postinstall.py | 5 +++++ src/main/events/library/close-game.ts | 3 ++- src/main/helpers/ps.ts | 31 +++++++++++++++++++++++++-- src/main/services/process-watcher.ts | 9 +++----- 6 files changed, 44 insertions(+), 10 deletions(-) create mode 100644 postinstall.py diff --git a/.gitignore b/.gitignore index 0d0363c8..360a16b4 100644 --- a/.gitignore +++ b/.gitignore @@ -106,3 +106,6 @@ resources/dist/ # Sentry Config File .env.sentry-build-plugin + +# Fastlist binary +resources/fastlist.exe diff --git a/package.json b/package.json index 84853898..381dd285 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,8 @@ "make": "electron-forge make", "publish": "electron-forge publish", "lint": "eslint .", - "format": "prettier . --write" + "format": "prettier . --write", + "postinstall": "python3 ./postinstall.py" }, "devDependencies": { "@electron-forge/cli": "^7.3.0", diff --git a/postinstall.py b/postinstall.py new file mode 100644 index 00000000..3fb85d8d --- /dev/null +++ b/postinstall.py @@ -0,0 +1,5 @@ +import shutil +import platform + +if platform.system() == "Windows": + shutil.copy("node_modules/ps-list/vendor/fastlist-0.3.0-x64.exe", "resources/fastlist.exe") diff --git a/src/main/events/library/close-game.ts b/src/main/events/library/close-game.ts index 0d556925..586253b9 100644 --- a/src/main/events/library/close-game.ts +++ b/src/main/events/library/close-game.ts @@ -4,12 +4,13 @@ import { gameRepository } from "@main/repository"; import { registerEvent } from "../register-event"; import { getProcesses } from "@main/helpers"; +import { app } from "electron"; const closeGame = async ( _event: Electron.IpcMainInvokeEvent, gameId: number ) => { - const processes = await getProcesses(); + const processes = await getProcesses(app.isPackaged); const game = await gameRepository.findOne({ where: { id: gameId } }); const gameProcess = processes.find((runningProcess) => { diff --git a/src/main/helpers/ps.ts b/src/main/helpers/ps.ts index 5a30a9ed..449d103f 100644 --- a/src/main/helpers/ps.ts +++ b/src/main/helpers/ps.ts @@ -1,5 +1,32 @@ import psList from "ps-list"; +import path from "node:path"; +import childProcess from "node:child_process"; +import { promisify } from "node:util"; -export const getProcesses = async () => { - return psList(); +const TEN_MEGABYTES = 1000 * 1000 * 10; +const execFile = promisify(childProcess.execFile); + +export const getProcesses = async (isPackaged: boolean) => { + if (process.platform == "win32") { + const binaryPath = isPackaged + ? path.join(process.resourcesPath, "fastlist.exe") + : path.join(__dirname, "..", "..", "resources", "fastlist.exe"); + + const { stdout } = await execFile(binaryPath, { + maxBuffer: TEN_MEGABYTES, + windowsHide: true, + }); + + return stdout + .trim() + .split("\r\n") + .map((line) => line.split("\t")) + .map(([pid, ppid, name]) => ({ + pid: Number.parseInt(pid, 10), + ppid: Number.parseInt(ppid, 10), + name, + })); + } else { + return psList(); + } }; diff --git a/src/main/services/process-watcher.ts b/src/main/services/process-watcher.ts index c040373a..0668c1db 100644 --- a/src/main/services/process-watcher.ts +++ b/src/main/services/process-watcher.ts @@ -4,18 +4,18 @@ import { IsNull, Not } from "typeorm"; import { gameRepository } from "@main/repository"; import { getProcesses } from "@main/helpers"; import { WindowManager } from "./window-manager"; +import { app } from "electron"; const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); export const startProcessWatcher = async () => { - const sleepTime = 100; + const sleepTime = 300; const gamesPlaytime = new Map(); // eslint-disable-next-line no-constant-condition while (true) { await sleep(sleepTime); - console.time("loopTotalTime"); const games = await gameRepository.find({ where: { executablePath: Not(IsNull()), @@ -26,9 +26,7 @@ export const startProcessWatcher = async () => { continue; } - console.time("getProcesses"); - const processes = await getProcesses(); - console.timeEnd("getProcesses"); + const processes = await getProcesses(app.isPackaged); for (const game of games) { const basename = path.win32.basename(game.executablePath); @@ -73,6 +71,5 @@ export const startProcessWatcher = async () => { } } } - console.timeEnd("loopTotalTime"); } }; From fd6ab62e13a584198af6345c5c5b5186b8e7ddfd Mon Sep 17 00:00:00 2001 From: Zamitto <> Date: Fri, 26 Apr 2024 00:12:17 -0300 Subject: [PATCH 07/13] add fastlist.exe to extraResources --- forge.config.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/forge.config.ts b/forge.config.ts index 94cfac57..4e6cdb21 100644 --- a/forge.config.ts +++ b/forge.config.ts @@ -30,6 +30,7 @@ const config: ForgeConfig = { executableName: "Hydra", extraResource: [ "./resources/hydra.db", + "./resources/fastlist.exe", "./resources/icon_tray.png", "./resources/dist", ], From 7f7d4a1db3ce94636200493d0899dd0830d2dd0f Mon Sep 17 00:00:00 2001 From: Zamitto Date: Fri, 26 Apr 2024 00:22:28 -0300 Subject: [PATCH 08/13] chage fastlis.exe location to not conflict with linux build --- forge.config.ts | 1 - postinstall.py | 6 +++++- src/main/helpers/ps.ts | 4 ++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/forge.config.ts b/forge.config.ts index 4e6cdb21..94cfac57 100644 --- a/forge.config.ts +++ b/forge.config.ts @@ -30,7 +30,6 @@ const config: ForgeConfig = { executableName: "Hydra", extraResource: [ "./resources/hydra.db", - "./resources/fastlist.exe", "./resources/icon_tray.png", "./resources/dist", ], diff --git a/postinstall.py b/postinstall.py index 3fb85d8d..c55dca60 100644 --- a/postinstall.py +++ b/postinstall.py @@ -1,5 +1,9 @@ import shutil import platform +import os if platform.system() == "Windows": - shutil.copy("node_modules/ps-list/vendor/fastlist-0.3.0-x64.exe", "resources/fastlist.exe") + if not os.path.exists("resources/dist"): + os.mkdir("resources/dist") + + shutil.copy("node_modules/ps-list/vendor/fastlist-0.3.0-x64.exe", "resources/dist/fastlist.exe") diff --git a/src/main/helpers/ps.ts b/src/main/helpers/ps.ts index 449d103f..3d83cc7d 100644 --- a/src/main/helpers/ps.ts +++ b/src/main/helpers/ps.ts @@ -9,8 +9,8 @@ const execFile = promisify(childProcess.execFile); export const getProcesses = async (isPackaged: boolean) => { if (process.platform == "win32") { const binaryPath = isPackaged - ? path.join(process.resourcesPath, "fastlist.exe") - : path.join(__dirname, "..", "..", "resources", "fastlist.exe"); + ? path.join(process.resourcesPath, "dist", "fastlist.exe") + : path.join(__dirname, "..", "..", "resources", "dist", "fastlist.exe"); const { stdout } = await execFile(binaryPath, { maxBuffer: TEN_MEGABYTES, From 2363a6d0b29cb17078875d1cf23df59bacba01fd Mon Sep 17 00:00:00 2001 From: Zamitto Date: Fri, 26 Apr 2024 22:39:25 -0300 Subject: [PATCH 09/13] feat: remove unneeded gitignore --- .gitignore | 3 --- 1 file changed, 3 deletions(-) diff --git a/.gitignore b/.gitignore index 360a16b4..0d0363c8 100644 --- a/.gitignore +++ b/.gitignore @@ -106,6 +106,3 @@ resources/dist/ # Sentry Config File .env.sentry-build-plugin - -# Fastlist binary -resources/fastlist.exe From e15479cd6acdfa957ea731b3450d93e346d12dcb Mon Sep 17 00:00:00 2001 From: Zamitto Date: Fri, 26 Apr 2024 22:42:07 -0300 Subject: [PATCH 10/13] feat: remove tasklist ts declaration and remove tasklist dependency --- package.json | 1 - src/declaration.d.ts | 13 ------------ yarn.lock | 50 -------------------------------------------- 3 files changed, 64 deletions(-) delete mode 100644 src/declaration.d.ts diff --git a/package.json b/package.json index 381dd285..39029b30 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,6 @@ "react-redux": "^9.1.0", "react-router-dom": "^6.22.3", "sqlite3": "^5.1.7", - "tasklist": "^5.0.0", "tough-cookie": "^4.1.3", "typeorm": "^0.3.20", "update-electron-app": "^3.0.0", diff --git a/src/declaration.d.ts b/src/declaration.d.ts deleted file mode 100644 index 26dfcc27..00000000 --- a/src/declaration.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -declare module "tasklist" { - interface Task { - imageName: string; - pid: number; - sessionName: string; - sessionNumber: number; - memUsage: number; - } - - function tasklist(): Promise; - - export { tasklist }; -} diff --git a/yarn.lock b/yarn.lock index c6450c09..78c336e0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4611,31 +4611,6 @@ csstype@^3.0.2, csstype@^3.0.7: resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== -csv-generate@^3.4.3: - version "3.4.3" - resolved "https://registry.npmjs.org/csv-generate/-/csv-generate-3.4.3.tgz" - integrity sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw== - -csv-parse@^4.16.3: - version "4.16.3" - resolved "https://registry.npmjs.org/csv-parse/-/csv-parse-4.16.3.tgz" - integrity sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg== - -csv-stringify@^5.6.5: - version "5.6.5" - resolved "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.6.5.tgz" - integrity sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A== - -csv@^5.5.0: - version "5.5.3" - resolved "https://registry.npmjs.org/csv/-/csv-5.5.3.tgz" - integrity sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g== - dependencies: - csv-generate "^3.4.3" - csv-parse "^4.16.3" - csv-stringify "^5.6.5" - stream-transform "^2.1.3" - cycle@1.0.x: version "1.0.3" resolved "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz" @@ -7936,11 +7911,6 @@ minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: minipass "^3.0.0" yallist "^4.0.0" -mixme@^0.5.1: - version "0.5.10" - resolved "https://registry.npmjs.org/mixme/-/mixme-0.5.10.tgz" - integrity sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q== - mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: version "0.5.3" resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz" @@ -9463,11 +9433,6 @@ schema-utils@^4.0.0: ajv-formats "^2.1.1" ajv-keywords "^5.1.0" -sec@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/sec/-/sec-2.0.0.tgz" - integrity sha512-uq35HWa7mG6YyojrduMXjF8UhOySEf3X0V1uMpSOBYUF09xAMnJaKNSmWXeE3mN7NfJTpNUkmGa6nIpEBMN8Xw== - select-hose@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz" @@ -9882,13 +9847,6 @@ statuses@2.0.1: resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== -stream-transform@^2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/stream-transform/-/stream-transform-2.1.3.tgz" - integrity sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ== - dependencies: - mixme "^0.5.1" - "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" @@ -10144,14 +10102,6 @@ tar@^6.0.2, tar@^6.0.5, tar@^6.1.11, tar@^6.1.2: mkdirp "^1.0.3" yallist "^4.0.0" -tasklist@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/tasklist/-/tasklist-5.0.0.tgz" - integrity sha512-qPB4J6pseXRqdxAFT1GhlvDPv4FHxWkXs8QVYQWIqusGwn7UXVKOoYu09DZuYWe1K7T5iusHfSoKrv8k9+RfxA== - dependencies: - csv "^5.5.0" - sec "^2.0.0" - temp-dir@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz" From 9b9eabd8011fef3b99b5d6cefdc0524ece053004 Mon Sep 17 00:00:00 2001 From: Zamitto Date: Fri, 26 Apr 2024 23:02:21 -0300 Subject: [PATCH 11/13] migrate postinstall from py to js --- .eslintignore | 1 + package.json | 2 +- postinstall.js | 9 +++++++++ postinstall.py | 9 --------- 4 files changed, 11 insertions(+), 10 deletions(-) create mode 100644 .eslintignore create mode 100644 postinstall.js delete mode 100644 postinstall.py diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..0854696d --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +postinstall.js \ No newline at end of file diff --git a/package.json b/package.json index 39029b30..b8396713 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "publish": "electron-forge publish", "lint": "eslint .", "format": "prettier . --write", - "postinstall": "python3 ./postinstall.py" + "postinstall": "node ./postinstall.js" }, "devDependencies": { "@electron-forge/cli": "^7.3.0", diff --git a/postinstall.js b/postinstall.js new file mode 100644 index 00000000..63b6399e --- /dev/null +++ b/postinstall.js @@ -0,0 +1,9 @@ +const fs = require("fs") + +if (process.platform === "win32"){ + if (!fs.existsSync("resources/dist")) { + fs.mkdirSync("resources/dist") + } + + fs.copyFileSync("node_modules/ps-list/vendor/fastlist-0.3.0-x64.exe", "resources/dist/fastlist.exe") +} diff --git a/postinstall.py b/postinstall.py deleted file mode 100644 index c55dca60..00000000 --- a/postinstall.py +++ /dev/null @@ -1,9 +0,0 @@ -import shutil -import platform -import os - -if platform.system() == "Windows": - if not os.path.exists("resources/dist"): - os.mkdir("resources/dist") - - shutil.copy("node_modules/ps-list/vendor/fastlist-0.3.0-x64.exe", "resources/dist/fastlist.exe") From a4edff36191a80b4503305368540290782879174 Mon Sep 17 00:00:00 2001 From: Zamitto Date: Fri, 26 Apr 2024 23:02:53 -0300 Subject: [PATCH 12/13] use app.isPackaged directly inside getProcesses function --- src/main/events/library/close-game.ts | 3 +-- src/main/helpers/ps.ts | 5 +++-- src/main/services/process-watcher.ts | 3 +-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/events/library/close-game.ts b/src/main/events/library/close-game.ts index 586253b9..0d556925 100644 --- a/src/main/events/library/close-game.ts +++ b/src/main/events/library/close-game.ts @@ -4,13 +4,12 @@ import { gameRepository } from "@main/repository"; import { registerEvent } from "../register-event"; import { getProcesses } from "@main/helpers"; -import { app } from "electron"; const closeGame = async ( _event: Electron.IpcMainInvokeEvent, gameId: number ) => { - const processes = await getProcesses(app.isPackaged); + const processes = await getProcesses(); const game = await gameRepository.findOne({ where: { id: gameId } }); const gameProcess = processes.find((runningProcess) => { diff --git a/src/main/helpers/ps.ts b/src/main/helpers/ps.ts index 3d83cc7d..dbc11f09 100644 --- a/src/main/helpers/ps.ts +++ b/src/main/helpers/ps.ts @@ -2,13 +2,14 @@ import psList from "ps-list"; import path from "node:path"; import childProcess from "node:child_process"; import { promisify } from "node:util"; +import { app } from "electron"; const TEN_MEGABYTES = 1000 * 1000 * 10; const execFile = promisify(childProcess.execFile); -export const getProcesses = async (isPackaged: boolean) => { +export const getProcesses = async () => { if (process.platform == "win32") { - const binaryPath = isPackaged + const binaryPath = app.isPackaged ? path.join(process.resourcesPath, "dist", "fastlist.exe") : path.join(__dirname, "..", "..", "resources", "dist", "fastlist.exe"); diff --git a/src/main/services/process-watcher.ts b/src/main/services/process-watcher.ts index 0668c1db..0d699165 100644 --- a/src/main/services/process-watcher.ts +++ b/src/main/services/process-watcher.ts @@ -4,7 +4,6 @@ import { IsNull, Not } from "typeorm"; import { gameRepository } from "@main/repository"; import { getProcesses } from "@main/helpers"; import { WindowManager } from "./window-manager"; -import { app } from "electron"; const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); @@ -26,7 +25,7 @@ export const startProcessWatcher = async () => { continue; } - const processes = await getProcesses(app.isPackaged); + const processes = await getProcesses(); for (const game of games) { const basename = path.win32.basename(game.executablePath); From bcfa3bb795906bb17e1a8529358362a425a629ee Mon Sep 17 00:00:00 2001 From: Zamitto Date: Fri, 26 Apr 2024 23:04:57 -0300 Subject: [PATCH 13/13] add new line to .eslintignore --- .eslintignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.eslintignore b/.eslintignore index 0854696d..289e7a42 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1 +1 @@ -postinstall.js \ No newline at end of file +postinstall.js