console.log("onNavBar")
if (win) {
if (action === "close") {
- saveWindowState()
win.close()
} else {
win.minimize()
fs.writeFile('windowState.json', state, (err) => {
if (err) throw err;
return;
- });
+ });
}
}
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);
// 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()
})
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-----------------------------------------------
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);
saveMessages()
}
+ loadMessages()
+ setTimeout(setScroll, 1000);
+ console.log("loaded messages")
+
return {
messages,
saveMessages,
addMessage,
- updateMessage
+ updateMessage,
+ loadMessages
}
}
\ No newline at end of file
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)
return {
updateScrollRef,
- adjustScroll
+ adjustScroll,
+ setScroll,
}
}