Added cache system

This commit is contained in:
Pierre 2017-06-14 11:46:10 +02:00
parent aa74943b01
commit f750165c3e
13 changed files with 295 additions and 26 deletions

View File

@ -0,0 +1,88 @@
/**
* Global cache management system
*
* @author Pierre HUBERT
*/
ComunicWeb.common.cacheManager = {
/**
* @var {Array} cachesArray An array that contains all the functions that can empty caches
*/
__cachesCleaners: [],
/**
* @var {Array} intervalsList A list of all created intervals
*/
__intervalsList: [],
/**
* Register a new cache cleaner
*
* @param {Function} cacheCleaner The cache cleaner to register
* @param {Boolean} persistant If it is set to true, the cache will have to be cleaned only on user logout
* @return {Boolean} True for a success
*/
registerCacheCleaner: function(cacheCleaner, persistant){
//Add the function to the list
this.__cachesCleaners.push([cacheCleaner, persistant]);
//Success
return true;
},
/**
* Register a new interval
*
* @param {Interval} interval The interval to register
* @return {Boolean} True for a success
*/
registerInterval: function(interval){
//Add the interval to the list
this.__intervalsList.push(interval);
//Success
return true;
},
/**
* Clean the caches
*
* @param {Boolean} allCaches Specify wether persistent caches has to be cleaned or not
* @return {Boolean} True for a success
*/
cleanCaches: function(allCaches){
//Log action
ComunicWeb.debug.logMessage("Empty all caches");
//Process each cleaning function
for(i in this.__cachesCleaners){
if(allCaches || !this.__cachesCleaners[i][1])
eval(this.__cachesCleaners[i][0]+"()");
}
//Success
return true;
},
/**
* Unset all intervals
*
* @return {Boolean} True for a success
*/
cleanIntervals: function(){
//Log action
ComunicWeb.debug.logMessage("Unset all intervals");
//Process each cleaning function
for(i in this.__intervalsList){
//if(allCaches || !this.__intervalsList[i][1])
clearInterval(this.__intervalsList[i]);
}
//Success
return true
}
}

View File

