/** * Conversation service file * * Ensure that the content of the conversations is up to date * * @author Pierre HUBERT */ const ConvService = { /** * @var {Object} __serviceCache The service cache */ __serviceCache: false, /** * Initializate conversation service * * @return {Boolean} True for a success */ init: function(){ //Make sure the cache is empty this.emptyCache(); //Success return true; }, /** * Register a new conversation * * @param {Integer} conversationID The ID of the conversation to register * @return {Boolean} True for a success */ registerConversation: async function(conversationID){ try { //Create conversation object if(!this.__serviceCache) this.__serviceCache = {}; //Create service cache object // Get the last messages of the conversations const list = await ConversationsInterface.asyncRefreshSingle(conversationID, 0); //Register conversation locally this.__serviceCache['conversation-' + conversationID] = { conversationID: conversationID, first_message_id: list.length == 0 ? 0 : list[0].id, }; // Register conversation remotly await ConversationsInterface.register(conversationID) for(const msg of list) ConvChatWindow.addMessage(conversationID, msg); } catch(e) { console.error(e); notify("Could not open conversation!", "danger"); } }, /** * Unregister a conversation * * @param {Integer} conversationID The ID of the conversation to remove * @return {Boolean} True for a success */ unregisterConversation: async function(conversationID){ //Log action ComunicWeb.debug.logMessage("Unregistering conversation " + conversationID + " from service."); if(this.__serviceCache && this.__serviceCache['conversation-'+conversationID]){ delete this.__serviceCache['conversation-'+conversationID]; //Remove conversation } // Unregister remotly await ComunicWeb.components.conversations.interface.unregister(conversationID) }, /** * Get the oldest messages of a conversation * * @param {number} conversationID The ID of the target conversation * @return {numbert} The ID of the oldest message / -1 in case of failure */ getOldestMessageID: function(conversationID){ //Try to fetch information if(this.__serviceCache){ if(this.__serviceCache['conversation-'+conversationID]){ return this.__serviceCache['conversation-'+conversationID].first_message_id; } } //The conversation was not found return -1; }, /** * Set the oldest messages of a conversation * * @param {number} conversationID The ID of the target conversation * @param {numbert} firstMessageID New value for the first known message id */ setOldestMessageID: function(conversationID, firstMessageID){ //Try to fetch information if(this.__serviceCache){ if(this.__serviceCache['conversation-'+conversationID]){ this.__serviceCache['conversation-'+conversationID].first_message_id = firstMessageID; } } }, /** * Empty service cache (unregister all conversations) * * @return {Boolean} True for a success */ emptyCache: function(){ if(this.__serviceCache){ clearObject(this.__serviceCache); } //Success return true; }, } ComunicWeb.components.conversations.service = ConvService; //Register service cache ComunicWeb.common.cacheManager.registerCacheCleaner("ComunicWeb.components.conversations.service.emptyCache"); // Register to new messages document.addEventListener("newConvMessage", (e) => { const msg = e.detail; if(ConvService.__serviceCache.hasOwnProperty("conversation-" + msg.conv_id)) ConvChatWindow.addMessage(msg.conv_id, msg); })