save window stats on all close types
This commit is contained in:
parent
fe44d23453
commit
e7fd5a0bfa
5 changed files with 54 additions and 32 deletions
|
|
@ -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()
|
||||
})
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
@ -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,
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,7 +36,6 @@ export default defineComponent({
|
|||
messages,
|
||||
addMessage,
|
||||
updateMessage,
|
||||
saveMessages
|
||||
} = useMessages();
|
||||
|
||||
// Alter existing message.
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
{"w":432,"h":702,"x":1753,"y":477}
|
||||
{"w":350,"h":807,"x":1770,"y":453}
|
||||
Loading…
Reference in a new issue