]> Repos - mime-chat/commitdiff
update grouping logout
authorAndrew Gundersen <gundersena@xavier.edu>
Mon, 22 Mar 2021 14:12:09 +0000 (09:12 -0500)
committerAndrew Gundersen <gundersena@xavier.edu>
Mon, 22 Mar 2021 14:12:09 +0000 (09:12 -0500)
src/App.vue
src/background/session.ts
src/background/window.ts
src/components/inputItem/inputItem.vue
src/modules/auth.ts
src/modules/messages.ts
src/views/messenger.vue
windowState.json

index 116efb189a0b56654df1d7476b9a850ddb39cd6a..c60eb6c247fed23e304aceeb1df875cae9c4cbc3 100644 (file)
@@ -34,6 +34,7 @@ export default defineComponent({
   components: { Splash },
 
   setup() {
+    
 
     // Show spash screen til true.
     const ready = ref(false);
index 766df034aa6654a20d54188078b09f40a2e5c6ec..49ddb13e61226e1ab92e84065f67e296667ad671 100644 (file)
@@ -86,7 +86,7 @@ const handleStandardMessage = (m: StandardMessage) => {
 
 const handleAnnotationMessage = (message: Annotation) => {
     backgroundMitt.emit('ipc-renderer', {
-        endpoint: 'annotate-message',
+        endpoint: 'render-message',
         message: message 
     });
 }
@@ -102,6 +102,7 @@ const onMessage = (messageStr: string): void => {
     }
 
     const message = JSON.parse(messageStr)
+    console.log("New message:")
     console.log(message)
 
     if (message.content) {
@@ -159,7 +160,7 @@ export function initSession(): void {
     socket.on('open', () => {
         console.log('Connected to Crimata Servers.');
 
-        // call auth renderer event on connection
+        // Try to authenticate token right away.
         backgroundMitt.emit('ipc-renderer', {
             endpoint: 'auth',
             message: null
index f3027468cb24437bbda8b9289d924f43e1470d93..cc669ebcd9652a29af803ca8e7b6d18bf21bfb7f 100644 (file)
@@ -54,7 +54,7 @@ const saveWindowState = () => {
           if (err) throw err;      
           return;
        });
-    }    
+    }
 }
 
 // Do this on window mount.
index 4dc34095a0fe4dbf0835660a9f6312f152c6186e..c2d2c90807b3ef642a16b1eb2d9731d037e306d6 100644 (file)
@@ -42,6 +42,10 @@ export default defineComponent({
     // Mark input item with user's initials.
     const initials = ref("")
 
+    // Set initials.
+    const initialData = window.localStorage.getItem("initials")
+    if (initialData) initials.value = initialData
+
     // Default values for position.
     const xStart = 15;
     const yStart = window.innerHeight - 200;
@@ -56,6 +60,7 @@ export default defineComponent({
     // Update profile functionality.
     const onUpdateProfile = (_event: any, payload: any) => {
       initials.value = payload.message.first[0] + payload.message.last[0]
+      window.localStorage.setItem("initials", initials.value)
     }
 
     onMounted(() => {
index 1baacda67153352a9a12925c5a223b72e2c949fc..f1481f2ed1015a2f7712893c281d0299e282f841 100644 (file)
@@ -21,8 +21,10 @@ if (token) {
     window.localStorage.setItem(AUTH_KEY, token);
 }
 
+// Load key and invoke onAuthSession to try key-login.
 const authToken = async () => {
-   const { invoke  } = useIpc();
+    console.log("Calling auth token.")
+    const { invoke  } = useIpc();
     try {
         token = window.localStorage.getItem(AUTH_KEY);
 
@@ -43,7 +45,7 @@ const authToken = async () => {
     }
 }
 
-// authenticate on auth event
+// Gets called on socket open.
 window.ipcRenderer.on("auth", async (_event, _arg) => {
     await authToken();
 });
index c6e3a949d9fa30329de6830fe812d4e719dc36de..7f4d79ce22828422b3743f75c5dec041bbc469ad 100644 (file)
@@ -2,121 +2,102 @@ import { ref } from 'vue';
 import useScroll from "@/modules/scroll";
 import { RenderMessage, Annotation } from "@/types/message/index";
 
-const messages = ref(new Map()); // ze messages.
+const messages = ref(new Map());
 
-//---Message Grouping-----------------------------------------------
+const addMessage = (message: RenderMessage) => {
+  messages.value.set(message.uid, message)
+}
 
-let prevRef: string;
-let activeGroup = false;
+const updateMessage = (annotation: Annotation) => {
+  const message = messages.value.get(annotation.uid)
+  message.context = annotation.context
+  message.content.text = annotation.text
+}
 
-const updateGrouping = (currentMessageRef: string) => {
-  if (prevRef) {
+const loadMessages = () => {
+  const rawData = window.localStorage.getItem("crimata_messages");
+  if (rawData) {
+    const messageData = JSON.parse(rawData)
+    messages.value = new Map(Object.entries(messageData));
+  }
+}
 
-    // Get references to the two most recent messages.
-    const prev = messages.value.get(prevRef)
-    const current = messages.value.get(currentMessageRef)
+const saveMessages = () => {
+  const messageData = Object.fromEntries(messages.value);
+  window.localStorage.setItem("crimata_messages", JSON.stringify(messageData));
+}
 
-    // See if they should be grouped.
-    if (current.time < prev.time + 20000) {
-      if (prev.modifier === current.modifier) {
-        if (prev.context === current.context) {
+const isSimmilar = (messageA: RenderMessage, messageB: RenderMessage) => {
+  if ((Math.abs(messageA.time - messageB.time) < 20000) && (messageA.modifier == messageB.modifier) && (messageA.context == messageB.context)) {
+    return true
+  }
+  return false
+}
 
-          // Update grouping accordingly.
-          if (activeGroup) {
-            prev.isChild = "middle";
-          } 
+const updateGrouping = () => {
+  console.log("updating grouping")
+  const refs = Array.from(messages.value.keys())
 
-          else {
-            prev.isChild = "first";
-          }
+  // Get the last three messages.
+  const first = messages.value.get(refs[refs.length - 1]) 
+  const second = messages.value.get(refs[refs.length - 2]) 
+  const third = messages.value.get(refs[refs.length - 3])
 
-          current.isChild = "last";
-          activeGroup = true;
-        }
+  // If messages are simmilar, update the classes.
+  if ((first) && (second)) {
+    if (isSimmilar(first, second)) {
+      first.isChild = "last" // i.e. last in group.
+      second.isChild = "first"
 
-        // If messages unrealated, reset activeGroup.
-        else {
-          activeGroup = false;
+      if (third) {
+        if ((third.isChild == "first") || (third.isChild == "middle")) {
+          second.isChild = "middle"
         }
       }
     }
   }
-  prevRef = currentMessageRef;
 }
 
-//------------------------------------------------------------------
+const { setScroll, updateScrollRef, adjustScroll } = useScroll("messenger");
+
+loadMessages()
+setTimeout(setScroll, 1000);
 
 
 export default function useMessages() {
 
-    // Control the scrolling.
-    const {
-      setScroll, 
-      updateScrollRef, 
-      adjustScroll 
-    } = useScroll("messenger");
-
-    // Save message to local storage.
-    const saveMessages = () => {
-        const messageData = Object.fromEntries(messages.value);
-        window.localStorage.setItem("crimata_messages", JSON.stringify(messageData));
-    }
+    // Main function for updating the message view.
+    const updateMessageView = (message: RenderMessage | Annotation) => {
 
-    // Load messages from local storage.
-    const loadMessages = () => {
-      const rawData = window.localStorage.getItem("crimata_messages");
+      // Step 1: See if user is scrolled down.
+      updateScrollRef()
 
-      if (rawData) {
-        const messageData = JSON.parse(rawData)
-        messages.value = new Map(Object.entries(messageData));
+      // Step 2: Add the new content to the view.
+      if ("content" in message) {
+        addMessage(message)
+      } else {
+        updateMessage(message)
       }
 
-    }
-
-    // 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()
-
-      // Size limit of 200.
+      // Step 3: Pop off oldest message (if > 200).
       if (messages.value.size >= 200) {
-        popMessage();
-      }
+        const oldest = Array.from(messages.value.keys()).shift();
+        messages.value.delete(oldest);
+      };
 
-      messages.value.set(message.uid, message);
+      // Step 4: Update grouping.
+      updateGrouping()
 
+      // Setp 5: Scroll the view (if scrolled down).
       setTimeout(adjustScroll, 20);
-      updateGrouping(message.uid)
-      saveMessages()
-    }
-
-    // Update an existing message in the view.
-    const updateMessage = (a: Annotation) => {
-        updateScrollRef()
 
-        // update message if in the map.
-        const message = messages.value.get(a.uid)
-        message.context = a.context
-        message.content.text = a.text
+      // Step 6: Save the view data.
+      saveMessages()
 
-        setTimeout(adjustScroll, 20);
-        saveMessages()
     }
 
-    loadMessages()
-    setTimeout(setScroll, 1000);
-    console.log("loaded messages")
-
     return {
       messages,
-      saveMessages,
-      addMessage,
-      updateMessage, 
-      loadMessages
+      updateMessageView
     }
-}
\ No newline at end of file
+};
\ No newline at end of file
index 5b7d5155079e6f09e27821ff8a21d2e7747e5cbe..318c5cf2720aef871e1adc22bbfdeda50620bde6 100644 (file)
@@ -32,30 +32,20 @@ export default defineComponent({
     const { emitter } = useMitt();
 
     // Handle messages in view.
-    const { 
-      messages, 
-      addMessage, 
-      updateMessage,
-    } = useMessages();
-
-    // Alter existing message.
-    const onAnnotateMessage = (_event: any, payload: any) => {
-      updateMessage(payload.message);
-    }
+    const { messages, updateMessageView } = useMessages();
 
-    // Render new message.
-    const onRenderMessage = (_event: any, payload: any) => { 
-      addMessage(payload.message);
+    // Update message view on new content.
+    const onNewContent = (_event: any, payload: any) => {
+      updateMessageView(payload.message)
     }
 
     onMounted(() => {
 
       // Front end listener.
-      emitter.on('self-message', (message) => addMessage(message));
+      emitter.on('self-message', (message) => updateMessageView(message));
 
       // Back end listener.
-      window.ipcRenderer.on("render-message", onRenderMessage);
-      window.ipcRenderer.on("annotate-message", onAnnotateMessage);
+      window.ipcRenderer.on("render-message", onNewContent);
 
     });
 
index 8e8aa570a9d44b4898627023890fc8d360d4d5c5..9b3dcc5516c8d7b5b702dbf4d0f1f396e507672f 100644 (file)
@@ -1 +1 @@
-{"w":350,"h":807,"x":1770,"y":453}
\ No newline at end of file
+{"w":735,"h":510,"x":1354,"y":513}
\ No newline at end of file