From 77987181dec338a495e093d9346459eba6692aac Mon Sep 17 00:00:00 2001 From: silentrald Date: Wed, 23 Oct 2024 10:49:46 +0800 Subject: [PATCH] [feat-578] open steam common folder for selecting a proton folder --- src/main/ipcs/os-controls-ipcs.ts | 18 ++++++++++++++++-- .../setup/linux-setup-modal.component.tsx | 6 +++++- .../share-folders-modal.component.tsx | 4 +++- src/renderer/pages/settings-page.component.tsx | 6 +++++- src/shared/models/ipc/ipc-routes.ts | 2 +- 5 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/main/ipcs/os-controls-ipcs.ts b/src/main/ipcs/os-controls-ipcs.ts index 2ca355a3..5eaa7954 100644 --- a/src/main/ipcs/os-controls-ipcs.ts +++ b/src/main/ipcs/os-controls-ipcs.ts @@ -1,9 +1,10 @@ -import { shell, dialog, app, BrowserWindow } from "electron"; +import { shell, dialog, app, BrowserWindow, OpenDialogOptions } from "electron"; import { NotificationService } from "../services/notification.service"; import { IpcService } from "../services/ipc.service"; import { from, of } from "rxjs"; import { readFileSync } from "fs-extra"; import log from "electron-log"; +import path from "path"; // TODO IMPROVE WINDOW CONTROL BY USING WINDOW SERVICE @@ -19,7 +20,20 @@ ipc.on("open-dialog", (args, reply) => { }) ipc.on("choose-folder", (args, reply) => { - reply(from(dialog.showOpenDialog({ properties: ["openDirectory"], defaultPath: args ?? "" }))); + const options: OpenDialogOptions = { + properties: ["openDirectory"], + defaultPath: args?.defaultPath ?? "" + }; + + if (args?.showHidden) { + options.properties.push("showHiddenFiles"); + } + + if (args?.parent) { + options.defaultPath = path.join(app.getPath(args.parent), options.defaultPath); + } + + reply(from(dialog.showOpenDialog(options))); }); ipc.on("choose-file", async (args, reply) => { diff --git a/src/renderer/components/modal/modal-types/setup/linux-setup-modal.component.tsx b/src/renderer/components/modal/modal-types/setup/linux-setup-modal.component.tsx index c855a481..98a725fa 100644 --- a/src/renderer/components/modal/modal-types/setup/linux-setup-modal.component.tsx +++ b/src/renderer/components/modal/modal-types/setup/linux-setup-modal.component.tsx @@ -25,7 +25,11 @@ export const LinuxSetupModal: ModalComponent<{}, {}> = ({ resolver }) => { } const selectProtonPath = async () => { - const response = await lastValueFrom(ipcService.sendV2("choose-folder")); + const response = await lastValueFrom(ipcService.sendV2("choose-folder", { + parent: "home", + defaultPath: ".local/share/Steam/steamapps/common", + showHidden: true, + })); if (response.canceled || !response.filePaths?.length) { return; } diff --git a/src/renderer/components/modal/modal-types/share-folders-modal.component.tsx b/src/renderer/components/modal/modal-types/share-folders-modal.component.tsx index 3538179e..b685a3fe 100644 --- a/src/renderer/components/modal/modal-types/share-folders-modal.component.tsx +++ b/src/renderer/components/modal/modal-types/share-folders-modal.component.tsx @@ -47,7 +47,9 @@ export const ShareFoldersModal: ModalComponent = ({ options: {d const addFolder = async () => { const versionPath = await lastValueFrom(versionManager.getVersionPath(data)); - const folder = await lastValueFrom(ipc.sendV2("choose-folder", versionPath)); + const folder = await lastValueFrom(ipc.sendV2("choose-folder", { + defaultPath: versionPath + })); if (!folder || folder.canceled || !folder.filePaths?.length) { return; diff --git a/src/renderer/pages/settings-page.component.tsx b/src/renderer/pages/settings-page.component.tsx index 0254814d..4637c61b 100644 --- a/src/renderer/pages/settings-page.component.tsx +++ b/src/renderer/pages/settings-page.component.tsx @@ -185,7 +185,11 @@ export function SettingsPage() { } try { - const pathResponse = await lastValueFrom(ipcService.sendV2("choose-folder")); + const pathResponse = await lastValueFrom(ipcService.sendV2("choose-folder", { + parent: "home", + defaultPath: ".local/share/Steam/steamapps/common", + showHidden: true, + })); if ( pathResponse.canceled || !pathResponse.filePaths diff --git a/src/shared/models/ipc/ipc-routes.ts b/src/shared/models/ipc/ipc-routes.ts index 89eac79c..8ab6e082 100644 --- a/src/shared/models/ipc/ipc-routes.ts +++ b/src/shared/models/ipc/ipc-routes.ts @@ -124,7 +124,7 @@ export interface IpcChannelMapping { /* ** os-controls-ipcs ** */ "new-window": { request: string, response: void }; "open-dialog": { request: OpenDialogOptions, response: OpenDialogReturnValue }; - "choose-folder": { request: string, response: OpenDialogReturnValue }; + "choose-folder": { request: { defaultPath?: string, parent?: "home", showHidden?: boolean }, response: OpenDialogReturnValue }; "choose-file": { request: string, response: OpenDialogReturnValue } "choose-image": { request: { multiple?: boolean, base64?: boolean }, response: string[] } "window.progression": { request: number, response: void };