Forráskód Böngészése

avoid unnecessary config writes

Eugene Pankov 3 éve
szülő
commit
5d383eea04

+ 12 - 8
app/lib/app.ts

@@ -1,4 +1,4 @@
-import { app, ipcMain, Menu, Tray, shell, screen, globalShortcut, MenuItemConstructorOptions } from 'electron'
+import { app, ipcMain, Menu, Tray, shell, screen, globalShortcut, MenuItemConstructorOptions, WebContents } from 'electron'
 import promiseIpc from 'electron-promise-ipc'
 import * as remote from '@electron/remote/main'
 import { exec } from 'mz/child_process'
@@ -31,13 +31,9 @@ export class Application {
         this.useBuiltinGraphics()
         this.ptyManager.init(this)
 
-        ipcMain.on('app:config-change', (_event, config) => {
-            this.broadcast('host:config-change', config)
-            this.configStore = config
-        })
-
-        ipcMain.on('app:save-config', (_event, data) => {
-            saveConfig(data)
+        ipcMain.on('app:save-config', async (event, config) => {
+            await saveConfig(config)
+            this.broadcastExcept('host:config-change', event.sender, config)
         })
 
         ipcMain.on('app:register-global-hotkey', (_event, specs) => {
@@ -171,6 +167,14 @@ export class Application {
         }
     }
 
+    broadcastExcept (event: string, except: WebContents, ...args: any[]): void {
+        for (const window of this.windows) {
+            if (window.webContents.id === except.id) {
+                window.send(event, ...args)
+            }
+        }
+    }
+
     async send (event: string, ...args: any[]): Promise<void> {
         if (!this.hasWindows()) {
             await this.newWindow()

+ 4 - 1
app/lib/window.ts

@@ -1,7 +1,7 @@
 import * as glasstron from 'glasstron'
 
 import { Subject, Observable, debounceTime } from 'rxjs'
-import { BrowserWindow, app, ipcMain, Rectangle, Menu, screen, BrowserWindowConstructorOptions, TouchBar, nativeImage } from 'electron'
+import { BrowserWindow, app, ipcMain, Rectangle, Menu, screen, BrowserWindowConstructorOptions, TouchBar, nativeImage, WebContents } from 'electron'
 import ElectronConfig = require('electron-config')
 import { enable as enableRemote } from '@electron/remote/main'
 import * as os from 'os'
@@ -33,6 +33,7 @@ const activityIcon = nativeImage.createFromPath(`${app.getAppPath()}/assets/acti
 export class Window {
     ready: Promise<void>
     isMainWindow = false
+    webContents: WebContents
     private visible = new Subject<boolean>()
     private closed = new Subject<void>()
     private window?: GlasstronWindow
@@ -102,6 +103,8 @@ export class Window {
             this.window = new glasstron.BrowserWindow(bwOptions)
         }
 
+        this.webContents = this.window.webContents
+
         this.window.once('ready-to-show', () => {
             if (process.platform === 'darwin') {
                 this.window.setVibrancy(macOSVibrancyType)

+ 0 - 6
tabby-core/src/api/hostApp.ts

@@ -38,12 +38,6 @@ export abstract class HostAppService {
 
     abstract newWindow (): void
 
-    /**
-     * Notifies other windows of config file changes
-     */
-    // eslint-disable-next-line @typescript-eslint/no-empty-function
-    broadcastConfigChange (_configStore: Record<string, any>): void { }
-
     // eslint-disable-next-line @typescript-eslint/no-empty-function
     emitReady (): void { }
 

+ 0 - 1
tabby-core/src/services/config.service.ts

@@ -205,7 +205,6 @@ export class ConfigService {
         cleanStore = await this.maybeEncryptConfig(cleanStore)
         await this.platform.saveConfig(yaml.dump(cleanStore))
         this.emitChange()
-        this.hostApp.broadcastConfigChange(JSON.parse(JSON.stringify(this.store)))
     }
 
     /**

+ 0 - 7
tabby-electron/src/services/hostApp.service.ts

@@ -58,13 +58,6 @@ export class ElectronHostAppService extends HostAppService {
         this.electron.ipcRenderer.send('app:new-window')
     }
 
-    /**
-     * Notifies other windows of config file changes
-     */
-    broadcastConfigChange (configStore: Record<string, any>): void {
-        this.electron.ipcRenderer.send('app:config-change', configStore)
-    }
-
     saveConfig (data: string): void {
         this.electron.ipcRenderer.send('app:save-config', data)
     }