From cf3ec7fc396125ed452c553b34ae2737329fc61d Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Fri, 24 Dec 2021 01:36:20 +0100 Subject: feat: Service to main process communication --- packages/main/src/index.ts | 51 +++++++++++++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 14 deletions(-) (limited to 'packages/main/src') diff --git a/packages/main/src/index.ts b/packages/main/src/index.ts index f56d629..857c15d 100644 --- a/packages/main/src/index.ts +++ b/packages/main/src/index.ts @@ -22,6 +22,10 @@ import { app, BrowserView, BrowserWindow } from 'electron'; import { autorun } from 'mobx'; import { getSnapshot, onPatch } from 'mobx-state-tree'; import { join } from 'path'; +import { + ServiceToMainIpcMessage, + unreadCount, +} from '@sophie/service-shared'; import { browserViewBounds, MainToRendererIpcMessage, @@ -54,9 +58,9 @@ app.enableSandbox(); // Remove sophie and electron from the user-agent string to avoid detection. const originalUserAgent = app.userAgentFallback; +const userAgent = originalUserAgent.replaceAll(/ ([Ss]ophie|Electron)\/[0-9.]+/g, ''); // Removing the electron version breaks redux devtools, so we only do this in production. if (!isDevelopment) { - const userAgent = originalUserAgent.replaceAll(/ ([Ss]ophie|Electron)\/[0-9.]+/g, ''); app.userAgentFallback = userAgent; } @@ -97,6 +101,17 @@ async function createWindow(): Promise { webContents.userAgent = originalUserAgent; + const browserView = new BrowserView({ + webPreferences: { + sandbox: true, + partition: 'persist:service', + preload: join(__dirname, '../../service-preload/dist/index.cjs'), + }, + }); + + browserView.webContents.userAgent = userAgent; + browserView.setBackgroundColor('#fff'); + webContents.on('ipc-message', (_event, channel, ...args) => { try { switch (channel) { @@ -109,8 +124,11 @@ async function createWindow(): Promise { case RendererToMainIpcMessage.SetPaletteMode: store.setPaletteMode(paletteMode.parse(args[0])) break; + case RendererToMainIpcMessage.ReloadAllServices: + browserView.webContents.reload(); + break; default: - console.warn('Unknown IPC message:', channel, args); + console.error('Unknown IPC message:', channel, args); break; } } catch (err) { @@ -122,26 +140,31 @@ async function createWindow(): Promise { webContents.send(MainToRendererIpcMessage.SharedStorePatch, patch); }); - const pageUrl = (isDevelopment && import.meta.env.VITE_DEV_SERVER_URL !== undefined) - ? import.meta.env.VITE_DEV_SERVER_URL - : new URL('../renderer/dist/index.html', `file://${__dirname}`).toString(); - - const browserView = new BrowserView({ - webPreferences: { - sandbox: true, - partition: 'persist:service', - }, + browserView.webContents.on('ipc-message', (_event, channel, ...args) => { + try { + switch (channel) { + case ServiceToMainIpcMessage.SetUnreadCount: + console.log('Unread count:', unreadCount.parse(args[0])); + break; + default: + console.error('Unknown IPC message:', channel, args); + break; + } + } catch (err) { + console.error('Error while processing IPC message:', channel, args, err); + } }); - browserView.setBackgroundColor('#fff'); - autorun(() => { browserView.setBounds(store.shared.browserViewBounds); }); + const pageUrl = (isDevelopment && import.meta.env.VITE_DEV_SERVER_URL !== undefined) + ? import.meta.env.VITE_DEV_SERVER_URL + : new URL('../renderer/dist/index.html', `file://${__dirname}`).toString(); await mainWindow.loadURL(pageUrl); - mainWindow.addBrowserView(browserView); + mainWindow.setBrowserView(browserView); return browserView.webContents.loadURL('https://git.marussy.com/sophie/about'); } -- cgit v1.2.3-54-g00ecf