]> Repos - mime-chat/commitdiff
save window stats on all close types
authorAndrew Gundersen <gundersena@xavier.edu>
Sat, 20 Mar 2021 17:33:55 +0000 (12:33 -0500)
committerAndrew Gundersen <gundersena@xavier.edu>
Sat, 20 Mar 2021 17:33:55 +0000 (12:33 -0500)
src/background/window.ts
src/modules/messages.ts
src/modules/scroll.ts
src/views/messenger.vue
windowState.json

index a34427ba609b687b28b44e18d0c049ff776a34b7..f3027468cb24437bbda8b9289d924f43e1470d93 100644 (file)
@@ -19,7 +19,6 @@ const onNavBar = (_event: any, action: string): void => {
   console.log("onNavBar")
   if (win) {
     if (action === "close") {
-      saveWindowState()
       win.close()
     } else {
       win.minimize()
@@ -54,7 +53,7 @@ const saveWindowState = () => {
        fs.writeFile('windowState.json', state, (err) => {
           if (err) throw err;      
           return;
-       }); 
+       });
     }    
 }
 
@@ -62,7 +61,7 @@ const saveWindowState = () => {
 const onWindowMount = (): void => {
     backgroundMitt.emit('window-active', true);
 
-    // handle win nav-bar event.
+    // Handle win nav-bar event.
     ipcMain.removeHandler('nav-bar'); // avoid setting duplicate handlers
     ipcMain.handle('nav-bar', onNavBar);
     
@@ -115,6 +114,10 @@ export async function createWindow(): Promise<void> {
     // Handle window close.
     win.on("closed", onWindowDismount);
 
+    // Save window state on resize and move.
+    win.on("moved", saveWindowState);
+    win.on("resize", saveWindowState);
+
     win.once('ready-to-show', () => {
       if (win) win.show()
     })
index 52953e5c6462e81c1407b756c87bc5b209895551..c6e3a949d9fa30329de6830fe812d4e719dc36de 100644 (file)
@@ -2,27 +2,7 @@ import { ref } from 'vue';
 import useScroll from "@/modules/scroll";
 import { RenderMessage, Annotation } from "@/types/message/index";
 
-const messagesKey = "CRIMATA_MESSAGES";
-const sizeLimit = 200;
-
-// list of messages where the first item is the oldest message.
-const messages = ref(new Map());
-
-// Get stored messages.
-const messagesString = window.localStorage.getItem(messagesKey);
-
-if (messagesString) {
-  // parse stored messages.
-  const parsed = JSON.parse(messagesString);
-  // set messages.
-  messages.value = new Map(Object.entries(parsed));
-}
-
-// Remove oldest message from the messages map. 
-function deleteOldest() { 
-   const lastKey = Array.from(messages.value.keys()).shift();
-   messages.value.delete(lastKey);
-}
+const messages = ref(new Map()); // ze messages.
 
 //---Message Grouping-----------------------------------------------
 
@@ -70,20 +50,42 @@ const updateGrouping = (currentMessageRef: string) => {
 export default function useMessages() {
 
     // Control the scrolling.
-    const { updateScrollRef, adjustScroll } = useScroll("messenger");
+    const {
+      setScroll, 
+      updateScrollRef, 
+      adjustScroll 
+    } = useScroll("messenger");
 
     // Save message to local storage.
     const saveMessages = () => {
         const messageData = Object.fromEntries(messages.value);
-        window.localStorage.setItem(messagesKey, JSON.stringify(messageData));
+        window.localStorage.setItem("crimata_messages", JSON.stringify(messageData));
+    }
+
+    // Load messages from local storage.
+    const loadMessages = () => {
+      const rawData = window.localStorage.getItem("crimata_messages");
+
+      if (rawData) {
+        const messageData = JSON.parse(rawData)
+        messages.value = new Map(Object.entries(messageData));
+      }
+
+    }
+
+    // Remove oldest message from the messages map. 
+    function popMessage() { 
+       const lastKey = Array.from(messages.value.keys()).shift();
+       messages.value.delete(lastKey);
     }
 
     // Add a new message to the view.
     const addMessage = (message: RenderMessage) => {
       updateScrollRef()
 
-      if (messages.value.size >= sizeLimit) {
-        deleteOldest();
+      // Size limit of 200.
+      if (messages.value.size >= 200) {
+        popMessage();
       }
 
       messages.value.set(message.uid, message);
@@ -106,10 +108,15 @@ export default function useMessages() {
         saveMessages()
     }
 
+    loadMessages()
+    setTimeout(setScroll, 1000);
+    console.log("loaded messages")
+
     return {
       messages,
       saveMessages,
       addMessage,
-      updateMessage
+      updateMessage, 
+      loadMessages
     }
 }
\ No newline at end of file
index 800d3b03aed2650d6f4e0abfecd0b95534c9391f..e9e6501f8d53e6dbb4ef931cf9b01b447f70cf0a 100644 (file)
@@ -4,6 +4,18 @@ export default function useScroll(element: string) {
 
   let isScrolledToBottom: boolean;
 
+  // Set the initial scroll position.
+  const setScroll = () => {
+    const view = document.getElementById(element)
+
+    if (view) {
+      view.scrollTo({
+        top: view.scrollHeight - view.clientHeight,
+        behavior: 'smooth'
+      });
+    }
+  }
+
   // Update isScrolledToBottom
   const updateScrollRef = () => {
     const view = document.getElementById(element)
@@ -31,7 +43,8 @@ export default function useScroll(element: string) {
 
   return {
     updateScrollRef,
-    adjustScroll
+    adjustScroll, 
+    setScroll,
   }
   
 }
index 5c28758d55c3072f325a16d23a23cb5c3c23b117..5b7d5155079e6f09e27821ff8a21d2e7747e5cbe 100644 (file)
@@ -36,7 +36,6 @@ export default defineComponent({
       messages, 
       addMessage, 
       updateMessage,
-      saveMessages
     } = useMessages();
 
     // Alter existing message.
index 7289e3d3b6f55df397b50977a2de3bb0c9961bbf..8e8aa570a9d44b4898627023890fc8d360d4d5c5 100644 (file)
@@ -1 +1 @@
-{"w":432,"h":702,"x":1753,"y":477}
\ No newline at end of file
+{"w":350,"h":807,"x":1770,"y":453}
\ No newline at end of file