ComunicWeb/assets/js/components/conversations/service.js

212 lines
4.8 KiB
JavaScript

/**
* Conversation service file
*
* Ensure that the content of the conversations is up to date
*
* @author Pierre HUBER
*/
ComunicWeb.components.conversations.service = {
/**
* @var {Integer} __intervalID The ID of the current service interval
*/
__intervalID: false,
/**
* @var {Object} __serviceCache The service cache
*/
__serviceCache: false,
/**
* @var {Boolean} __serviceLock Specify wether the service is already in use or not
*/
__serviceLock: false,
/**
* Initializate conversation service
*
* @return {Boolean} True for a success
*/
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
//Force the service to unlock
this.__serviceLock = false;
//Initializate interval
this.__intervalID = setInterval(function(){
ComunicWeb.components.conversations.service.call();
}, 2000);
ComunicWeb.common.cacheManager.registerInterval(this.__intervalID);
//Success
return true;
},
/**
* Call this service
*
* @return {Boolean} True for a success
*/
call: function(){
//Check if the conversation element still exists or not
if(!byId("conversationsElem")){
ComunicWeb.debug.logMessage("Conversation Service : Couldn't locate conversations element, unregistering service !");
clearInterval(this.__intervalID);
return false;
}
//Check at least one conversation is opened
if(!this.__serviceCache){
ComunicWeb.debug.logMessage("Conversation Service : task skipped : the service cache is empty (equals to false).");
return false;
}
if(JSON.stringify(this.__serviceCache) == "{}"){
ComunicWeb.debug.logMessage("Conversation Service : task skipped : the service cache is empty. (equals to {})");
return false;
}
//Check if the service is locked or not
if(this.__serviceLock){
ComunicWeb.debug.logMessage("Conversation Service : task skipped : the service is locked.");
return false;
}
//Lock service
this.__serviceLock = true;
//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
ComunicWeb.components.conversations.interface.refreshConversations(
newConversations,
conversationsToRefresh,
function(result){
//Call callback function
ComunicWeb.components.conversations.service.callback(result);
}
);
//Success
return true;
},
/**
* Service callback function
*
* @param {Object}
* @return {Boolean} True for a success
*/
callback: function(){
//Unlock service
this.__serviceLock = false;
//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);
}
//Unlock service
this.__serviceLock = false;
//Success
return true;
},
}
//Register service cache
ComunicWeb.common.cacheManager.registerCacheCleaner("ComunicWeb.components.conversations.service.emptyCache");