@ -30,12 +30,17 @@ var ComunicWeb = {
/** /**
* Initializate the application * Initializate the application
*/ */
init: function(){}, init: function(openPage){},
/** /**
* Restart the application * Restart the application
*/ */
restart: function(){}, restart: function(){},
/**
* Reset the application
*/
reset: function(complete, openPage){},
}, },
/** /**
@ -48,6 +53,13 @@ var ComunicWeb = {
makeAPIrequest: function(apiURI, params, requireLoginTokens, nextAction){}, makeAPIrequest: function(apiURI, params, requireLoginTokens, nextAction){},
}, },
/**
* Global cache management system
*/
cacheManager:{
//TODO : implement
},
/** /**
* Langs functions * Langs functions
*/ */
@ -203,6 +215,11 @@ var ComunicWeb = {
*/ */
getRequest: function(url, cache, GETnextAction){}, getRequest: function(url, cache, GETnextAction){},
/**
* Empty network cache
*/
emptyCache: function(){},
/** /**
* Update the status of the network * Update the status of the network
*/ */
@ -372,6 +389,11 @@ var ComunicWeb = {
* Given user IDs (in an array) the function return their names in a string * Given user IDs (in an array) the function return their names in a string
*/ */
getNames: function(usersID, afterNames){}, getNames: function(usersID, afterNames){},
/**
* Empty users cache
*/
emptyCache: function(){},
}, },
}, },
@ -481,14 +503,14 @@ var ComunicWeb = {
* Friends list caching system * Friends list caching system
*/ */
list:{ list:{
//TODO : implement
}, },
/** /**
* Friends bar * Friends bar
*/ */
bar:{ bar:{
//TODO : implement
}, },
}, },
@ -514,13 +536,22 @@ var ComunicWeb = {
* Conversations windows manager * Conversations windows manager
*/ */
windows:{ windows:{
//TODO : implement
}, },
/** /**
* Interface between conversation UI and the API * Interface between conversation UI and the API
*/ */
interface:{}, interface:{
//TODO : implement
},
/**
* Opened conversations caching system
*/
cachingOpened:{
//TODO : implement
},
}, },
/** /**

View File

@ -64,6 +64,18 @@ ComunicWeb.common.network = {
xhrRequest.send(null); xhrRequest.send(null);
}, },
/**
* Empty network cache
*
* @return {Boolean} True for a success
*/
emptyCache: function(){
this.cache = {};
//Success
return true;
},
/** /**
* Update the status of the network * Update the status of the network
* *
@ -102,5 +114,5 @@ ComunicWeb.common.network = {
//Make sure the error message is visible on the screen //Make sure the error message is visible on the screen
byId("networkErrorMessage").style.display = "block"; byId("networkErrorMessage").style.display = "block";
} }
} },
}; };

View File

@ -47,7 +47,7 @@ ComunicWeb.common.page = {
this.emptyPage(); this.emptyPage();
//Log message //Log message
ComunicWeb.debug.logMessage("Display a wait splash screen the screen."); ComunicWeb.debug.logMessage("Display a wait splash screen on the screen.");
//Create message element (if required) //Create message element (if required)
if(message){ if(message){

View File

@ -8,9 +8,10 @@ ComunicWeb.common.system = {
/** /**
* Initializate the application * Initializate the application
* *
* @param {String} Specify a page to open
* @return {Boolean} True for a success * @return {Boolean} True for a success
*/ */
init: function(){ init: function(openPage){
//Display Comunic logo //Display Comunic logo
ComunicWeb.debug.displayComunicLogo(); ComunicWeb.debug.displayComunicLogo();
@ -30,7 +31,7 @@ ComunicWeb.common.system = {
ComunicWeb.common.page.emptyPage(); ComunicWeb.common.page.emptyPage();
//Show a wait splash screen //Show a wait splash screen
ComunicWeb.common.page.showWaitSplashScreen(); ComunicWeb.common.page.showWaitSplashScreen("Starting up...");
/** /**
* Language initator * Language initator
@ -45,11 +46,16 @@ ComunicWeb.common.system = {
/** /**
* Open a page * Open a page
*/ */
//Get current page URI if(!openPage){
var currentPage = ComunicWeb.common.url.getCurrentWebsiteURL(); //Get current page URI
var currentPage = ComunicWeb.common.url.getCurrentWebsiteURL();
//Open a page //Open a page
ComunicWeb.common.page.openPage(currentPage); ComunicWeb.common.page.openPage(currentPage);
}
else
//Open specified page
ComunicWeb.common.page.openPage(openPage);
//End of init //End of init
ComunicWeb.debug.logMessage("Application is ready !"); ComunicWeb.debug.logMessage("Application is ready !");
@ -66,8 +72,9 @@ ComunicWeb.common.system = {
var autoRefresh = setInterval((function(){ var autoRefresh = setInterval((function(){
ComunicWeb.user.userLogin.refreshLoginState(); ComunicWeb.user.userLogin.refreshLoginState();
}), 20000); }), 20000);
ComunicWeb.common.cacheManager.registerInterval(autoRefresh);
//Sucess //Success
return true; return true;
}, },
@ -82,5 +89,29 @@ ComunicWeb.common.system = {
//Reload the page //Reload the page
location.href = document.location; location.href = document.location;
} },
/**
* Reset the application
*
* @param {Boolean} complete Specify wether the cache cleaning has to be complete or not (for logout)
* @param {String} openPage Specify a page to open once the application is restarted
* @return {Boolean} True for a success
*/
reset: function(complete, openPage){
//Show a wait splashscreen message
ComunicWeb.common.page.showWaitSplashScreen("Reset the application in progress...");
//Clear intervals
ComunicWeb.common.cacheManager.cleanIntervals();
//Clean caches
ComunicWeb.common.cacheManager.cleanCaches(complete);
//Init the page again
this.init(openPage);
//Success
return true;
},
}; };

View File

@ -0,0 +1,41 @@
/**
* Opened conversations caching system
*
* @author Pierre HUBERT
*/
ComunicWeb.components.conversations.cachingOpened = {
__varName: "opened-conversations-ids",
/**
* Add a new conversation ID in the list
*
* @param {Integer} conversationID The ID of the conversation to add
* @return {Boolean} True for a success
*/
/**
* Get all conversations ID in the list
*
* @return {Array} An array with all opened conversations ID
*/
/**
* Empty the storage
*
* @return {Boolean} True for a success
*/
emptyStorage: function(){
//Remove variables for session storage
sessionStorage.removeItem(this.__varName);
//Success
return true;
}
}
//Register cache cleaner
ComunicWeb.common.cacheManager.registerCacheCleaner("ComunicWeb.components.conversations.cachingOpened.emptyStorage", true);

View File

@ -182,7 +182,9 @@ ComunicWeb.components.conversations.list = {
infos.listBox.rootElem.remove(); infos.listBox.rootElem.remove();
//Open the conversation (under construction) //Open the conversation (under construction)
console.log("Open conversation ID: " + response.conversationID); ComunicWeb.components.conversations.manager.openConversation({
conversationID: response.conversationID
});
}) })
}, },
@ -255,8 +257,10 @@ ComunicWeb.components.conversations.list = {
//Remove conversations list //Remove conversations list
listBox.rootElem.remove(); listBox.rootElem.remove();
//Show conversation //Open conversation
console.log("Open conversation ID: " + conversationInfos.ID); ComunicWeb.components.conversations.manager.openConversation({
conversationID: conversationInfos.ID
});
} }
//Add conversations last activity //Add conversations last activity

