mirror of
https://github.com/Zagrios/bs-manager.git
synced 2026-07-03 14:08:25 +02:00
Backend should be as frontend-agnostic as possible
This commit is contained in:
@@ -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()));
|
||||
})
|
||||
|
||||
|
||||
@@ -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()));
|
||||
});
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -226,20 +226,16 @@ export const ModsSlide = forwardRef<ModsSlideRef, Props>(({ 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 (
|
||||
<div className="w-full h-full flex flex-col items-center justify-center text-gray-800 dark:text-gray-200">
|
||||
<img className={`w-32 h-32 ${spin ? "spin-loading" : ""}`} src={image} alt=" " />
|
||||
<span className="text-xl mt-3 italic">{t(text)}</span>
|
||||
<span className="text-xl mt-3 italic text-center">{t(text)}</span>
|
||||
{children}
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -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<boolean> = 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<BbmFullMod[]> {
|
||||
@@ -206,11 +209,16 @@ export class BsModsManagerService {
|
||||
}
|
||||
|
||||
public async getModsGridStatus(): Promise<ModsGridStatus> {
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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<string> {
|
||||
return this.ipc.sendV2("linux.get-wine-prefix-path");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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<T> = (data: Observable<T>) => 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<DownloadPlaylistProgressionData> };
|
||||
@@ -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 };
|
||||
|
||||
Reference in New Issue
Block a user