Backend should be as frontend-agnostic as possible

This commit is contained in:
Zagrios
2025-02-10 22:37:32 +01:00
parent a54809ffb5
commit 41628d4e6e
7 changed files with 55 additions and 39 deletions
@@ -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;
}
}
+26
View File
@@ -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");
}
}