From ff3d82238f39a52adf4e0cf0040293c6c9f23b71 Mon Sep 17 00:00:00 2001 From: silentrald Date: Sat, 8 Feb 2025 09:38:34 +0800 Subject: [PATCH 1/7] [bugfix] don't fallback on wineprefix and show error on mod install --- assets/jsons/translations/en.json | 3 ++- src/main/services/mods/bs-mods-manager.service.ts | 7 +++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/assets/jsons/translations/en.json b/assets/jsons/translations/en.json index f55c837f..bc52670e 100644 --- a/assets/jsons/translations/en.json +++ b/assets/jsons/translations/en.json @@ -588,7 +588,8 @@ "msg": { "success": "All mods have been uninstalled.", "errors": { - "no-mods": "No mods are installed in this version 😑" + "no-mods": "No mods are installed in this version 😑", + "no-wineprefix": "Could not find BSManager WINEPREFIX path, please launch beat saber in BSManager first." } } }, diff --git a/src/main/services/mods/bs-mods-manager.service.ts b/src/main/services/mods/bs-mods-manager.service.ts index 4b084653..f127ecaf 100644 --- a/src/main/services/mods/bs-mods-manager.service.ts +++ b/src/main/services/mods/bs-mods-manager.service.ts @@ -158,11 +158,10 @@ export class BsModsManagerService { winePath = `"${winePathResult}"`; const winePrefix = this.linuxService.getWinePrefixPath(); - if (winePrefix) { - env.WINEPREFIX = winePrefix; - } else { - log.warn("Could not find BSManager WINEPREFIX path, using system's default value instead"); + if (!winePrefix) { + throw new CustomError("Could not find BSManager WINEPREFIX path", "no-wineprefix"); } + env.WINEPREFIX = winePrefix; } return new Promise(resolve => { From 6fc3fed6ddefab8b178a635827992ff230ddad81 Mon Sep 17 00:00:00 2001 From: silentrald Date: Sat, 8 Feb 2025 11:05:07 +0800 Subject: [PATCH 2/7] [bugfix] block mods grid if wineprefix is not yet setup --- assets/jsons/translations/en.json | 5 +- src/main/ipcs/bs-mods-ipcs.ts | 8 ++- .../services/mods/bs-mods-manager.service.ts | 13 +++++ .../slides/mods/mods-slide.component.tsx | 49 ++++++++++++------- .../services/bs-mods-manager.service.ts | 9 ++++ src/shared/models/ipc/ipc-routes.ts | 2 + src/shared/models/mods/mod-ipc.model.ts | 7 +++ 7 files changed, 74 insertions(+), 19 deletions(-) diff --git a/assets/jsons/translations/en.json b/assets/jsons/translations/en.json index bc52670e..c0dcb075 100644 --- a/assets/jsons/translations/en.json +++ b/assets/jsons/translations/en.json @@ -131,6 +131,9 @@ "loading-mods": "Loading mods...", "no-internet": "No internet", "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." + }, "buttons": { "more-infos": "More info", "install-or-update": "Install or update", @@ -589,7 +592,7 @@ "success": "All mods have been uninstalled.", "errors": { "no-mods": "No mods are installed in this version 😑", - "no-wineprefix": "Could not find BSManager WINEPREFIX path, please launch beat saber in BSManager first." + "no-wineprefix": "Could not find BSManager WINEPREFIX path, please launch Beat Saber in BSManager first." } } }, diff --git a/src/main/ipcs/bs-mods-ipcs.ts b/src/main/ipcs/bs-mods-ipcs.ts index 0792538a..627d541d 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 } from "rxjs"; +import { from, of } from "rxjs"; const ipc = IpcService.getInstance(); @@ -33,3 +33,9 @@ ipc.on("bs-mods.uninstall-all-mods", (args, reply) => { const modsManager = BsModsManagerService.getInstance(); 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/services/mods/bs-mods-manager.service.ts b/src/main/services/mods/bs-mods-manager.service.ts index f127ecaf..95d66a0d 100644 --- a/src/main/services/mods/bs-mods-manager.service.ts +++ b/src/main/services/mods/bs-mods-manager.service.ts @@ -19,6 +19,7 @@ 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; @@ -564,6 +565,18 @@ 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 97854b4d..9bb754b4 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 @@ -22,6 +22,7 @@ import { UninstallAllModsModal } from "renderer/components/modal/modal-types/uni import Tippy from "@tippyjs/react"; import { ProgressBarService } from "renderer/services/progress-bar.service"; import { Dropzone } from "renderer/components/shared/dropzone.component"; +import { ModsGridStatus } from "shared/models/mods/mod-ipc.model"; export type ModsSlideRef = { loadMods: () => Promise; @@ -42,6 +43,7 @@ export const ModsSlide = forwardRef(({ version, isActive, o const os = useService(OsDiagnosticService); const progress = useService(ProgressBarService); + const [gridStatus, setGridStatus] = useState(ModsGridStatus.OK); const [modsAvailable, setModsAvailable] = useState(null as Map); const [modsInstalled, setModsInstalled] = useState(null as Map); const [modsSelected, setModsSelected] = useState([] as BbmFullMod[]); @@ -185,8 +187,23 @@ export const ModsSlide = forwardRef(({ version, isActive, o setModsSelected(() => []); } + const getAcceptDisclaimerKey = async () => { + if (configService.get(ACCEPTED_DISCLAIMER_KEY)) { + return true; + } + + const res = await modals.openModal(ModsDisclaimerModal); + const haveAccepted = res.exitCode === ModalExitCode.COMPLETED; + + if (haveAccepted) { + configService.set(ACCEPTED_DISCLAIMER_KEY, true); + } + + return haveAccepted; + } + const loadMods = async (): Promise => { - if (os.isOffline) { + if (os.isOffline || gridStatus !== ModsGridStatus.OK) { return Promise.resolve(); } @@ -209,31 +226,26 @@ export const ModsSlide = forwardRef(({ version, isActive, o return noop(); } - (async () => { - if (configService.get(ACCEPTED_DISCLAIMER_KEY)) { - return true; + getAcceptDisclaimerKey() + .then(async (canLoad) => { + if (!canLoad) { + return onDisclamerDecline?.(); } - const res = await modals.openModal(ModsDisclaimerModal); - const haveAccepted = res.exitCode === ModalExitCode.COMPLETED; - - if (haveAccepted) { - configService.set(ACCEPTED_DISCLAIMER_KEY, true); + let status = ModsGridStatus.OK; + if (window.electron.platform === "linux") { + status = await modsManager.getModsGridStatus(); } + setGridStatus(status); - return haveAccepted; - })().then(canLoad => { - if (!canLoad) { - return onDisclamerDecline?.(); - } - - loadMods(); - }); + loadMods(); + }); return () => { setMoreInfoMod(null); setModsAvailable(null); setModsInstalled(null); + setGridStatus(ModsGridStatus.OK); }; }, [isActive, isOnline, version]); @@ -262,6 +274,9 @@ export const ModsSlide = forwardRef(({ version, isActive, o if (!isOnline) { return ; } + if (gridStatus !== ModsGridStatus.OK) { + return ; + } if (!modsAvailable) { return ; } diff --git a/src/renderer/services/bs-mods-manager.service.ts b/src/renderer/services/bs-mods-manager.service.ts index 1fe17e10..19ee418d 100644 --- a/src/renderer/services/bs-mods-manager.service.ts +++ b/src/renderer/services/bs-mods-manager.service.ts @@ -8,6 +8,7 @@ import { Progression } from "main/helpers/fs.helpers"; 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"; export class BsModsManagerService { private static instance: BsModsManagerService; @@ -204,4 +205,12 @@ export class BsModsManagerService { return { available: (available ?? []), installed: (installedMods ?? []) }; } + public async getModsGridStatus(): Promise { + return lastValueFrom(this.ipcService.sendV2("bs-mods.get-mods-grid-status")) + .catch(error => { + logRenderError(error); + return ModsGridStatus.UNKNOWN; + }); + } + } diff --git a/src/shared/models/ipc/ipc-routes.ts b/src/shared/models/ipc/ipc-routes.ts index 9337b337..70f2a6ba 100644 --- a/src/shared/models/ipc/ipc-routes.ts +++ b/src/shared/models/ipc/ipc-routes.ts @@ -21,6 +21,7 @@ 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; @@ -88,6 +89,7 @@ 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 }; diff --git a/src/shared/models/mods/mod-ipc.model.ts b/src/shared/models/mods/mod-ipc.model.ts index f1c4613d..a35e3351 100644 --- a/src/shared/models/mods/mod-ipc.model.ts +++ b/src/shared/models/mods/mod-ipc.model.ts @@ -12,3 +12,10 @@ export interface UninstallModsResult { nbModsToUninstall: number; nbUninstalledMods: number; } + +export enum ModsGridStatus { + OK = "", + NO_WINEPREFIX = "pages.version-viewer.mods.status.no-wineprefix", + UNKNOWN = "misc.unknown" +} + From 35772768af7764af7d3772ec4a9c8e996ccdefc6 Mon Sep 17 00:00:00 2001 From: silentrald Date: Sat, 8 Feb 2025 11:18:11 +0800 Subject: [PATCH 3/7] [bugfix] added translation for no wineprefix errors --- assets/jsons/translations/de.json | 6 +++++- assets/jsons/translations/en.json | 4 ++-- assets/jsons/translations/es.json | 6 +++++- assets/jsons/translations/fr.json | 6 +++++- assets/jsons/translations/it.json | 6 +++++- assets/jsons/translations/ja.json | 6 +++++- assets/jsons/translations/ko.json | 6 +++++- assets/jsons/translations/pt-br.json | 6 +++++- assets/jsons/translations/ru.json | 6 +++++- assets/jsons/translations/zh-tw.json | 6 +++++- assets/jsons/translations/zh.json | 6 +++++- 11 files changed, 52 insertions(+), 12 deletions(-) diff --git a/assets/jsons/translations/de.json b/assets/jsons/translations/de.json index c7eadb2d..a27e5794 100644 --- a/assets/jsons/translations/de.json +++ b/assets/jsons/translations/de.json @@ -131,6 +131,9 @@ "loading-mods": "Lade Mods...", "no-internet": "Kein Internet", "mods-not-available": "Für diese Version von Beat Saber sind noch keine Mods verfügbar.", + "status": { + "no-wineprefix": "Konnte den BSManager WINEPREFIX-Pfad nicht finden. Bitte starte Beat Saber zuerst in BSManager." + }, "buttons": { "more-infos": "Mehr Infos", "install-or-update": "Installieren oder aktualisieren", @@ -588,7 +591,8 @@ "msg": { "success": "Alle Mods wurden entfernt.", "errors": { - "no-mods": "Keine Mods sind in dieser Version installiert 😑" + "no-mods": "Keine Mods sind in dieser Version installiert 😑", + "no-wineprefix": "Konnte den BSManager WINEPREFIX-Pfad nicht finden. Bitte starte Beat Saber zuerst in BSManager." } } }, diff --git a/assets/jsons/translations/en.json b/assets/jsons/translations/en.json index c0dcb075..14c32ccf 100644 --- a/assets/jsons/translations/en.json +++ b/assets/jsons/translations/en.json @@ -132,7 +132,7 @@ "no-internet": "No internet", "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." + "no-wineprefix": "Could not find BSManager WINEPREFIX path. Please launch Beat Saber in BSManager first." }, "buttons": { "more-infos": "More info", @@ -592,7 +592,7 @@ "success": "All mods have been uninstalled.", "errors": { "no-mods": "No mods are installed in this version 😑", - "no-wineprefix": "Could not find BSManager WINEPREFIX path, please launch Beat Saber in BSManager first." + "no-wineprefix": "Could not find BSManager WINEPREFIX path. Please launch Beat Saber in BSManager first." } } }, diff --git a/assets/jsons/translations/es.json b/assets/jsons/translations/es.json index c7681628..5c389e85 100644 --- a/assets/jsons/translations/es.json +++ b/assets/jsons/translations/es.json @@ -131,6 +131,9 @@ "loading-mods": "Cargando mods...", "no-internet": "Sin internet", "mods-not-available": "Aún no hay mods disponibles para esta versión de Beat Saber", + "status": { + "no-wineprefix": "No se pudo encontrar la ruta del WINEPREFIX de BSManager. Por favor, inicia Beat Saber en BSManager primero." + }, "buttons": { "more-infos": "Más información", "install-or-update": "Instalar o actualizar", @@ -588,7 +591,8 @@ "msg": { "success": "Todos los mods han sido desinstalados.", "errors": { - "no-mods": "No hay mods instalados en esta versión 😑" + "no-mods": "No hay mods instalados en esta versión 😑", + "no-wineprefix": "No se pudo encontrar la ruta del WINEPREFIX de BSManager. Por favor, inicia Beat Saber en BSManager primero." } } }, diff --git a/assets/jsons/translations/fr.json b/assets/jsons/translations/fr.json index d065f6d5..97f6cd67 100644 --- a/assets/jsons/translations/fr.json +++ b/assets/jsons/translations/fr.json @@ -131,6 +131,9 @@ "loading-mods": "Chargement des mods...", "no-internet": "Pas d'accès Internet", "mods-not-available": "Aucun mod n'est encore disponible pour cette version de Beat Saber", + "status": { + "no-wineprefix": "Impossible de trouver le chemin WINEPREFIX de BSManager. Veuillez d'abord lancer Beat Saber dans BSManager." + }, "buttons": { "more-infos": "Plus d'infos", "install-or-update": "Installer ou mettre à jour", @@ -588,7 +591,8 @@ "msg": { "success": "Tous les mods ont été désinstallés.", "errors": { - "no-mods": "Aucun mod n'est installé dans dans cette version 😑" + "no-mods": "Aucun mod n'est installé dans dans cette version 😑", + "no-wineprefix": "Impossible de trouver le chemin WINEPREFIX de BSManager. Veuillez d'abord lancer Beat Saber dans BSManager." } } }, diff --git a/assets/jsons/translations/it.json b/assets/jsons/translations/it.json index 3a445fe3..b7eac957 100644 --- a/assets/jsons/translations/it.json +++ b/assets/jsons/translations/it.json @@ -131,6 +131,9 @@ "loading-mods": "Caricamento delle mod in corso...", "no-internet": "Internet non disponibile", "mods-not-available": "Nessuna mod è ancora disponibile per questa versione di Beat Saber", + "status": { + "no-wineprefix": "Impossibile trovare il percorso del WINEPREFIX di BSManager. Per favore avvia prima Beat Saber in BSManager." + }, "buttons": { "more-infos": "Più info", "install-or-update": "Installa o aggiorna", @@ -588,7 +591,8 @@ "msg": { "success": "Tutte le mod sono state installate.", "errors": { - "no-mods": "Non ci sono mod installate su questa versione 😑" + "no-mods": "Non ci sono mod installate su questa versione 😑", + "no-wineprefix": "Impossibile trovare il percorso del WINEPREFIX di BSManager. Per favore avvia prima Beat Saber in BSManager." } } }, diff --git a/assets/jsons/translations/ja.json b/assets/jsons/translations/ja.json index 32e8c7ed..142195da 100644 --- a/assets/jsons/translations/ja.json +++ b/assets/jsons/translations/ja.json @@ -131,6 +131,9 @@ "loading-mods": "Modを読み込み中...", "no-internet": "インターネット接続がありません!", "mods-not-available": "このバージョンで使用できるMODはまだありません。", + "status": { + "no-wineprefix": "BSManager WINEPREFIXのパスが見つかりませんでした。まずBSManagerでBeat Saberを起動してください。" + }, "buttons": { "more-infos": "詳細情報", "install-or-update": "インストールとアップデート", @@ -588,7 +591,8 @@ "msg": { "success": "すべてのModをアンインストールしました。", "errors": { - "no-mods": "このバージョンのModはインストールされていません 😑" + "no-mods": "このバージョンのModはインストールされていません 😑", + "no-wineprefix": "BSManager WINEPREFIXのパスが見つかりませんでした。まずBSManagerでBeat Saberを起動してください。" } } }, diff --git a/assets/jsons/translations/ko.json b/assets/jsons/translations/ko.json index 035fefed..6a18bc67 100644 --- a/assets/jsons/translations/ko.json +++ b/assets/jsons/translations/ko.json @@ -131,6 +131,9 @@ "loading-mods": "모드를 불러오는 중...", "no-internet": "인터넷 연결이 없습니다!", "mods-not-available": "이 버전에서 사용할 수 있는 모드가 아직 없습니다.", + "status": { + "no-wineprefix": "BSManager WINEPREFIX 경로를 찾을 수 없습니다. 먼저 BSManager에서 Beat Saber를 실행하세요." + }, "buttons": { "more-infos": "자세히 보기", "install-or-update": "설치 및 업데이트", @@ -589,7 +592,8 @@ "msg": { "success": "모든 Mod가 제거되었습니다.", "errors": { - "no-mods": "이 버전에 설치된 Mod가 없습니다 😑" + "no-mods": "이 버전에 설치된 Mod가 없습니다 😑", + "no-wineprefix": "BSManager WINEPREFIX 경로를 찾을 수 없습니다. 먼저 BSManager에서 Beat Saber를 실행하세요." } } }, diff --git a/assets/jsons/translations/pt-br.json b/assets/jsons/translations/pt-br.json index dc21fa60..604801b5 100644 --- a/assets/jsons/translations/pt-br.json +++ b/assets/jsons/translations/pt-br.json @@ -131,6 +131,9 @@ "loading-mods": "Carregando mods...", "no-internet": "Sem internet", "mods-not-available": "Nenhum mod está disponível para essa versão de Beat Saber ainda", + "status": { + "no-wineprefix": "Não foi possível encontrar o caminho WINEPREFIX do BSManager. Por favor, inicie o Beat Saber no BSManager primeiro." + }, "buttons": { "more-infos": "Mais informações", "install-or-update": "Instalar ou Atualizar", @@ -588,7 +591,8 @@ "msg": { "success": "Todos os mods foram desinstalados.", "errors": { - "no-mods": "Nenhum mod está instalado nessa versão 😑" + "no-mods": "Nenhum mod está instalado nessa versão 😑", + "no-wineprefix": "Não foi possível encontrar o caminho WINEPREFIX do BSManager. Por favor, inicie o Beat Saber no BSManager primeiro." } } }, diff --git a/assets/jsons/translations/ru.json b/assets/jsons/translations/ru.json index 4a4500a1..493a5da1 100644 --- a/assets/jsons/translations/ru.json +++ b/assets/jsons/translations/ru.json @@ -131,6 +131,9 @@ "loading-mods": "Загрузка модов...", "no-internet": "Нет интернета", "mods-not-available": "Не найдены моды для этой версии Beat Saber", + "status": { + "no-wineprefix": "Не удалось найти путь WINEPREFIX BSManager. Пожалуйста, сначала запустите Beat Saber в BSManager." + }, "buttons": { "more-infos": "Подробнее", "install-or-update": "Установить или обновить", @@ -588,7 +591,8 @@ "msg": { "success": "Все моды были удалены.", "errors": { - "no-mods": "Для этой версии не было установлено модов 😑" + "no-mods": "Для этой версии не было установлено модов 😑", + "no-wineprefix": "Не удалось найти путь WINEPREFIX BSManager. Пожалуйста, сначала запустите Beat Saber в BSManager." } } }, diff --git a/assets/jsons/translations/zh-tw.json b/assets/jsons/translations/zh-tw.json index cacac60a..768e3094 100644 --- a/assets/jsons/translations/zh-tw.json +++ b/assets/jsons/translations/zh-tw.json @@ -131,6 +131,9 @@ "loading-mods": "Mod 載入中...", "no-internet": "無網路", "mods-not-available": "該版本 BeatSaber 暫無可用 Mod", + "status": { + "no-wineprefix": "找不到 BSManager WINEPREFIX 路徑。請先在 BSManager 中啟動 Beat Saber。" + }, "buttons": { "more-infos": "更多資訊", "install-or-update": "安裝或更新", @@ -588,7 +591,8 @@ "msg": { "success": "所有 Mod 已被移除。", "errors": { - "no-mods": "該版本中沒有安裝 Mod 😑" + "no-mods": "該版本中沒有安裝 Mod 😑", + "no-wineprefix": "找不到 BSManager WINEPREFIX 路徑。請先在 BSManager 中啟動 Beat Saber。" } } }, diff --git a/assets/jsons/translations/zh.json b/assets/jsons/translations/zh.json index da08ac9b..db97bfe5 100644 --- a/assets/jsons/translations/zh.json +++ b/assets/jsons/translations/zh.json @@ -131,6 +131,9 @@ "loading-mods": "Mod 加载中...", "no-internet": "无网络", "mods-not-available": "该版本 BeatSaber 暂无可用 Mod", + "status": { + "no-wineprefix": "找不到 BSManager WINEPREFIX 路径。请先在 BSManager 中启动 Beat Saber。" + }, "buttons": { "more-infos": "更多信息", "install-or-update": "安装或更新", @@ -587,7 +590,8 @@ "msg": { "success": "所有 Mod 已被卸载。", "errors": { - "no-mods": "该版本中没有安装 Mod 😑" + "no-mods": "该版本中没有安装 Mod 😑", + "no-wineprefix": "找不到 BSManager WINEPREFIX 路径。请先在 BSManager 中启动 Beat Saber。" } } }, From a54809ffb5cc6de9c226b617614d03801bb61952 Mon Sep 17 00:00:00 2001 From: silentrald Date: Sat, 8 Feb 2025 20:23:18 +0800 Subject: [PATCH 4/7] [bugfix] changed error values --- assets/jsons/translations/de.json | 3 ++- assets/jsons/translations/en.json | 3 ++- assets/jsons/translations/es.json | 3 ++- assets/jsons/translations/fr.json | 3 ++- assets/jsons/translations/it.json | 3 ++- assets/jsons/translations/ja.json | 3 ++- assets/jsons/translations/ko.json | 3 ++- assets/jsons/translations/pt-br.json | 3 ++- assets/jsons/translations/ru.json | 3 ++- assets/jsons/translations/zh-tw.json | 3 ++- assets/jsons/translations/zh.json | 5 +++-- .../version-viewer/slides/mods/mods-slide.component.tsx | 2 +- src/shared/models/mods/mod-ipc.model.ts | 4 ++-- 13 files changed, 26 insertions(+), 15 deletions(-) diff --git a/assets/jsons/translations/de.json b/assets/jsons/translations/de.json index a27e5794..21e6b152 100644 --- a/assets/jsons/translations/de.json +++ b/assets/jsons/translations/de.json @@ -132,7 +132,8 @@ "no-internet": "Kein Internet", "mods-not-available": "Für diese Version von Beat Saber sind noch keine Mods verfügbar.", "status": { - "no-wineprefix": "Konnte den BSManager WINEPREFIX-Pfad nicht finden. Bitte starte Beat Saber zuerst in BSManager." + "no-wineprefix": "Konnte den BSManager WINEPREFIX-Pfad nicht finden. Bitte starte Beat Saber zuerst in BSManager.", + "unknown": "Ein unbekannter Fehler ist aufgetreten ¯\\_(ツ)_/¯" }, "buttons": { "more-infos": "Mehr Infos", diff --git a/assets/jsons/translations/en.json b/assets/jsons/translations/en.json index 14c32ccf..352d6fb1 100644 --- a/assets/jsons/translations/en.json +++ b/assets/jsons/translations/en.json @@ -132,7 +132,8 @@ "no-internet": "No internet", "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." + "no-wineprefix": "Could not find BSManager WINEPREFIX path. Please launch Beat Saber in BSManager first.", + "unknown": "An unknown error occurred ¯\\_(ツ)_/¯" }, "buttons": { "more-infos": "More info", diff --git a/assets/jsons/translations/es.json b/assets/jsons/translations/es.json index 5c389e85..5037f1f1 100644 --- a/assets/jsons/translations/es.json +++ b/assets/jsons/translations/es.json @@ -132,7 +132,8 @@ "no-internet": "Sin internet", "mods-not-available": "Aún no hay mods disponibles para esta versión de Beat Saber", "status": { - "no-wineprefix": "No se pudo encontrar la ruta del WINEPREFIX de BSManager. Por favor, inicia Beat Saber en BSManager primero." + "no-wineprefix": "No se pudo encontrar la ruta del WINEPREFIX de BSManager. Por favor, inicia Beat Saber en BSManager primero.", + "unknown": "Se ha producido un error desconocido ¯\\_(ツ)_/¯" }, "buttons": { "more-infos": "Más información", diff --git a/assets/jsons/translations/fr.json b/assets/jsons/translations/fr.json index 97f6cd67..740de479 100644 --- a/assets/jsons/translations/fr.json +++ b/assets/jsons/translations/fr.json @@ -132,7 +132,8 @@ "no-internet": "Pas d'accès Internet", "mods-not-available": "Aucun mod n'est encore disponible pour cette version de Beat Saber", "status": { - "no-wineprefix": "Impossible de trouver le chemin WINEPREFIX de BSManager. Veuillez d'abord lancer Beat Saber dans BSManager." + "no-wineprefix": "Impossible de trouver le chemin WINEPREFIX de BSManager. Veuillez d'abord lancer Beat Saber dans BSManager.", + "unknown": "Une erreur inconnue s'est produite ¯\\_(ツ)_/¯" }, "buttons": { "more-infos": "Plus d'infos", diff --git a/assets/jsons/translations/it.json b/assets/jsons/translations/it.json index b7eac957..f055732b 100644 --- a/assets/jsons/translations/it.json +++ b/assets/jsons/translations/it.json @@ -132,7 +132,8 @@ "no-internet": "Internet non disponibile", "mods-not-available": "Nessuna mod è ancora disponibile per questa versione di Beat Saber", "status": { - "no-wineprefix": "Impossibile trovare il percorso del WINEPREFIX di BSManager. Per favore avvia prima Beat Saber in BSManager." + "no-wineprefix": "Impossibile trovare il percorso del WINEPREFIX di BSManager. Per favore avvia prima Beat Saber in BSManager.", + "unknown": "È accaduto un errore sconosciuto ¯\\_(ツ)_/¯" }, "buttons": { "more-infos": "Più info", diff --git a/assets/jsons/translations/ja.json b/assets/jsons/translations/ja.json index 142195da..923963ba 100644 --- a/assets/jsons/translations/ja.json +++ b/assets/jsons/translations/ja.json @@ -132,7 +132,8 @@ "no-internet": "インターネット接続がありません!", "mods-not-available": "このバージョンで使用できるMODはまだありません。", "status": { - "no-wineprefix": "BSManager WINEPREFIXのパスが見つかりませんでした。まずBSManagerでBeat Saberを起動してください。" + "no-wineprefix": "BSManager WINEPREFIXのパスが見つかりませんでした。まずBSManagerでBeat Saberを起動してください。", + "unknown": "不明なエラーが発生しました (´・ω・`)" }, "buttons": { "more-infos": "詳細情報", diff --git a/assets/jsons/translations/ko.json b/assets/jsons/translations/ko.json index 6a18bc67..1e83a7d1 100644 --- a/assets/jsons/translations/ko.json +++ b/assets/jsons/translations/ko.json @@ -132,7 +132,8 @@ "no-internet": "인터넷 연결이 없습니다!", "mods-not-available": "이 버전에서 사용할 수 있는 모드가 아직 없습니다.", "status": { - "no-wineprefix": "BSManager WINEPREFIX 경로를 찾을 수 없습니다. 먼저 BSManager에서 Beat Saber를 실행하세요." + "no-wineprefix": "BSManager WINEPREFIX 경로를 찾을 수 없습니다. 먼저 BSManager에서 Beat Saber를 실행하세요.", + "unknown": "알 수 없는 오류가 발생했습니다 (´・ω・`)" }, "buttons": { "more-infos": "자세히 보기", diff --git a/assets/jsons/translations/pt-br.json b/assets/jsons/translations/pt-br.json index 604801b5..7d2f6e2a 100644 --- a/assets/jsons/translations/pt-br.json +++ b/assets/jsons/translations/pt-br.json @@ -132,7 +132,8 @@ "no-internet": "Sem internet", "mods-not-available": "Nenhum mod está disponível para essa versão de Beat Saber ainda", "status": { - "no-wineprefix": "Não foi possível encontrar o caminho WINEPREFIX do BSManager. Por favor, inicie o Beat Saber no BSManager primeiro." + "no-wineprefix": "Não foi possível encontrar o caminho WINEPREFIX do BSManager. Por favor, inicie o Beat Saber no BSManager primeiro.", + "unknown": "Um erro desconhecido aconteceu ¯\\_(ツ)_/¯" }, "buttons": { "more-infos": "Mais informações", diff --git a/assets/jsons/translations/ru.json b/assets/jsons/translations/ru.json index 493a5da1..a1da3e10 100644 --- a/assets/jsons/translations/ru.json +++ b/assets/jsons/translations/ru.json @@ -132,7 +132,8 @@ "no-internet": "Нет интернета", "mods-not-available": "Не найдены моды для этой версии Beat Saber", "status": { - "no-wineprefix": "Не удалось найти путь WINEPREFIX BSManager. Пожалуйста, сначала запустите Beat Saber в BSManager." + "no-wineprefix": "Не удалось найти путь WINEPREFIX BSManager. Пожалуйста, сначала запустите Beat Saber в BSManager.", + "unknown": "Неизвестная ошибка ¯\\_(ツ)_/¯" }, "buttons": { "more-infos": "Подробнее", diff --git a/assets/jsons/translations/zh-tw.json b/assets/jsons/translations/zh-tw.json index 768e3094..5e2e9ebf 100644 --- a/assets/jsons/translations/zh-tw.json +++ b/assets/jsons/translations/zh-tw.json @@ -132,7 +132,8 @@ "no-internet": "無網路", "mods-not-available": "該版本 BeatSaber 暫無可用 Mod", "status": { - "no-wineprefix": "找不到 BSManager WINEPREFIX 路徑。請先在 BSManager 中啟動 Beat Saber。" + "no-wineprefix": "找不到 BSManager WINEPREFIX 路徑。請先在 BSManager 中啟動 Beat Saber。", + "unknown": "發生了一個錯誤 ¯\\_(ツ)_/¯" }, "buttons": { "more-infos": "更多資訊", diff --git a/assets/jsons/translations/zh.json b/assets/jsons/translations/zh.json index db97bfe5..ecd9a0a9 100644 --- a/assets/jsons/translations/zh.json +++ b/assets/jsons/translations/zh.json @@ -21,7 +21,7 @@ "copied": "已复制!", "confirm": "确认", "choose-folder": "选择文件夹", - "Unknown": "发生了一个错误 ¯\\_(ツ)_/¯", + "unknown": "发生了一个错误 ¯\\_(ツ)_/¯", "warning": "警告", "continue": "继续", "shared": "共享", @@ -132,7 +132,8 @@ "no-internet": "无网络", "mods-not-available": "该版本 BeatSaber 暂无可用 Mod", "status": { - "no-wineprefix": "找不到 BSManager WINEPREFIX 路径。请先在 BSManager 中启动 Beat Saber。" + "no-wineprefix": "找不到 BSManager WINEPREFIX 路径。请先在 BSManager 中启动 Beat Saber。", + "unknown": "发生了一个错误 ¯\\_(ツ)_/¯" }, "buttons": { "more-infos": "更多信息", 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 9bb754b4..71a6d5fb 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 @@ -275,7 +275,7 @@ export const ModsSlide = forwardRef(({ version, isActive, o return ; } if (gridStatus !== ModsGridStatus.OK) { - return ; + return ; } if (!modsAvailable) { return ; diff --git a/src/shared/models/mods/mod-ipc.model.ts b/src/shared/models/mods/mod-ipc.model.ts index a35e3351..f97ddd4a 100644 --- a/src/shared/models/mods/mod-ipc.model.ts +++ b/src/shared/models/mods/mod-ipc.model.ts @@ -15,7 +15,7 @@ export interface UninstallModsResult { export enum ModsGridStatus { OK = "", - NO_WINEPREFIX = "pages.version-viewer.mods.status.no-wineprefix", - UNKNOWN = "misc.unknown" + NO_WINEPREFIX = "no-wineprefix", + UNKNOWN = "unknown" } From 41628d4e6e4206892ede4ce9685e001a3a60cfd9 Mon Sep 17 00:00:00 2001 From: Zagrios <40181755+Zagrios@users.noreply.github.com> Date: Mon, 10 Feb 2025 22:37:32 +0100 Subject: [PATCH 5/7] Backend should be as frontend-agnostic as possible --- src/main/ipcs/bs-mods-ipcs.ts | 7 +---- src/main/ipcs/linux.ipcs.ts | 5 ++++ .../services/mods/bs-mods-manager.service.ts | 13 ---------- .../slides/mods/mods-slide.component.tsx | 22 +++++++--------- .../services/bs-mods-manager.service.ts | 18 +++++++++---- src/renderer/services/linux.service.ts | 26 +++++++++++++++++++ src/shared/models/ipc/ipc-routes.ts | 3 +-- 7 files changed, 55 insertions(+), 39 deletions(-) create mode 100644 src/renderer/services/linux.service.ts 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 }; From c3c3be08235ad8e87fb37683390d399ea958bf9f Mon Sep 17 00:00:00 2001 From: Zagrios <40181755+Zagrios@users.noreply.github.com> Date: Mon, 10 Feb 2025 22:53:06 +0100 Subject: [PATCH 6/7] Add Philipino and Ukrainian translations --- assets/jsons/translations/tl.json | 7 ++++++- assets/jsons/translations/uk.json | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/assets/jsons/translations/tl.json b/assets/jsons/translations/tl.json index eb916211..4a99478f 100644 --- a/assets/jsons/translations/tl.json +++ b/assets/jsons/translations/tl.json @@ -131,6 +131,10 @@ "loading-mods": "Naglo-load ng mga mod...", "no-internet": "Walang internet", "mods-not-available": "Walang mod na available pa para sa bersyon na ito ng Beat Saber", + "status": { + "no-wineprefix": "Hindi mahanap ang WINEPREFIX path ng BSManager. Pakilunsad muna ang Beat Saber sa BSManager.", + "unknown": "May naganap na hindi kilalang error ¯\\_(ツ)_/¯" + }, "buttons": { "more-infos": "Higit pang impormasyon", "install-or-update": "I-install o i-update", @@ -592,7 +596,8 @@ "msg": { "success": "Lahat ng mod ay na-uninstall na.", "errors": { - "no-mods": "Walang mod na naka-install sa bersyong ito 😑" + "no-mods": "Walang mod na naka-install sa bersyong ito 😑", + "no-wineprefix": "Hindi mahanap ang WINEPREFIX path ng BSManager. Pakilunsad muna ang Beat Saber sa BSManager." } } }, diff --git a/assets/jsons/translations/uk.json b/assets/jsons/translations/uk.json index b9b3a383..1c69a75e 100644 --- a/assets/jsons/translations/uk.json +++ b/assets/jsons/translations/uk.json @@ -131,6 +131,10 @@ "loading-mods": "Завантаження модів...", "no-internet": "Немає інтернету", "mods-not-available": "Для цієї версії Beat Saber поки що немає модів", + "status": { + "no-wineprefix": "Не вдалося знайти шлях до WINEPREFIX BSManager. Будь ласка, спочатку запустіть Beat Saber у BSManager.", + "unknown": "Сталася невідома помилка ¯\\_(ツ)_/¯" + }, "buttons": { "more-infos": "Більше інформації", "install-or-update": "Встановити або оновити", @@ -592,7 +596,8 @@ "msg": { "success": "Усі моди були видалені.", "errors": { - "no-mods": "У цій версії не встановлено жодних модів 😑" + "no-mods": "У цій версії не встановлено жодних модів 😑", + "no-wineprefix": "Не вдалося знайти шлях до WINEPREFIX BSManager. Будь ласка, спочатку запустіть Beat Saber у BSManager." } } }, From 7b0bcf50414afb76bb33a7b53d2fb295217b54f5 Mon Sep 17 00:00:00 2001 From: Zagrios <40181755+Zagrios@users.noreply.github.com> Date: Mon, 10 Feb 2025 23:00:46 +0100 Subject: [PATCH 7/7] Rename getAcceptDisclaimerKey to ensureDisclaimerAccepted for clarity --- .../version-viewer/slides/mods/mods-slide.component.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 7068633a..e2c423bd 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 @@ -187,7 +187,7 @@ export const ModsSlide = forwardRef(({ version, isActive, o setModsSelected(() => []); } - const getAcceptDisclaimerKey = async () => { + const ensureDisclaimerAccepted = async (): Promise => { if (configService.get(ACCEPTED_DISCLAIMER_KEY)) { return true; } @@ -226,7 +226,7 @@ export const ModsSlide = forwardRef(({ version, isActive, o return noop(); } - getAcceptDisclaimerKey().then(async canLoad => { + ensureDisclaimerAccepted().then(async canLoad => { if (!canLoad) { return onDisclamerDecline?.(); }