From 460021760657298376c3ee7412978f58d97b57aa Mon Sep 17 00:00:00 2001 From: Jarne Date: Sat, 7 Oct 2023 14:27:24 +0200 Subject: [PATCH] Add basic window state persistance --- packages/bruno-electron/src/index.js | 12 ++++++-- .../bruno-electron/src/store/window-state.js | 21 ++++++++++++++ packages/bruno-electron/src/utils/window.js | 28 +++++++++++++++++++ 3 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 packages/bruno-electron/src/store/window-state.js create mode 100644 packages/bruno-electron/src/utils/window.js diff --git a/packages/bruno-electron/src/index.js b/packages/bruno-electron/src/index.js index 3f67b8a96..5e9916ef0 100644 --- a/packages/bruno-electron/src/index.js +++ b/packages/bruno-electron/src/index.js @@ -9,6 +9,7 @@ const LastOpenedCollections = require('./store/last-opened-collections'); const registerNetworkIpc = require('./ipc/network'); const registerCollectionsIpc = require('./ipc/collection'); const Watcher = require('./app/watcher'); +const { loadWindowState, saveWindowState } = require('./utils/window'); const lastOpenedCollections = new LastOpenedCollections(); @@ -27,9 +28,13 @@ let watcher; // Prepare the renderer once the app is ready app.on('ready', async () => { + const { x, y, width, height } = loadWindowState(); + mainWindow = new BrowserWindow({ - width: 1280, - height: 768, + x, + y, + width, + height, webPreferences: { nodeIntegration: true, contextIsolation: true, @@ -54,6 +59,9 @@ app.on('ready', async () => { mainWindow.loadURL(url); watcher = new Watcher(); + mainWindow.on('resize', () => saveWindowState(mainWindow)); + mainWindow.on('move', () => saveWindowState(mainWindow)); + mainWindow.webContents.on('new-window', function (e, url) { e.preventDefault(); require('electron').shell.openExternal(url); diff --git a/packages/bruno-electron/src/store/window-state.js b/packages/bruno-electron/src/store/window-state.js new file mode 100644 index 000000000..4b2520380 --- /dev/null +++ b/packages/bruno-electron/src/store/window-state.js @@ -0,0 +1,21 @@ +const _ = require('lodash'); +const Store = require('electron-store'); + +class WindowStateStore { + constructor() { + this.store = new Store({ + name: 'window-state', + clearInvalidConfig: true + }); + } + + getBounds() { + return this.store.get('window-bounds') || {}; + } + + setBounds(bounds) { + this.store.set('window-bounds', bounds); + } +} + +module.exports = WindowStateStore; diff --git a/packages/bruno-electron/src/utils/window.js b/packages/bruno-electron/src/utils/window.js new file mode 100644 index 000000000..db1aff11d --- /dev/null +++ b/packages/bruno-electron/src/utils/window.js @@ -0,0 +1,28 @@ +const WindowStateStore = require('../store/window-state'); + +const windowStateStore = new WindowStateStore(); + +const DEFAULT_WINDOW_WIDTH = 1280; +const DEFAULT_WINDOW_HEIGHT = 768; + +const loadWindowState = () => { + const bounds = windowStateStore.getBounds(); + + return { + x: bounds.x || undefined, + y: bounds.y || undefined, + width: bounds.width || DEFAULT_WINDOW_WIDTH, + height: bounds.height || DEFAULT_WINDOW_HEIGHT + }; +}; + +const saveWindowState = (window) => { + const bounds = window.getBounds(); + + windowStateStore.setBounds(bounds); +}; + +module.exports = { + loadWindowState, + saveWindowState +};