From 78f8f4a0547eec60006cd2c8934d3a9abf8c42cf Mon Sep 17 00:00:00 2001 From: gwleuverink Date: Tue, 10 Sep 2024 11:58:03 +0200 Subject: [PATCH 1/6] Add broadcasting endpoint & dispatch ipc event --- src/server/api.ts | 2 ++ src/server/api/broadcasting.ts | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 src/server/api/broadcasting.ts diff --git a/src/server/api.ts b/src/server/api.ts index 3dc65e0..6d6a41b 100644 --- a/src/server/api.ts +++ b/src/server/api.ts @@ -8,6 +8,7 @@ import appRoutes from "./api/app"; import screenRoutes from "./api/screen"; import dialogRoutes from "./api/dialog"; import debugRoutes from "./api/debug"; +import broadcastingRoutes from "./api/broadcasting"; import systemRoutes from "./api/system"; import globalShortcutRoutes from "./api/globalShortcut"; import notificationRoutes from "./api/notification"; @@ -54,6 +55,7 @@ async function startAPIServer(randomSecret: string): Promise { httpServer.use("/api/menu-bar", menuBarRoutes); httpServer.use("/api/progress-bar", progressBarRoutes); httpServer.use("/api/power-monitor", powerMonitorRoutes); + httpServer.use("/api/broadcast", broadcastingRoutes); if (process.env.NODE_ENV === "development") { httpServer.use("/api/debug", debugRoutes); diff --git a/src/server/api/broadcasting.ts b/src/server/api/broadcasting.ts new file mode 100644 index 0000000..4013c07 --- /dev/null +++ b/src/server/api/broadcasting.ts @@ -0,0 +1,19 @@ +import express from 'express' +import state from "../state"; +const router = express.Router(); + +router.post('/', (req, res) => { + const {event, payload} = req.body; + + Object.values(state.windows).forEach(window => { + window.webContents.send('native-event', { event, payload }) + }) + + if (state.activeMenuBar?.window) { + state.activeMenuBar.window.webContents.send('native-event', { event, payload }) + } + + res.sendStatus(200) +}) + +export default router; From 844c33a2fa6fd3963bb85891034de3ae1df14b24 Mon Sep 17 00:00:00 2001 From: gwleuverink Date: Fri, 13 Sep 2024 02:08:22 +0200 Subject: [PATCH 2/6] Inject Native helper object in browser window --- src/preload/index.ts | 5 +++++ src/preload/native.ts | 13 +++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 src/preload/native.ts diff --git a/src/preload/index.ts b/src/preload/index.ts index f691e47..a7d702a 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -1,6 +1,11 @@ import { contextBridge, ipcRenderer } from 'electron' import * as remote from '@electron/remote' +import Native from './native'; + +// @ts-ignore +window.Native = Native; + // @ts-ignore window.remote = remote; diff --git a/src/preload/native.ts b/src/preload/native.ts new file mode 100644 index 0000000..ba44b2a --- /dev/null +++ b/src/preload/native.ts @@ -0,0 +1,13 @@ +import { ipcRenderer } from 'electron' + +export default { + on: (event, callback) => { + ipcRenderer.on('native-event', (_, data) => { + if(event !== data.event) { + return; + } + + callback(data.payload); + }) + } +} From d97c5ee5382bcec506f8a8fcf7036b9827f24a28 Mon Sep 17 00:00:00 2001 From: gwleuverink Date: Fri, 13 Sep 2024 02:36:46 +0200 Subject: [PATCH 3/6] Strip leading slashes before matching event name --- src/preload/native.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/preload/native.ts b/src/preload/native.ts index ba44b2a..a456de4 100644 --- a/src/preload/native.ts +++ b/src/preload/native.ts @@ -3,11 +3,14 @@ import { ipcRenderer } from 'electron' export default { on: (event, callback) => { ipcRenderer.on('native-event', (_, data) => { - if(event !== data.event) { - return; - } - callback(data.payload); + // Strip leading slashes + event = event.replace(/^(\\)+/, ''); + data.event = data.event.replace(/^(\\)+/, ''); + + if(event === data.event) { + return callback(data.payload); + } }) } } From 7d98bde17fdef0dcba895871fa7a31fa9fdc4390 Mon Sep 17 00:00:00 2001 From: gwleuverink Date: Fri, 13 Sep 2024 11:46:06 +0200 Subject: [PATCH 4/6] added event name as second callback parameter --- src/preload/native.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/preload/native.ts b/src/preload/native.ts index a456de4..d912e26 100644 --- a/src/preload/native.ts +++ b/src/preload/native.ts @@ -9,7 +9,7 @@ export default { data.event = data.event.replace(/^(\\)+/, ''); if(event === data.event) { - return callback(data.payload); + return callback(data.payload, event); } }) } From d11ba101988a96b1399f60a365e3b10be799eb3c Mon Sep 17 00:00:00 2001 From: gwleuverink Date: Sat, 14 Sep 2024 22:58:44 +0200 Subject: [PATCH 5/6] Dispatch events via notifyLaravel util to also menubar windows --- src/server/utils.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/server/utils.ts b/src/server/utils.ts index 575ccf6..45d88d1 100644 --- a/src/server/utils.ts +++ b/src/server/utils.ts @@ -30,6 +30,10 @@ export async function notifyLaravel(endpoint: string, payload = {}) { Object.values(state.windows).forEach(window => { window.webContents.send('native-event', payload); }) + + if (state.activeMenuBar?.window) { + state.activeMenuBar.window.webContents.send('native-event', payload) + } } } From 12eeea2d3ec862824eb17377dbc6a72825308203 Mon Sep 17 00:00:00 2001 From: gwleuverink Date: Sat, 14 Sep 2024 23:06:01 +0200 Subject: [PATCH 6/6] refactor - use the same util for all ipc events --- src/server/api/broadcasting.ts | 10 ++-------- src/server/api/debug.ts | 12 ++---------- src/server/utils.ts | 11 ++++++++--- 3 files changed, 12 insertions(+), 21 deletions(-) diff --git a/src/server/api/broadcasting.ts b/src/server/api/broadcasting.ts index 4013c07..86b5d98 100644 --- a/src/server/api/broadcasting.ts +++ b/src/server/api/broadcasting.ts @@ -1,17 +1,11 @@ import express from 'express' -import state from "../state"; +import { broadcastToWindows } from '../utils'; const router = express.Router(); router.post('/', (req, res) => { const {event, payload} = req.body; - Object.values(state.windows).forEach(window => { - window.webContents.send('native-event', { event, payload }) - }) - - if (state.activeMenuBar?.window) { - state.activeMenuBar.window.webContents.send('native-event', { event, payload }) - } + broadcastToWindows("native-event", { event, payload }); res.sendStatus(200) }) diff --git a/src/server/api/debug.ts b/src/server/api/debug.ts index 30be49a..049472f 100644 --- a/src/server/api/debug.ts +++ b/src/server/api/debug.ts @@ -1,19 +1,11 @@ import express from 'express' -import {app, Menu} from 'electron' -import {mapMenu} from "./helper"; -import state from "../state"; +import { broadcastToWindows } from '../utils'; const router = express.Router(); router.post('/log', (req, res) => { const {level, message, context} = req.body - Object.values(state.windows).forEach(window => { - window.webContents.send('log', {level, message, context}) - }) - - if (state.activeMenuBar?.window) { - state.activeMenuBar.window.webContents.send('log', {level, message, context}) - } + broadcastToWindows('log', {level, message, context}); res.sendStatus(200) }) diff --git a/src/server/utils.ts b/src/server/utils.ts index 45d88d1..bd28c20 100644 --- a/src/server/utils.ts +++ b/src/server/utils.ts @@ -27,14 +27,19 @@ export async function notifyLaravel(endpoint: string, payload = {}) { } if (endpoint === 'events') { + broadcastToWindows('native-event', payload); + } +} + +export function broadcastToWindows(event, payload) { + Object.values(state.windows).forEach(window => { - window.webContents.send('native-event', payload); + window.webContents.send(event, payload); }) if (state.activeMenuBar?.window) { - state.activeMenuBar.window.webContents.send('native-event', payload) + state.activeMenuBar.window.webContents.send(event, payload) } - } } /**