save window stats on all close types

This commit is contained in:
Andrew Gundersen 2021-03-20 12:33:55 -05:00
commit e7fd5a0bfa
5 changed files with 54 additions and 32 deletions

View 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()
})

View 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
}
}

View 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,
}
}

View file

@ -36,7 +36,6 @@ export default defineComponent({
messages,
addMessage,
updateMessage,
saveMessages
} = useMessages();
// Alter existing message.

View file

@ -1 +1 @@
{"w":432,"h":702,"x":1753,"y":477}
{"w":350,"h":807,"x":1770,"y":453}