View File

@ -79,4 +79,34 @@ ComunicWeb.components.conversations.manager = {
ComunicWeb.components.conversations.list.display(this); ComunicWeb.components.conversations.list.display(this);
} }
}, },
/**
* Open a conversation accordingly to specified informations
*
* @param {Object} infos Informations about the conversation to open
* @info {Integer} conversationID The ID of the conversation to open
* @return {Boolean} True or false depending of the success of the operation
*/
openConversation: function(infos){
//We check if a conversation ID was specified or not
if(infos.conversationID){
ComunicWeb.debug.logMessage("Open a conversation based on its ID");
var conversationID = infos.conversationID;
}
else {
//It is an error
ComunicWeb.debug.logMessage("Don't know which conversation to open !");
return false;
}
//Log action
ComunicWeb.debug.logMessage("Opening conversation " + conversationID);
//Save conversation ID in session storage
//Success
return true;
}
} }

View File

@ -62,8 +62,9 @@ ComunicWeb.components.friends.bar = {
this.refresh(listFriendsElem); this.refresh(listFriendsElem);
//Remove previously existing interval //Remove previously existing interval
if(this.refreshInterval) if(this.refreshInterval){
clearInterval(this.refreshInterval); clearInterval(this.refreshInterval);
}
//Make the friend bar automaticaly refreshed //Make the friend bar automaticaly refreshed
this.refreshInterval = setInterval(function(){ this.refreshInterval = setInterval(function(){

View File

@ -89,4 +89,21 @@ ComunicWeb.components.friends.list = {
//Success //Success
return true; return true;
}, },
/**
* Empty friends cache list
*
* @return {Boolean} True for a success
*/
emptyCache: function(){
//Empty cache
this.__list = {};
//Success
return true;
}
}; };
//Register cache cleaner
ComunicWeb.common.cacheManager.registerCacheCleaner("ComunicWeb.components.friends.list.emptyCache");

View File

@ -20,11 +20,8 @@ ComunicWeb.pages.logout = {
//Perform logout //Perform logout
ComunicWeb.user.userLogin.logoutUser(); ComunicWeb.user.userLogin.logoutUser();
//Show a success notification //Clean all caches
ComunicWeb.common.notificationSystem.showNotification("Good bye, you successfully terminated your session !", "success", 3); ComunicWeb.common.system.reset(true, "home");
//Open login page
ComunicWeb.common.page.openPage("home");
//Remove overlay //Remove overlay
screenOverlay.remove(); screenOverlay.remove();

View File

@ -200,4 +200,19 @@ ComunicWeb.user.userInfos = {
afterNames(usersName); afterNames(usersName);
}); });
}, },
}
/**
* Empty users cache
*
* @return {Boolean} True for a success
*/
emptyCache: function(){
this.usersInfos = {};
//Success
return true;
}
};
//Register cache cleaner
ComunicWeb.common.cacheManager.registerCacheCleaner("ComunicWeb.user.userInfos.emptyCache");

View File

@ -56,6 +56,7 @@ $config['JSfiles'] = array(
"%PATH_ASSETS%js/common/functionsSchema.js", "%PATH_ASSETS%js/common/functionsSchema.js",
//App scripts //App scripts
"%PATH_ASSETS%js/common/cacheManager.js",
"%PATH_ASSETS%js/common/network.js", "%PATH_ASSETS%js/common/network.js",
"%PATH_ASSETS%js/pagesList.js", "%PATH_ASSETS%js/pagesList.js",
"%PATH_ASSETS%js/common/api.js", "%PATH_ASSETS%js/common/api.js",
@ -84,6 +85,7 @@ $config['JSfiles'] = array(
"%PATH_ASSETS%js/components/conversations/list.js", "%PATH_ASSETS%js/components/conversations/list.js",
"%PATH_ASSETS%js/components/conversations/windows.js", "%PATH_ASSETS%js/components/conversations/windows.js",
"%PATH_ASSETS%js/components/conversations/interface.js", "%PATH_ASSETS%js/components/conversations/interface.js",
"%PATH_ASSETS%js/components/conversations/cachingOpened.js",
"%PATH_ASSETS%js/components/userSelect/userSelect.js", "%PATH_ASSETS%js/components/userSelect/userSelect.js",
//User scripts //User scripts