Prepared service to refresh conversations

This commit is contained in:
Pierre 2017-06-24 19:23:55 +02:00
parent 0b0f91275a
commit ce4502b571
3 changed files with 145 additions and 9 deletions

View File

@ -75,7 +75,13 @@ ComunicWeb.components.conversations.chatWindows = {
//Debug
infosBox.boxBody.innerHTML = "<div class='direct-chat-messages'>Hello world</p>";
//Create messages contener
infosBox.messagesArea = createElem2({
appendTo: infosBox.boxBody,
type: "div",
class: "direct-chat-messages",
innerHTML: "<p>Loading, please wait...</p>",
});
//Add button to get conversation members
infosBox.membersButton = createElem("button");
@ -221,6 +227,10 @@ ComunicWeb.components.conversations.chatWindows = {
* @return {Boolean} True for a success
*/
load: function(conversationID, conversationWindow){
//Log action
ComunicWeb.debug.logMessage("Loading conversation " + conversationID);
//Change conversation window name (loading state)
this.changeName("Loading", conversationWindow);
@ -265,6 +275,9 @@ ComunicWeb.components.conversations.chatWindows = {
//Display conversation settings pane
ComunicWeb.components.conversations.chatWindows.showConversationSettings(conversationInfos);
//Register the conversation in the service
ComunicWeb.components.conversations.service.registerConversation(conversationID);
//Make send a message button lives
conversationInfos.box.sendMessageForm.formRoot.onsubmit = function(){
@ -299,6 +312,16 @@ ComunicWeb.components.conversations.chatWindows = {
//Log action
ComunicWeb.debug.logMessage("Unloading a conversation: " + conversationID);
//Get informations
var conversationInfos = this.__conversationsCache["conversation-"+conversationID];
//Empty messages area
emptyElem(conversationInfos.box.messagesArea);
conversationInfos.box.messagesArea.innerHTML = "<p>Reloading, please wait...</p>";
//Un-register conversation
ComunicWeb.components.conversations.service.unregisterConversation(conversationID);
//Remove informations if required
if(!keepInfos){
delete this.__conversationsCache["conversation-"+conversationID];

View File

@ -64,6 +64,9 @@ ComunicWeb.components.conversations.manager = {
//First, add the "open a conversation" new
this.addOpenConversationButton(conversationsContainerElem);
//Intializate conversation service
ComunicWeb.components.conversations.service.init();
//Then, open any already active conversation
var openedConversations = ComunicWeb.components.conversations.cachingOpened.getAll();
@ -73,9 +76,6 @@ ComunicWeb.components.conversations.manager = {
ComunicWeb.components.conversations.chatWindows.openConversation(openedConversations[i]);
}
//Intializate conversation service
ComunicWeb.components.conversations.service.init();
},
/**

View File

@ -9,10 +9,15 @@
ComunicWeb.components.conversations.service = {
/**
* @var {Integer} intervalID The ID of the current service interval
* @var {Integer} __intervalID The ID of the current service interval
*/
__intervalID: false,
/**
* @var {Object} __serviceCache The service cache
*/
__serviceCache: false,
/**
* Initializate conversation service
*
@ -20,6 +25,9 @@ ComunicWeb.components.conversations.service = {
*/
init: function(){
//Make sure the cache is empty
this.emptyCache();
//Check if an interval already exists or not
if(this.__intervalID)
clearInterval(this.__intervalID); //Remove old interval
@ -27,7 +35,7 @@ ComunicWeb.components.conversations.service = {
//Initializate interval
this.__intervalID = setInterval(function(){
ComunicWeb.components.conversations.service.call();
}, 1500);
}, 2000);
ComunicWeb.common.cacheManager.registerInterval(this.__intervalID);
//Success
@ -40,6 +48,111 @@ ComunicWeb.components.conversations.service = {
* @return {Boolean} True for a success
*/
call: function(){
console.log("Conversation service called !");
//Check if the conversation element still exists or not
if(!byId("conversationsElem")){
ComunicWeb.debug.logMessage("Conversation Service : Couldn't locate conversation element, unregistering service !");
clearInterval(this.__intervalID);
return false;
}
//Perform service task
this.performTask();
},
/**
* Perform service task
*
* @return {Boolean} True for a success
*/
performTask: function(){
console.log(this.__serviceCache);
//Prepare API request
var newConversations = [];
var conversationsToRefresh = {}
//Process each conversation
var i;
for(i in this.__serviceCache){
//Extract conversation ID
var processConversation = this.__serviceCache[i].conversationID;
//Check if it is new conversation
if(this.__serviceCache[i].last_update === 0)
newConversations.push(processConversation);
//Else perform a simple update of the conversation
else {
conversationsToRefresh["conversation-"+processConversation] = {
last_update: this.__serviceCache[i].last_update,
};
}
}
//Perform a request on the interface
//Success
return true;
},
/**
* Register a new conversation
*
* @param {Integer} conversationID The ID of the conversation to register
* @return {Boolean} True for a success
*/
registerConversation: function(conversationID){
//Create conversation object
if(!this.__serviceCache)
this.__serviceCache = {}; //Create service cache object
//Register conversation
this.__serviceCache['conversation-' + conversationID] = {
conversationID: conversationID,
last_update: 0,
};
//Success
return true;
},
/**
* Unregister a conversation
*
* @param {Integer} conversationID The ID of the conversation to remove
* @return {Boolean} True for a success
*/
unregisterConversation: function(conversationID){
//Log action
ComunicWeb.debug.logMessage("Unregistering conversation " + conversationID + " from service.");
if(this.__serviceCache){
if(this.__serviceCache['conversation-'+conversationID]){
delete this.__serviceCache['conversation-'+conversationID]; //Remove conversation
}
}
//Success
return true;
},
/**
* Empty service cache (unregister all conversations)
*
* @return {Boolean} True for a success
*/
emptyCache: function(){
if(this.__serviceCache){
clearObject(this.__serviceCache);
}
//Success
return true;
},
}
//Register service cache
ComunicWeb.common.cacheManager.registerCacheCleaner("ComunicWeb.components.conversations.service.emptyCache");