diff --git a/src/main/events/helpers/parse-executable-path.ts b/src/main/events/helpers/parse-executable-path.ts new file mode 100644 index 00000000..184a32ca --- /dev/null +++ b/src/main/events/helpers/parse-executable-path.ts @@ -0,0 +1,10 @@ +import { shell } from "electron"; + +export const parseExecutablePath = (path: string) => { + if (process.platform === "win32" && path.endsWith(".lnk")) { + const { target } = shell.readShortcutLink(path); + + return target; + } + return path; +}; diff --git a/src/main/events/library/open-game.ts b/src/main/events/library/open-game.ts index d838ce0c..de68cc53 100644 --- a/src/main/events/library/open-game.ts +++ b/src/main/events/library/open-game.ts @@ -2,15 +2,18 @@ import { gameRepository } from "@main/repository"; import { registerEvent } from "../register-event"; import { shell } from "electron"; +import { parseExecutablePath } from "../helpers/parse-executable-path"; const openGame = async ( _event: Electron.IpcMainInvokeEvent, gameId: number, executablePath: string ) => { - await gameRepository.update({ id: gameId }, { executablePath }); + const parsedPath = parseExecutablePath(executablePath); - shell.openPath(executablePath); + await gameRepository.update({ id: gameId }, { executablePath: parsedPath }); + + shell.openPath(parsedPath); }; registerEvent("openGame", openGame); diff --git a/src/main/events/library/update-executable-path.ts b/src/main/events/library/update-executable-path.ts index 6546e8b9..9be36ab1 100644 --- a/src/main/events/library/update-executable-path.ts +++ b/src/main/events/library/update-executable-path.ts @@ -1,6 +1,7 @@ import { gameRepository } from "@main/repository"; import { registerEvent } from "../register-event"; +import { parseExecutablePath } from "../helpers/parse-executable-path"; const updateExecutablePath = async ( _event: Electron.IpcMainInvokeEvent, @@ -12,7 +13,7 @@ const updateExecutablePath = async ( id, }, { - executablePath, + executablePath: parseExecutablePath(executablePath), } ); }; diff --git a/src/main/helpers/ps.ts b/src/main/helpers/ps.ts index 380b5116..5b326dfa 100644 --- a/src/main/helpers/ps.ts +++ b/src/main/helpers/ps.ts @@ -11,7 +11,15 @@ export const getProcesses = async () => { if (process.platform == "win32") { const binaryPath = app.isPackaged ? path.join(process.resourcesPath, "fastlist.exe") - : path.join(__dirname, "..", "..", "fastlist.exe"); + : path.join( + __dirname, + "..", + "..", + "node_modules", + "ps-list", + "vendor", + "fastlist-0.3.0-x64.exe" + ); const { stdout } = await execFile(binaryPath, { maxBuffer: TEN_MEGABYTES, diff --git a/src/renderer/src/context/game-details/game-details.context.tsx b/src/renderer/src/context/game-details/game-details.context.tsx index 19d2cc72..fd3e4600 100644 --- a/src/renderer/src/context/game-details/game-details.context.tsx +++ b/src/renderer/src/context/game-details/game-details.context.tsx @@ -140,7 +140,7 @@ export function GameDetailsContextProvider({ filters: [ { name: "Game executable", - extensions: ["exe"], + extensions: ["exe", "lnk"], }, ], })