[bugfix] show error when BSManager can't connect to beatmods

This commit is contained in:
silentrald
2025-02-08 20:44:09 +08:00
parent a54809ffb5
commit 7fafbb316e
6 changed files with 27 additions and 11 deletions
+1
View File
@@ -133,6 +133,7 @@
"mods-not-available": "No mods are available yet for this version of Beat Saber",
"status": {
"no-wineprefix": "Could not find BSManager WINEPREFIX path. Please launch Beat Saber in BSManager first.",
"beatmods-down": "Beatmods is currently unreachable. Please retry later. If the issue persists, inform us on Discord/GitHub.",
"unknown": "An unknown error occurred ¯\\_(ツ)_/¯"
},
"buttons": {
+3 -3
View File
@@ -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();
@@ -36,6 +36,6 @@ ipc.on("bs-mods.uninstall-all-mods", (args, reply) => {
ipc.on("bs-mods.get-mods-grid-status", (_, reply) => {
const modsManager = BsModsManagerService.getInstance();
reply(of(modsManager.getModsGridStatus()));
})
reply(from(modsManager.getModsGridStatus()));
});
@@ -26,6 +26,17 @@ export class BeatModsApiService {
this.requestService = RequestService.getInstance();
}
public async isUp(): Promise<boolean> {
try {
// The data in status can be dropped
await this.requestService.getJSON<{}>(`${this.MODS_REPO_API_URL}/status`);
return true;
} catch (error) {
log.error("Could not connect to beatmods", error);
return false;
}
}
private getVersionModsUrl(version: BSVersion): string {
const platform: BbmPlatform = version.oculus || version.metadata?.store === BsStore.OCULUS ? BbmPlatform.OculusPC : BbmPlatform.SteamPC;
return `${this.MODS_REPO_API_URL}/mods?status=verified&gameVersion=${version.BSVersion}&gameName=BeatSaber&platform=${platform}`;
@@ -566,7 +566,7 @@ export class BsModsManagerService {
});
}
public getModsGridStatus(): ModsGridStatus {
public async getModsGridStatus(): Promise<ModsGridStatus> {
if (process.platform === "linux") {
const wineprefix = this.linuxService.getWinePrefixPath();
if (!wineprefix) {
@@ -575,6 +575,12 @@ export class BsModsManagerService {
}
}
const beatModsUp = await this.beatModsApi.isUp();
if (!beatModsUp) {
return ModsGridStatus.BEATMODS_DOWN;
}
return ModsGridStatus.OK;
}
}
@@ -9,7 +9,7 @@ import BeatWaitingImg from "../../../../../../assets/images/apngs/beat-waiting.p
import BeatConflictImg from "../../../../../../assets/images/apngs/beat-conflict.png";
import { useObservable } from "renderer/hooks/use-observable.hook";
import { lastValueFrom } from "rxjs";
import { useTranslation, useTranslationV2 } from "renderer/hooks/use-translation.hook";
import { useTranslationV2 } from "renderer/hooks/use-translation.hook";
import { LinkOpenerService } from "renderer/services/link-opener.service";
import { ModalExitCode, ModalService } from "renderer/services/modale.service";
import { ModsDisclaimerModal } from "renderer/components/modal/modal-types/mods-disclaimer-modal.component";
@@ -232,10 +232,7 @@ export const ModsSlide = forwardRef<ModsSlideRef, Props>(({ version, isActive, o
return onDisclamerDecline?.();
}
let status = ModsGridStatus.OK;
if (window.electron.platform === "linux") {
status = await modsManager.getModsGridStatus();
}
const status = await modsManager.getModsGridStatus();
setGridStatus(status);
loadMods();
@@ -347,12 +344,12 @@ export const ModsSlide = forwardRef<ModsSlideRef, Props>(({ version, isActive, o
});
function ModStatus({ text, image, spin = false, children }: { text: string; image: string; spin?: boolean, children?: ReactNode}) {
const t = useTranslation();
const { text: t } = useTranslationV2();
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 text-center px-2 mt-3 italic">{t(text)}</span>
{children}
</div>
);
+1
View File
@@ -16,6 +16,7 @@ export interface UninstallModsResult {
export enum ModsGridStatus {
OK = "",
NO_WINEPREFIX = "no-wineprefix",
BEATMODS_DOWN = "beatmods-down",
UNKNOWN = "unknown"
}