From a2651dff66faf98dc1a6f924227af454eaa2311d Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Sun, 26 Dec 2021 21:12:08 +0100 Subject: refactor: Less boilerplate around SophieRenderer --- packages/main/src/index.ts | 48 ++++++++++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 16 deletions(-) (limited to 'packages/main/src') diff --git a/packages/main/src/index.ts b/packages/main/src/index.ts index 67f5546..7aa3ee9 100644 --- a/packages/main/src/index.ts +++ b/packages/main/src/index.ts @@ -35,9 +35,8 @@ import { WebSource, } from '@sophie/service-shared'; import { - browserViewBounds, + action, MainToRendererIpcMessage, - themeSource, RendererToMainIpcMessage, } from '@sophie/shared'; import { URL } from 'url'; @@ -194,19 +193,39 @@ function createWindow(): Promise { }); mainWindow.setBrowserView(browserView); - webContents.on('ipc-message', (_event, channel, ...args) => { + ipcMain.handle(RendererToMainIpcMessage.GetSharedStoreSnapshot, (event) => { + if (event.sender.id !== webContents.id) { + console.warn( + 'Unexpected', + RendererToMainIpcMessage.GetSharedStoreSnapshot, + 'from webContents', + event.sender.id, + ); + return null; + } + return getSnapshot(store.shared); + }); + + ipcMain.on(RendererToMainIpcMessage.DispatchAction, (event, rawAction) => { + if (event.sender.id !== webContents.id) { + console.warn( + 'Unexpected', + RendererToMainIpcMessage.DispatchAction, + 'from webContents', + event.sender.id, + ); + return; + } try { - switch (channel) { - case RendererToMainIpcMessage.SharedStoreSnapshotRequest: - webContents.send(MainToRendererIpcMessage.SharedStoreSnapshot, getSnapshot(store.shared)); + const actionToDispatch = action.parse(rawAction); + switch (actionToDispatch.action) { + case 'set-browser-view-bounds': + store.setBrowserViewBounds(actionToDispatch.browserViewBounds); break; - case RendererToMainIpcMessage.SetBrowserViewBounds: - store.setBrowserViewBounds(browserViewBounds.parse(args[0])); + case 'set-theme-source': + store.config.setThemeSource(actionToDispatch.themeSource) break; - case RendererToMainIpcMessage.SetThemeSource: - store.config.setThemeSource(themeSource.parse(args[0])) - break; - case RendererToMainIpcMessage.ReloadAllServices: + case 'reload-all-services': readFile(serviceInjectPath, 'utf8').then((data) => { serviceInject.code = data; }).catch((err) => { @@ -215,12 +234,9 @@ function createWindow(): Promise { browserView.webContents.reload(); }); break; - default: - console.error('Unknown IPC message:', channel, args); - break; } } catch (err) { - console.error('Error while processing IPC message:', channel, args, err); + console.error('Error while dispatching renderer action', rawAction, err); } }); -- cgit v1.2.3-54-g00ecf