From e7fd5a0bfab1a283cb9ecd660196d717469fb9e4 Mon Sep 17 00:00:00 2001 From: Andrew Gundersen Date: Sat, 20 Mar 2021 12:33:55 -0500 Subject: [PATCH] save window stats on all close types --- src/background/window.ts | 9 ++++-- src/modules/messages.ts | 59 ++++++++++++++++++++++------------------ src/modules/scroll.ts | 15 +++++++++- src/views/messenger.vue | 1 - windowState.json | 2 +- 5 files changed, 54 insertions(+), 32 deletions(-) diff --git a/src/background/window.ts b/src/background/window.ts index a34427b..f302746 100644 --- a/src/background/window.ts +++ b/src/background/window.ts @@ -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 { // 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() }) diff --git a/src/modules/messages.ts b/src/modules/messages.ts index 52953e5..c6e3a94 100644 --- a/src/modules/messages.ts +++ b/src/modules/messages.ts @@ -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 diff --git a/src/modules/scroll.ts b/src/modules/scroll.ts index 800d3b0..e9e6501 100644 --- a/src/modules/scroll.ts +++ b/src/modules/scroll.ts @@ -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, } } diff --git a/src/views/messenger.vue b/src/views/messenger.vue index 5c28758..5b7d515 100644 --- a/src/views/messenger.vue +++ b/src/views/messenger.vue @@ -36,7 +36,6 @@ export default defineComponent({ messages, addMessage, updateMessage, - saveMessages } = useMessages(); // Alter existing message. diff --git a/windowState.json b/windowState.json index 7289e3d..8e8aa57 100644 --- a/windowState.json +++ b/windowState.json @@ -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 -- 2.43.0