mirror of
https://github.com/Zagrios/bs-manager.git
synced 2026-07-03 14:08:25 +02:00
Add Proton path setting
This commit is contained in:
committed by
Pierce Thompson
parent
3cfc59982b
commit
12a8a49ccb
@@ -15,6 +15,10 @@ ipc.on("choose-folder", (args, reply) => {
|
||||
reply(from(dialog.showOpenDialog({ properties: ["openDirectory"], defaultPath: args ?? "" })));
|
||||
});
|
||||
|
||||
ipc.on<string>("choose-file", async (args, reply) => {
|
||||
reply(from(dialog.showOpenDialog({ properties: ["openFile"], defaultPath: args ?? "" })));
|
||||
});
|
||||
|
||||
ipc.on("window.progression",(args, reply, sender) => {
|
||||
BrowserWindow.fromWebContents(sender)?.setProgressBar(args / 100);
|
||||
reply(of(undefined));
|
||||
|
||||
@@ -4,6 +4,7 @@ import { ProviderPlatform } from "shared/models/provider-platform.enum";
|
||||
const sep = process.platform === ProviderPlatform.WINDOWS ? "\\" : "/";
|
||||
|
||||
contextBridge.exposeInMainWorld("electron", {
|
||||
platform: process.platform,
|
||||
ipcRenderer: {
|
||||
sendMessage(channel: string, args: unknown[]) {
|
||||
ipcRenderer.send(channel, args);
|
||||
|
||||
@@ -8,15 +8,20 @@ type Props = {
|
||||
minorTitle?: string;
|
||||
description?: string;
|
||||
children?: ReactNode;
|
||||
os?: string;
|
||||
};
|
||||
|
||||
export function SettingContainer({ id, className, title, minorTitle, description, children }: Props) {
|
||||
export function SettingContainer({ id, className, title, minorTitle, description, children, os }: Props) {
|
||||
const t = useTranslation();
|
||||
|
||||
if (os && os !== window.electron.platform) {
|
||||
return <></>;
|
||||
}
|
||||
|
||||
return (
|
||||
<div id={id} className={className || "relative mb-5"}>
|
||||
{title && <h1 className="font-bold text-2xl mb-1 tracking-wide">{t(title)}</h1>}
|
||||
{minorTitle && <h2 className="font-bold mb-1 tracking-wide text-gray-600 dark:text-gray-300">{t(minorTitle)}</h2>}
|
||||
{title && <h1 className="mb-1 text-2xl font-bold tracking-wide">{t(title)}</h1>}
|
||||
{minorTitle && <h2 className="mb-1 font-bold tracking-wide text-gray-600 dark:text-gray-300">{t(minorTitle)}</h2>}
|
||||
{description && <p className="mb-3 text-sm text-gray-600 dark:text-gray-400">{t(description)}</p>}
|
||||
{children}
|
||||
</div>
|
||||
|
||||
@@ -42,7 +42,7 @@ import { BsDownloaderService } from "renderer/services/bs-version-download/bs-do
|
||||
import { AutoUpdaterService } from "renderer/services/auto-updater.service";
|
||||
import BeatWaitingImg from "../../../assets/images/apngs/beat-waiting.png";
|
||||
import { logRenderError } from "renderer";
|
||||
|
||||
import { BSLauncherService } from "renderer/services/bs-launcher.service";
|
||||
|
||||
export function SettingsPage() {
|
||||
|
||||
@@ -51,6 +51,7 @@ export function SettingsPage() {
|
||||
const ipcService = useService(IpcService);
|
||||
const modalService = useService(ModalService);
|
||||
const bsDownloader = useService(BsDownloaderService);
|
||||
const bsLauncher = useService(BSLauncherService);
|
||||
const steamDownloader = useService(SteamDownloaderService);
|
||||
const progressBarService = useService(ProgressBarService);
|
||||
const notificationService = useService(NotificationService);
|
||||
@@ -85,6 +86,7 @@ export function SettingsPage() {
|
||||
const downloadStore = useObservable(() => bsDownloader.defaultStore$);
|
||||
|
||||
const [installationFolder, setInstallationFolder] = useState(null);
|
||||
const [protonPath, setProtonPath] = useState(bsLauncher.getProtonPath());
|
||||
const [showSupporters, setShowSupporters] = useState(false);
|
||||
const [mapDeepLinksEnabled, setMapDeepLinksEnabled] = useState(false);
|
||||
const [playlistsDeepLinkEnabled, setPlaylistsDeepLinkEnabled] = useState(false);
|
||||
@@ -156,6 +158,20 @@ export function SettingsPage() {
|
||||
clearTimeout(timeoutId);
|
||||
};
|
||||
|
||||
const setDefaultProtonPath = () => {
|
||||
if (!progressBarService.require()) {
|
||||
return;
|
||||
}
|
||||
|
||||
ipcService.sendV2<{ canceled: boolean; filePaths: string[] }>("choose-file").toPromise().then(res => {
|
||||
if (!res.canceled && res.filePaths?.length) {
|
||||
const protonPath = res.filePaths[0];
|
||||
setProtonPath(protonPath);
|
||||
bsLauncher.setProtonPath(protonPath);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
const setDefaultInstallationFolder = () => {
|
||||
if (!progressBarService.require()) {
|
||||
return;
|
||||
@@ -282,7 +298,16 @@ export function SettingsPage() {
|
||||
<span className="block text-ellipsis overflow-hidden min-w-0" title={installationFolder}>
|
||||
{installationFolder}
|
||||
</span>
|
||||
<BsmButton onClick={setDefaultInstallationFolder} className="shrink-0 whitespace-nowrap mr-2 px-2 font-bold italic text-sm rounded-md" text="pages.settings.installation-folder.choose-folder" withBar={false} />
|
||||
<BsmButton onClick={setDefaultInstallationFolder} className="shrink-1 whitespace-nowrap mr-2 px-2 font-bold italic text-sm rounded-md" text="pages.settings.installation-folder.choose-folder" withBar={false} />
|
||||
</div>
|
||||
</SettingContainer>
|
||||
|
||||
<SettingContainer os="linux" title="pages.settings.proton-path.title" description="pages.settings.proton-path.description">
|
||||
<div className="relative flex items-center justify-between w-full h-8 bg-light-main-color-1 dark:bg-main-color-1 rounded-md pl-2 py-1">
|
||||
<span className="block text-ellipsis overflow-hidden min-w-0 whitespace-nowrap" title={protonPath}>
|
||||
{protonPath}
|
||||
</span>
|
||||
<BsmButton onClick={setDefaultProtonPath} className="shrink-0 whitespace-nowrap mr-2 px-2 font-bold italic text-sm rounded-md" text="pages.settings.proton-path.choose-file" withBar={false} />
|
||||
</div>
|
||||
</SettingContainer>
|
||||
|
||||
|
||||
Vendored
+1
@@ -1,6 +1,7 @@
|
||||
declare global {
|
||||
interface Window {
|
||||
electron: {
|
||||
platform: "win32"|"linux"|"darwin",
|
||||
ipcRenderer: {
|
||||
sendMessage(channel: string, args: any): void;
|
||||
on(channel: string, func: (...args: any) => void): (() => void) | undefined;
|
||||
|
||||
@@ -23,6 +23,8 @@ export class BSLauncherService {
|
||||
|
||||
public readonly versionRunning$: BehaviorSubject<BSVersion> = new BehaviorSubject(null);
|
||||
|
||||
private readonly PROTON_PATH_KEY = "protonPath";
|
||||
|
||||
public static getInstance(){
|
||||
if(!BSLauncherService.instance){ BSLauncherService.instance = new BSLauncherService(); }
|
||||
return BSLauncherService.instance;
|
||||
@@ -36,6 +38,14 @@ export class BSLauncherService {
|
||||
this.modals = ModalService.getInstance();
|
||||
}
|
||||
|
||||
public setProtonPath(protonPath: string|undefined): void {
|
||||
this.config.set(this.PROTON_PATH_KEY, protonPath);
|
||||
}
|
||||
|
||||
public getProtonPath(): string|undefined {
|
||||
return this.config.get<string>(this.PROTON_PATH_KEY);
|
||||
}
|
||||
|
||||
private notRewindBackupOculus(): boolean{
|
||||
return this.config.get<boolean>("not-rewind-backup-oculus");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user