diff --git a/src/main/ipcs/bs-mods-ipcs.ts b/src/main/ipcs/bs-mods-ipcs.ts index 627d541d..fd0cc1d9 100644 --- a/src/main/ipcs/bs-mods-ipcs.ts +++ b/src/main/ipcs/bs-mods-ipcs.ts @@ -1,6 +1,6 @@ import { BsModsManagerService } from "../services/mods/bs-mods-manager.service"; import { IpcService } from "../services/ipc.service"; -import { from, of } from "rxjs"; +import { from } from "rxjs"; const ipc = IpcService.getInstance(); @@ -34,8 +34,3 @@ ipc.on("bs-mods.uninstall-all-mods", (args, reply) => { reply(modsManager.uninstallAllMods(args)); }); -ipc.on("bs-mods.get-mods-grid-status", (_, reply) => { - const modsManager = BsModsManagerService.getInstance(); - reply(of(modsManager.getModsGridStatus())); -}) - diff --git a/src/main/ipcs/linux.ipcs.ts b/src/main/ipcs/linux.ipcs.ts index d40ad9fa..c1ac2387 100644 --- a/src/main/ipcs/linux.ipcs.ts +++ b/src/main/ipcs/linux.ipcs.ts @@ -9,3 +9,8 @@ ipc.on("linux.verify-proton-folder", (_, reply) => { reply(of(linuxService.verifyProtonPath())); }); +ipc.on("linux.get-wine-prefix-path", (_, reply) => { + const linuxService = LinuxService.getInstance(); + reply(of(linuxService.getWinePrefixPath())); +}); + diff --git a/src/main/services/mods/bs-mods-manager.service.ts b/src/main/services/mods/bs-mods-manager.service.ts index 95d66a0d..f127ecaf 100644 --- a/src/main/services/mods/bs-mods-manager.service.ts +++ b/src/main/services/mods/bs-mods-manager.service.ts @@ -19,7 +19,6 @@ import crypto from "crypto"; import { BsmZipExtractor } from "main/models/bsm-zip-extractor.class"; import { BsmShellLog, bsmSpawn } from "main/helpers/os.helpers"; import { BbmFullMod, BbmModVersion, ExternalMod } from "../../../shared/models/mods/mod.interface"; -import { ModsGridStatus } from "shared/models/mods/mod-ipc.model"; export class BsModsManagerService { private static instance: BsModsManagerService; @@ -565,18 +564,6 @@ export class BsModsManagerService { .finally(() => obs.complete()); }); } - - public getModsGridStatus(): ModsGridStatus { - if (process.platform === "linux") { - const wineprefix = this.linuxService.getWinePrefixPath(); - if (!wineprefix) { - log.error("Could not find BSManager WINEPREFIX path"); - return ModsGridStatus.NO_WINEPREFIX; - } - } - - return ModsGridStatus.OK; - } } const enum ModsInstallFolder { diff --git a/src/renderer/components/version-viewer/slides/mods/mods-slide.component.tsx b/src/renderer/components/version-viewer/slides/mods/mods-slide.component.tsx index 71a6d5fb..7068633a 100644 --- a/src/renderer/components/version-viewer/slides/mods/mods-slide.component.tsx +++ b/src/renderer/components/version-viewer/slides/mods/mods-slide.component.tsx @@ -226,20 +226,16 @@ export const ModsSlide = forwardRef(({ version, isActive, o return noop(); } - getAcceptDisclaimerKey() - .then(async (canLoad) => { - if (!canLoad) { - return onDisclamerDecline?.(); - } + getAcceptDisclaimerKey().then(async canLoad => { + if (!canLoad) { + return onDisclamerDecline?.(); + } - let status = ModsGridStatus.OK; - if (window.electron.platform === "linux") { - status = await modsManager.getModsGridStatus(); - } - setGridStatus(status); + const status = await modsManager.getModsGridStatus(); + setGridStatus(() => status); - loadMods(); - }); + loadMods(); + }); return () => { setMoreInfoMod(null); @@ -352,7 +348,7 @@ function ModStatus({ text, image, spin = false, children }: { text: string; imag return (
 - {t(text)} + {t(text)} {children}
); diff --git a/src/renderer/services/bs-mods-manager.service.ts b/src/renderer/services/bs-mods-manager.service.ts index 19ee418d..dd712cf9 100644 --- a/src/renderer/services/bs-mods-manager.service.ts +++ b/src/renderer/services/bs-mods-manager.service.ts @@ -9,6 +9,7 @@ import { ProgressionInterface } from "shared/models/progress-bar"; import { BbmFullMod, BbmModVersion } from "shared/models/mods/mod.interface"; import { logRenderError } from "renderer"; import { ModsGridStatus } from "shared/models/mods/mod-ipc.model"; +import { LinuxService } from "./linux.service"; export class BsModsManagerService { private static instance: BsModsManagerService; @@ -18,6 +19,7 @@ export class BsModsManagerService { private readonly ipcService: IpcService; private readonly progressBar: ProgressBarService; private readonly notifications: NotificationService; + private readonly linux: LinuxService public readonly isUninstalling$: BehaviorSubject = new BehaviorSubject(false); @@ -32,6 +34,7 @@ export class BsModsManagerService { this.ipcService = IpcService.getInstance(); this.progressBar = ProgressBarService.getInstance(); this.notifications = NotificationService.getInstance(); + this.linux = LinuxService.getInstance(); } public getAvailableMods(version: BSVersion): Observable { @@ -206,11 +209,16 @@ export class BsModsManagerService { } public async getModsGridStatus(): Promise { - return lastValueFrom(this.ipcService.sendV2("bs-mods.get-mods-grid-status")) - .catch(error => { - logRenderError(error); - return ModsGridStatus.UNKNOWN; - }); + + if(window.electron.platform === "linux"){ + const winePrefix = await lastValueFrom(this.linux.getWinePrefixPath()); + if(!winePrefix){ + logRenderError("Could not find BSManager WINEPREFIX path"); + return ModsGridStatus.NO_WINEPREFIX; + } + } + + return ModsGridStatus.OK; } } diff --git a/src/renderer/services/linux.service.ts b/src/renderer/services/linux.service.ts new file mode 100644 index 00000000..f08829a4 --- /dev/null +++ b/src/renderer/services/linux.service.ts @@ -0,0 +1,26 @@ +import { Observable } from "rxjs"; +import { IpcService } from "./ipc.service"; + +export class LinuxService { + + private static instance: LinuxService; + + public static getInstance(): LinuxService { + if (!LinuxService.instance) { + LinuxService.instance = new LinuxService(); + } + return LinuxService.instance; + } + + private readonly ipc: IpcService; + + private constructor() { + this.ipc = IpcService.getInstance(); + } + + public getWinePrefixPath(): Observable { + return this.ipc.sendV2("linux.get-wine-prefix-path"); + } + + +} diff --git a/src/shared/models/ipc/ipc-routes.ts b/src/shared/models/ipc/ipc-routes.ts index 70f2a6ba..db3748df 100644 --- a/src/shared/models/ipc/ipc-routes.ts +++ b/src/shared/models/ipc/ipc-routes.ts @@ -21,7 +21,6 @@ import { LocalBPList, LocalBPListsDetails } from "../playlists/local-playlist.mo import { StaticConfigGetIpcRequestResponse, StaticConfigKeys, StaticConfigSetIpcRequest } from "main/services/static-configuration.service"; import { BbmFullMod, BbmModVersion, ExternalMod } from "../mods/mod.interface"; import { OculusDownloadInfo } from "main/services/bs-version-download/bs-oculus-downloader.service"; -import { ModsGridStatus } from "../mods/mod-ipc.model"; export type IpcReplier = (data: Observable) => void; @@ -89,7 +88,6 @@ export interface IpcChannelMapping { "bs-mods.install-mods": { request: { mods: BbmFullMod[]; version: BSVersion }, response: Progression }; "bs-mods.uninstall-mods": { request: { mods: BbmFullMod[]; version: BSVersion }, response: Progression }; "bs-mods.uninstall-all-mods": { request: BSVersion, response: Progression }; - "bs-mods.get-mods-grid-status": { request: BSVersion, response: ModsGridStatus }; /* ** bs-playlist-ipcs ** */ "one-click-install-playlist": { request: string, response: Progression }; @@ -161,6 +159,7 @@ export interface IpcChannelMapping { /* ** linux.ipcs ** */ "linux.verify-proton-folder": { request: void, response: boolean }; + "linux.get-wine-prefix-path": { request: void, response: string }; /* ** oculus.ipcs ** */ "is-oculus-sideloaded-apps-enabled": { request: void, response: boolean };