diff --git a/electron/electron-preload.js b/electron/electron-preload.js index 649efe9fa..29f1a10b4 100644 --- a/electron/electron-preload.js +++ b/electron/electron-preload.js @@ -33,27 +33,25 @@ contextBridge.exposeInMainWorld( request: (msg, callback, error) => { msg.reqId = reqId++; reqInfo[msg.reqId] = {callback: callback, error: error}; - - //TODO Maybe a special function for this better than this hack? - //File watch special case where the callback is called multiple times if (msg.action == 'watchFile') { fileChangedListeners[msg.path] = msg.listener; delete msg.listener; } - ipcRenderer.send('rendererReq', msg); }, - registerMsgListener: function (action, callback) { - ipcRenderer.on(action, function (event, args) { - callback(args); - }); - }, + sendMessage: function (action, args) { ipcRenderer.send(action, args); }, sendAsync: function (action, args) { return ipcRenderer.invoke(action, args) }, + + listener: function (action, callback) { + ipcRenderer.on(action, function (event, args) { + callback(args); + }); + }, listenOnce: function (action, callback) { ipcRenderer.once(action, function (event, args) { callback(args); diff --git a/electron/electron.js b/electron/electron.js index d16acb544..cfc705eaf 100644 --- a/electron/electron.js +++ b/electron/electron.js @@ -1261,24 +1261,15 @@ ipcMain.on('windowMax', (event) => { }) /** - * 给主窗口发送信息 - * @param args {channel, data} - */ -ipcMain.on('sendForwardMain', (event, args) => { - if (mainWindow) { - mainWindow.webContents.send(args.channel, args.data) - } - event.returnValue = "ok" -}) - -/** - * 窗口同步执行派遣 + * 给所有窗口广播指令(除了本身) * @param args {type, payload} */ -ipcMain.on('syncDispatch', (event, args) => { +ipcMain.on('broadcastCommand', (event, args) => { + const channel = args.channel || args.command + const payload = args.payload || args.data BrowserWindow.getAllWindows().forEach(window => { if (window.webContents.id !== event.sender.id) { - window.webContents.send('syncDispatch', args) + window.webContents.send(channel, payload) } }) event.returnValue = "ok" diff --git a/resources/assets/js/App.vue b/resources/assets/js/App.vue index d1b56fac2..7e87b78eb 100755 --- a/resources/assets/js/App.vue +++ b/resources/assets/js/App.vue @@ -440,13 +440,13 @@ export default { this.$store.dispatch("openWebTabWindow", url) return true } - this.$Electron.registerMsgListener('browserWindowBlur', _ => { + this.$Electron.listener('browserWindowBlur', _ => { this.$store.state.windowActive = false; }) - this.$Electron.registerMsgListener('browserWindowFocus', _ => { + this.$Electron.listener('browserWindowFocus', _ => { this.$store.state.windowActive = true; }) - this.$Electron.registerMsgListener('systemThemeChanged', _ => { + this.$Electron.listener('systemThemeChanged', _ => { this.autoTheme() }) $A.bindScreenshotKey(this.$store.state.cacheKeyboard); diff --git a/resources/assets/js/app.js b/resources/assets/js/app.js index 3e1905669..40e8b7bf0 100644 --- a/resources/assets/js/app.js +++ b/resources/assets/js/app.js @@ -217,14 +217,17 @@ $A.syncDispatch = (action, data) => { delete data.__sync__; return false } - $A.Electron?.sendMessage('syncDispatch', { - dispatchId, - action, - data, + $A.Electron?.sendMessage('broadcastCommand', { + channel: 'syncDispatch', + payload: { + dispatchId, + action, + data, + } }); return true }; -$A.Electron?.registerMsgListener('syncDispatch', async ({dispatchId: targetId, action, data}) => { +$A.Electron?.listener('syncDispatch', async ({dispatchId: targetId, action, data}) => { if (dispatchId === targetId) { return } diff --git a/resources/assets/js/components/RightBottom.vue b/resources/assets/js/components/RightBottom.vue index a675f00e8..ab9233821 100644 --- a/resources/assets/js/components/RightBottom.vue +++ b/resources/assets/js/components/RightBottom.vue @@ -70,7 +70,7 @@ export default { // if (this.$Electron) { emitter.on('updateNotification', this.onUpdateShow); - this.$Electron.registerMsgListener('updateDownloaded', info => { + this.$Electron.listener('updateDownloaded', info => { this.$store.state.clientNewVersion = info.version this.updateVersion = info.version; this.updateNote = info.releaseNotes || this.$L('没有更新描述。'); diff --git a/resources/assets/js/pages/manage.vue b/resources/assets/js/pages/manage.vue index 238fca26f..a43d406ba 100644 --- a/resources/assets/js/pages/manage.vue +++ b/resources/assets/js/pages/manage.vue @@ -1208,12 +1208,12 @@ export default { } // if (this.$Electron) { - this.$Electron.registerMsgListener('clickNotification', target => { + this.$Electron.listener('clickNotification', target => { console.log("[Notification] B Click", target); this.$Electron.sendMessage('mainWindowActive') this.notificationClick(target) }) - this.$Electron.registerMsgListener('replyNotification', target => { + this.$Electron.listener('replyNotification', target => { console.log("[Notification] B Reply", target); this.notificationReply(target) }) diff --git a/resources/assets/js/pages/single/reportEdit.vue b/resources/assets/js/pages/single/reportEdit.vue index 46b949dd3..7e350e7e9 100644 --- a/resources/assets/js/pages/single/reportEdit.vue +++ b/resources/assets/js/pages/single/reportEdit.vue @@ -35,12 +35,12 @@ export default { } }, methods: { - saveSuccess(data) { - this.detail = data; + saveSuccess(payload) { + this.detail = payload; if (this.$isSubElectron) { - $A.Electron.sendMessage('sendForwardMain', { + $A.Electron.sendMessage('broadcastCommand', { channel: 'reportSaveSuccess', - data, + payload, }); window.close(); } diff --git a/resources/assets/js/store/index.js b/resources/assets/js/store/index.js index 81184ae11..140ec76b3 100644 --- a/resources/assets/js/store/index.js +++ b/resources/assets/js/store/index.js @@ -12,5 +12,5 @@ export default new Vuex.Store({ state, getters, mutations, - actions, + actions })