qt-chat-app

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

MessageCache.qml (2030B)


      1 import QtQuick
      2 
      3 // Singleton-like persistent message cache
      4 QtObject {
      5     id: root
      6 
      7     // Map of chatId -> array of messages
      8     property var messagesByChat: ({})
      9 
     10     // Get messages for a specific chat
     11     function getMessages(chatId) {
     12         if (!messagesByChat) {
     13             messagesByChat = {}
     14         }
     15         if (!messagesByChat[chatId]) {
     16             messagesByChat[chatId] = []
     17         }
     18         return messagesByChat[chatId]
     19     }
     20 
     21     // Add a message to a specific chat
     22     function addMessage(chatId, messageData) {
     23         if (!messagesByChat[chatId]) {
     24             messagesByChat[chatId] = []
     25         }
     26 
     27         // Check for duplicates
     28         var messages = messagesByChat[chatId]
     29         for (var i = 0; i < messages.length; i++) {
     30             if (messages[i].id === messageData.id) {
     31                 return false
     32             }
     33         }
     34 
     35         messages.push(messageData)
     36         messagesByChat[chatId] = messages
     37         return true
     38     }
     39 
     40     // Set all messages for a chat (from fetch)
     41     function setMessages(chatId, messagesArray) {
     42         messagesByChat[chatId] = messagesArray.slice() // Create a copy
     43     }
     44 
     45     // Prepend older messages (for pagination)
     46     function prependMessages(chatId, messagesArray) {
     47         if (!messagesByChat[chatId]) {
     48             messagesByChat[chatId] = []
     49         }
     50         messagesByChat[chatId] = messagesArray.concat(messagesByChat[chatId])
     51     }
     52 
     53     // Clear messages for a chat
     54     function clearMessages(chatId) {
     55         messagesByChat[chatId] = []
     56     }
     57 
     58     // Listen for SSE messages
     59     Connections {
     60         target: NetworkManager
     61         function onMessageReceived(messageData) {
     62             var chatId = messageData.chat_id
     63             if (chatId === undefined || chatId < 0) {
     64                 return
     65             }
     66 
     67             root.addMessage(chatId, messageData)
     68             root.messageAdded(chatId, messageData)
     69         }
     70     }
     71 
     72     // Signal when a message is added (so views can refresh)
     73     signal messageAdded(int chatId, var messageData)
     74 }