]> Repos - mime-chat/commitdiff
save window size on close
authorEnrique Hernandez <hernandeze2@xavier.edu>
Fri, 19 Mar 2021 02:16:23 +0000 (21:16 -0500)
committerEnrique Hernandez <hernandeze2@xavier.edu>
Fri, 19 Mar 2021 02:16:23 +0000 (21:16 -0500)
src/App.vue
src/background/run.ts
src/background/window.ts
windowState.json [new file with mode: 0644]

index 165d108c732ca7afd94978993bbf6f97594c0cb7..137451387d27310d6a6cb172ae3c6d9ba1204176 100644 (file)
@@ -46,11 +46,16 @@ export default defineComponent({
         window.ipcRenderer.removeAllListeners('window-ready')
     })
 
-    const callNavbar = (action: string) => {
+    const saveWindowState = async () => {
+      await invoke('window-save', "");
+    }
+
+    const callNavbar = async (action: string) => {
 
       // save messages before closing.
       if (action === 'close') {
         saveMessages();
+        await saveWindowState();
       }
 
       invoke('nav-bar', action);
index 55aad46ca8d05965b7a47acb53d830a5d6487834..a007ad5be989fe375abc0e3341730a020baa340e 100644 (file)
@@ -12,11 +12,7 @@ let socket = false;
 export async function main() {
 
     // create main window.
-    await createWindow({
-        width: 600,
-        height: 500,
-        resizable: true
-    });
+    await createWindow();
 
     // Instantiate socket session with crimata-platorm.
     if (!socket) initSession();
index 27aac38f10816976aada6bbae7cb47d325c3ab7b..d46da182ab0cd8caafd8f4b564ed298d084dc24b 100644 (file)
@@ -5,12 +5,7 @@ import { createProtocol } from "vue-cli-plugin-electron-builder/lib";
 import { backgroundMitt } from './emitter';
 import { RenderMessage } from "@/types/message/index";
 import * as path from "path";
-
-interface WindowSettings {
-  width: number;
-  height: number;
-  resizable: boolean;
-}
+import fs from 'fs';
 
 interface IpcRendererPayload {
   endpoint: string;
@@ -40,12 +35,28 @@ const renderMessage = (payload: IpcRendererPayload): void => {
     }
 }
 
+const onWindowSave = (_event, _s: string) => {
+    if (win) {
+       const bounds = win.getBounds();
+       const state = JSON.stringify({w: bounds.width, h: bounds.height});
+
+       fs.writeFile('windowstate.json', state, (err: Error) => {
+          if (err) throw err;      
+          return;
+       }); 
+    }    
+
+}
+
 // Do this on window mount.
 const windowMount = (): void => {
     backgroundMitt.emit('window-active', true);
     // handle win nav-bar event.
     ipcMain.removeHandler('nav-bar'); // avoid setting duplicate handlers
     ipcMain.handle('nav-bar', navBarHandler);
+
+    ipcMain.removeHandler('window-save'); // avoid setting duplicate handlers
+    ipcMain.handle('window-save', onWindowSave);
     // render messages through ipc-renderer.
     backgroundMitt.on('ipc-renderer', renderMessage);
 }
@@ -57,16 +68,20 @@ const windowDismount = (): void => {
 }
 
 // function used by run.ts to create the main window.
-export async function createWindow(options: WindowSettings): Promise<void> {
+export async function createWindow(): Promise<void> {
   return new Promise((resolve, _reject) => {
 
     // avoid creating duplicate windows.
     if (win) resolve();
 
+    // read windowState from json.
+    const rawData = fs.readFileSync('windowState.json');
+    const windowState = JSON.parse(rawData);
+
     win = new BrowserWindow({
-      width: options.width,
-      height: options.height,
-      resizable: options.resizable,
+      width: windowState.w,
+      height: windowState.h,
+      resizable: true,
       backgroundColor: '#EBEBEB',
       frame: false,
       minWidth: 350,
diff --git a/windowState.json b/windowState.json
new file mode 100644 (file)
index 0000000..d637d9e
--- /dev/null
@@ -0,0 +1 @@
+{"w":352,"h":500}
\ No newline at end of file