avoid unnecessary config writes

This commit is contained in:
Eugene Pankov 2022-07-30 00:03:56 +02:00
parent 5bbb5e9210
commit 5d383eea04
No known key found for this signature in database
GPG Key ID: 5896FCBBDD1CF4F4
5 changed files with 16 additions and 23 deletions

View File

@ -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()

View File

@ -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)

View File

@ -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 { }

View File

@ -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)))
}
/**

View File

@ -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)
}