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 da7fd1e8..37a57f6f 100644 --- a/src/renderer/src/context/game-details/game-details.context.tsx +++ b/src/renderer/src/context/game-details/game-details.context.tsx @@ -224,8 +224,11 @@ export function GameDetailsContextProvider({ return window.electron.getDefaultDownloadsPath(); }; - const selectGameExecutable = async () => { - const downloadsPath = await getDownloadsPath(); + const selectGameExecutable = async ( + gameInstallerFolderIfExists?: string + ) => { + const downloadsPath = + gameInstallerFolderIfExists ?? (await getDownloadsPath()); return window.electron .showOpenDialog({ diff --git a/src/renderer/src/context/game-details/game-details.context.types.ts b/src/renderer/src/context/game-details/game-details.context.types.ts index 5cecd7b3..af9892c2 100644 --- a/src/renderer/src/context/game-details/game-details.context.types.ts +++ b/src/renderer/src/context/game-details/game-details.context.types.ts @@ -24,7 +24,9 @@ export interface GameDetailsContext { hasNSFWContentBlocked: boolean; lastDownloadedOption: GameRepack | null; setGameColor: React.Dispatch>; - selectGameExecutable: () => Promise; + selectGameExecutable: ( + gameInstallerFolderIfExists?: string + ) => Promise; updateGame: () => Promise; setShowRepacksModal: React.Dispatch>; setShowGameOptionsModal: React.Dispatch>; diff --git a/src/renderer/src/pages/game-details/hero/hero-panel-actions.tsx b/src/renderer/src/pages/game-details/hero/hero-panel-actions.tsx index 37e0ff1f..47b251eb 100644 --- a/src/renderer/src/pages/game-details/hero/hero-panel-actions.tsx +++ b/src/renderer/src/pages/game-details/hero/hero-panel-actions.tsx @@ -7,7 +7,7 @@ import { PlusCircleIcon, } from "@primer/octicons-react"; import { Button } from "@renderer/components"; -import { useDownload, useLibrary } from "@renderer/hooks"; +import { useAppSelector, useDownload, useLibrary } from "@renderer/hooks"; import { useContext, useState } from "react"; import { useTranslation } from "react-i18next"; import { gameDetailsContext } from "@renderer/context"; @@ -19,6 +19,10 @@ export function HeroPanelActions() { const { isGameDeleting } = useDownload(); + const userPreferences = useAppSelector( + (state) => state.userPreferences.value + ); + const { game, repacks, @@ -92,7 +96,25 @@ export function HeroPanelActions() { return; } - const gameExecutablePath = await selectGameExecutable(); + let gameInstallerFolderIfExists + + if (game && game.folderName) { + let downloadsPath = await window.electron.getDefaultDownloadsPath(); + if (userPreferences?.downloadsPath) + downloadsPath = userPreferences.downloadsPath; + + const folderSeparator = + window.electron.platform == "win32" ? "\\" : "/"; + + gameInstallerFolderIfExists = + (game.downloadPath ?? downloadsPath) + + folderSeparator + + game.folderName!; + } + + const gameExecutablePath = await selectGameExecutable( + gameInstallerFolderIfExists + ); if (gameExecutablePath) window.electron.openGame( game.shop,