From 59896400e08a558186761d10b1143466e60ae792 Mon Sep 17 00:00:00 2001 From: MathieuG-P <40181755+Zagrios@users.noreply.github.com> Date: Sun, 16 Jul 2023 17:26:55 +0200 Subject: [PATCH] [chore-245] convert some "send" calls to "sendV2" --- src/main/ipcs/bs-mods-ipcs.ts | 32 +++++-------------- src/main/ipcs/bs-uninstall-ipcs.ts | 17 ++++------ src/main/ipcs/launcher-ipcs.ts | 13 ++++---- src/main/ipcs/os-controls-ipcs.ts | 13 +++----- src/main/ipcs/window-manager-ipcs.ts | 20 ++++++------ .../title-bar/title-bar.component.tsx | 7 ++-- .../slides/mods/mods-slide.component.tsx | 7 ++-- .../pages/settings-page.component.tsx | 2 +- src/renderer/services/auto-updater.service.ts | 10 ++---- .../services/bs-mods-manager.service.ts | 8 ++--- .../services/bs-uninstaller.service.ts | 5 +-- src/renderer/services/ipc.service.ts | 3 ++ .../services/window-manager.service.ts | 12 +++---- 13 files changed, 63 insertions(+), 86 deletions(-) diff --git a/src/main/ipcs/bs-mods-ipcs.ts b/src/main/ipcs/bs-mods-ipcs.ts index cc0fae2c..20509c0b 100644 --- a/src/main/ipcs/bs-mods-ipcs.ts +++ b/src/main/ipcs/bs-mods-ipcs.ts @@ -6,35 +6,19 @@ import { IpcRequest } from "shared/models/ipc"; import { Mod } from "shared/models/mods/mod.interface"; import { InstallModsResult } from "shared/models/mods"; import log from "electron-log"; +import { IpcService } from "../services/ipc.service"; +import { from } from "rxjs"; -ipcMain.on("get-available-mods", (event, request: IpcRequest) => { - const utils = UtilsService.getInstance(); +const ipc = IpcService.getInstance(); + +ipc.on("get-available-mods", (req, reply) => { const modsManager = BsModsManagerService.getInstance(); - - modsManager - .getAvailableMods(request.args) - .then(mods => { - utils.ipcSend(request.responceChannel, { success: true, data: mods }); - }) - .catch(err => { - utils.ipcSend(request.responceChannel, { success: false }); - log.error("ipc", "get-available-mods", err, request); - }); + reply(from(modsManager.getAvailableMods(req.args))); }); -ipcMain.on("get-installed-mods", (event, request: IpcRequest) => { - const utils = UtilsService.getInstance(); +ipc.on("get-installed-mods", (req, reply) => { const modsManager = BsModsManagerService.getInstance(); - - modsManager - .getInstalledMods(request.args) - .then(mods => { - utils.ipcSend(request.responceChannel, { success: true, data: mods }); - }) - .catch(err => { - utils.ipcSend(request.responceChannel, { success: false }); - log.error("ipc", "get-installed-mods", err, request); - }); + reply(from(modsManager.getInstalledMods(req.args))); }); ipcMain.on("install-mods", (event, request: IpcRequest<{ mods: Mod[]; version: BSVersion }>) => { diff --git a/src/main/ipcs/bs-uninstall-ipcs.ts b/src/main/ipcs/bs-uninstall-ipcs.ts index 551e57cc..9f65dfaa 100644 --- a/src/main/ipcs/bs-uninstall-ipcs.ts +++ b/src/main/ipcs/bs-uninstall-ipcs.ts @@ -1,17 +1,12 @@ -import { ipcMain } from "electron"; import { BSVersion } from "shared/bs-version.interface"; -import { UtilsService } from "../services/utils.service"; -import { IpcRequest } from "shared/models/ipc"; import { BSLocalVersionService } from "../services/bs-local-version.service"; +import { IpcService } from "../services/ipc.service"; +import { from } from "rxjs"; -ipcMain.on("bs.uninstall", async (event, request: IpcRequest) => { +const ipc = IpcService.getInstance(); + +ipc.on("bs.uninstall", (req, reply) => { const bsLocalVersionService = BSLocalVersionService.getInstance(); - const utilsService = UtilsService.getInstance(); - if (!request.args) { - utilsService.ipcSend(request.responceChannel, { success: false }); - } - - const res = await bsLocalVersionService.deleteVersion(request.args); - utilsService.ipcSend(request.responceChannel, { success: res }); + reply(from(bsLocalVersionService.deleteVersion(req.args))); }); diff --git a/src/main/ipcs/launcher-ipcs.ts b/src/main/ipcs/launcher-ipcs.ts index eb51f224..502a0095 100644 --- a/src/main/ipcs/launcher-ipcs.ts +++ b/src/main/ipcs/launcher-ipcs.ts @@ -2,6 +2,10 @@ import { ipcMain } from "electron"; import { AutoUpdaterService } from "../services/auto-updater.service"; import { IpcRequest } from "shared/models/ipc"; import { UtilsService } from "../services/utils.service"; +import { IpcService } from "../services/ipc.service"; +import { from } from "rxjs"; + +const ipc = IpcService.getInstance(); ipcMain.on("download-update", async (event, request: IpcRequest) => { const updaterService = AutoUpdaterService.getInstance(); @@ -13,16 +17,11 @@ ipcMain.on("download-update", async (event, request: IpcRequest) => { .catch(() => utilsService.ipcSend(request.responceChannel, { success: false })); }); -ipcMain.on("check-update", async (event, request: IpcRequest) => { +ipc.on("check-update", (_, reply) => { const updaterService = AutoUpdaterService.getInstance(); const utilsService = UtilsService.getInstance(); - updaterService - .isUpdateAvailable() - .then(updateAvailable => { - utilsService.ipcSend(request.responceChannel, { success: true, data: updateAvailable }); - }) - .catch(() => utilsService.ipcSend(request.responceChannel, { success: false })); + reply(from(updaterService.isUpdateAvailable())); }); ipcMain.on("install-update", async (event, request: IpcRequest) => { diff --git a/src/main/ipcs/os-controls-ipcs.ts b/src/main/ipcs/os-controls-ipcs.ts index be8ae628..8af72c06 100644 --- a/src/main/ipcs/os-controls-ipcs.ts +++ b/src/main/ipcs/os-controls-ipcs.ts @@ -5,17 +5,12 @@ import { SystemNotificationOptions } from "shared/models/notification/system-not import { NotificationService } from "../services/notification.service"; import { SteamService } from "../services/steam.service"; import { IpcService } from "../services/ipc.service"; -import { from } from "rxjs"; +import { from, of } from "rxjs"; // TODO IMPROVE WINDOW CONTROL BY USING WINDOW SERVICE const ipc = IpcService.getInstance(); -ipcMain.on("window.close", async () => { - const utils = UtilsService.getInstance(); - utils.getMainWindows("index.html")?.close(); -}); - ipcMain.on("window.maximize", async () => { const utils = UtilsService.getInstance(); utils.getMainWindows("index.html")?.maximize(); @@ -35,7 +30,7 @@ ipcMain.on("new-window", async (event, request: IpcRequest) => { shell.openExternal(request.args); }); -ipc.on("choose-folder", async (req: IpcRequest, reply) => { +ipc.on("choose-folder", async (req, reply) => { reply(from(dialog.showOpenDialog({ properties: ["openDirectory"], defaultPath: req.args ?? "" }))); }); @@ -54,8 +49,8 @@ ipcMain.on("save-file", async (event, request: IpcRequest<{ filename?: string; f }); }); -ipcMain.on("current-version", async (event, request: IpcRequest) => { - UtilsService.getInstance().ipcSend(request.responceChannel, { success: true, data: app.getVersion() }); +ipc.on("current-version", (_, reply) => { + reply(of(app.getVersion())); }); ipcMain.on("open-logs", async (event, request: IpcRequest) => { diff --git a/src/main/ipcs/window-manager-ipcs.ts b/src/main/ipcs/window-manager-ipcs.ts index 64f1a806..791b2753 100644 --- a/src/main/ipcs/window-manager-ipcs.ts +++ b/src/main/ipcs/window-manager-ipcs.ts @@ -1,32 +1,32 @@ -import { ipcMain } from "electron"; import { WindowManagerService } from "../services/window-manager.service"; -import { IpcRequest } from "shared/models/ipc"; import { AppWindow } from "shared/models/window-manager/app-window.model"; import { BSLauncherService } from "../services/bs-launcher.service"; import { IpcService } from "../services/ipc.service"; -import { from } from "rxjs"; +import { from, of } from "rxjs"; const launcher = BSLauncherService.getInstance(); const ipc = IpcService.getInstance(); -ipcMain.on("open-window-then-close-all", async (event, request: IpcRequest) => { +ipc.on("open-window-then-close-all", (req, reply) => { const windowManager = WindowManagerService.getInstance(); - windowManager.openWindow(request.args).then(window => { - windowManager.closeAllWindows(request.args); + const res = windowManager.openWindow(req.args).then(() => { + windowManager.closeAllWindows(req.args); }); + + reply(from(res)); }); -ipcMain.on("close-all-windows", async (event, request: IpcRequest) => { +ipc.on("close-all-windows", async (req, reply) => { await launcher.restoreSteamVR(); const windowManager = WindowManagerService.getInstance(); - windowManager.closeAllWindows(request.args); + reply(of(windowManager.closeAllWindows(req.args))); }); -ipcMain.on("close-windows", async (event, request: IpcRequest) => { +ipc.on("close-windows", async (req, reply) => { await launcher.restoreSteamVR(); const windowManager = WindowManagerService.getInstance(); - windowManager.close(...request.args); + reply(of(windowManager.close(...req.args))); }); ipc.on("open-window-or-focus", (req, reply) => { diff --git a/src/renderer/components/title-bar/title-bar.component.tsx b/src/renderer/components/title-bar/title-bar.component.tsx index c6d005ec..9bb2675e 100644 --- a/src/renderer/components/title-bar/title-bar.component.tsx +++ b/src/renderer/components/title-bar/title-bar.component.tsx @@ -10,6 +10,7 @@ import { BsmRange } from "../shared/bsm-range.component"; import { BsmIconType } from "../svgs/bsm-icon.component"; import "./title-bar.component.css"; import { useService } from "renderer/hooks/use-service.hook"; +import { lastValueFrom } from "rxjs"; export default function TitleBar({ template = "index.html" }: { template: AppWindow }) { @@ -23,11 +24,11 @@ export default function TitleBar({ template = "index.html" }: { template: AppWin const [previewVersion, setPreviewVersion] = useState(null); useEffect(() => { - ipcService.send("current-version").then(res => { - if (res.data.toLocaleLowerCase().includes("alpha")) { + lastValueFrom(ipcService.sendV2("current-version")).then(version => { + if (version.toLocaleLowerCase().includes("alpha")) { return setPreviewVersion("ALPHA"); } - if (res.data.toLocaleLowerCase().includes("beta")) { + if (version.toLocaleLowerCase().includes("beta")) { return setPreviewVersion("BETA"); } }); 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 2d7c1170..4f3e5d36 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 @@ -10,7 +10,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 { skip, filter } from "rxjs/operators"; -import { Subscription } from "rxjs"; +import { Subscription, lastValueFrom } from "rxjs"; import { useTranslation } from "renderer/hooks/use-translation.hook"; import { LinkOpenerService } from "renderer/services/link-opener.service"; import { useInView } from "framer-motion"; @@ -97,7 +97,10 @@ export function ModsSlide({ version, onDisclamerDecline }: { version: BSVersion; return; } - Promise.all([modsManager.getAvailableMods(version), modsManager.getInstalledMods(version)]).then(([available, installed]) => { + Promise.all([ + lastValueFrom(modsManager.getAvailableMods(version)), + lastValueFrom(modsManager.getInstalledMods(version)) + ]).then(([available, installed]) => { const defaultMods = configService.get("default_mods" as DefaultConfigKey); setModsAvailable(modsToCategoryMap(available)); setModsSelected(available.filter(m => m.required || defaultMods.some(d => m.name.toLowerCase() === d.toLowerCase()) || installed.some(i => m.name === i.name))); diff --git a/src/renderer/pages/settings-page.component.tsx b/src/renderer/pages/settings-page.component.tsx index 3650d1d1..d3302b58 100644 --- a/src/renderer/pages/settings-page.component.tsx +++ b/src/renderer/pages/settings-page.component.tsx @@ -79,7 +79,7 @@ export function SettingsPage() { useEffect(() => { loadInstallationFolder(); - ipcService.send("current-version").then(res => setAppVersion(res.data)); + lastValueFrom(ipcService.sendV2("current-version")).then(res => setAppVersion(res)); mapsManager.isDeepLinksEnabled().then(enabled => setMapDeepLinksEnabled(() => enabled)); playlistsManager.isDeepLinksEnabled().then(enabled => setPlaylistsDeepLinkEnabled(() => enabled)); modelsManager.isDeepLinksEnabled().then(enabled => setModelsDeepLinkEnabled(() => enabled)); diff --git a/src/renderer/services/auto-updater.service.ts b/src/renderer/services/auto-updater.service.ts index f32d437c..7c92dcb1 100644 --- a/src/renderer/services/auto-updater.service.ts +++ b/src/renderer/services/auto-updater.service.ts @@ -1,4 +1,4 @@ -import { Observable } from "rxjs"; +import { Observable, lastValueFrom } from "rxjs"; import { map } from "rxjs/operators"; import { IpcService } from "./ipc.service"; import { ProgressBarService } from "./progress-bar.service"; @@ -26,12 +26,7 @@ export class AutoUpdaterService { } public isUpdateAvailable(): Promise { - return this.ipcService.send("check-update").then(res => { - if (!res.success) { - return false; - } - return res.data; - }); + return lastValueFrom(this.ipcService.sendV2("check-update")).catch(() => false); } public downloadUpdate(): Promise { @@ -40,6 +35,7 @@ export class AutoUpdaterService { }); this.progressService.show(this.downloadProgress$, true); + return promise; } diff --git a/src/renderer/services/bs-mods-manager.service.ts b/src/renderer/services/bs-mods-manager.service.ts index 647c860d..0af4e89c 100644 --- a/src/renderer/services/bs-mods-manager.service.ts +++ b/src/renderer/services/bs-mods-manager.service.ts @@ -41,12 +41,12 @@ export class BsModsManagerService { this.os = OsDiagnosticService.getInstance(); } - public async getAvailableMods(version: BSVersion): Promise { - return this.ipcService.send("get-available-mods", { args: version }).then(res => res.data); + public getAvailableMods(version: BSVersion): Observable { + return this.ipcService.sendV2("get-available-mods", { args: version }); } - public async getInstalledMods(version: BSVersion): Promise { - return this.ipcService.send("get-installed-mods", { args: version }).then(res => res.data); + public getInstalledMods(version: BSVersion): Observable { + return this.ipcService.sendV2("get-installed-mods", { args: version }); } public installMods(mods: Mod[], version: BSVersion): Promise { diff --git a/src/renderer/services/bs-uninstaller.service.ts b/src/renderer/services/bs-uninstaller.service.ts index 166255a3..0c663d47 100644 --- a/src/renderer/services/bs-uninstaller.service.ts +++ b/src/renderer/services/bs-uninstaller.service.ts @@ -1,5 +1,6 @@ import { BSVersion } from "shared/bs-version.interface"; import { IpcService } from "./ipc.service"; +import { lastValueFrom } from "rxjs"; export class BSUninstallerService { private static instance: BSUninstallerService; @@ -17,7 +18,7 @@ export class BSUninstallerService { this.ipcService = IpcService.getInstance(); } - public async uninstall(version: BSVersion): Promise { - return (await this.ipcService.send("bs.uninstall", { args: version })).success; + public uninstall(version: BSVersion): Promise { + return lastValueFrom(this.ipcService.sendV2("bs.uninstall", { args: version })).catch(() => false); } } diff --git a/src/renderer/services/ipc.service.ts b/src/renderer/services/ipc.service.ts index fcbdb4de..2e22bba9 100644 --- a/src/renderer/services/ipc.service.ts +++ b/src/renderer/services/ipc.service.ts @@ -18,6 +18,9 @@ export class IpcService { this.channelObservables = new Map>>(); } + /** + * @deprecated use sendV2 instead + */ public send(channel: string, request?: IpcRequest): Promise> { if (!request) { request = { args: null, responceChannel: null }; diff --git a/src/renderer/services/window-manager.service.ts b/src/renderer/services/window-manager.service.ts index c3b452aa..24ae8c25 100644 --- a/src/renderer/services/window-manager.service.ts +++ b/src/renderer/services/window-manager.service.ts @@ -18,16 +18,16 @@ export class WindowManagerService { this.ipcService = IpcService.getInstance(); } - public openThenCloseAll(window: AppWindow) { - this.ipcService.sendLazy("open-window-then-close-all", { args: window }); + public openThenCloseAll(window: AppWindow): Promise { + return lastValueFrom(this.ipcService.sendV2("open-window-then-close-all", { args: window })); } - public closeAll(except?: AppWindow) { - this.ipcService.sendLazy("close-all-windows", { args: except }); + public closeAll(except?: AppWindow): Promise { + return lastValueFrom(this.ipcService.sendV2("close-all-windows", { args: except })); } - public close(...win: AppWindow[]) { - this.ipcService.sendLazy("close-windows", { args: win }); + public close(...win: AppWindow[]): Promise { + return lastValueFrom(this.ipcService.sendV2("close-windows", { args: win })); } public openWindowOrFocus(window: AppWindow): Promise {