芝麻web文件管理V1.00
编辑当前文件:/home/pulsehostuk9/public_html/cloud.pulsehost.co.uk/modules/MailWebclient/js/MessagesDictionary.js
'use strict'; var CHECK_AND_CLEAR_DICT_EVERY_MINUTES = 30, DESTROY_NOT_USED_LAST_HOURS = 4 ; var _ = require('underscore'), moment = require('moment'), Utils = require('%PathToCoreWebclientModule%/js/utils/Common.js'), Logger = require('%PathToCoreWebclientModule%/js/utils/Logger.js'), Settings = require('modules/%ModuleName%/js/Settings.js'), MailCache = null ; function GetMessagesLimitToStore() { return Settings.MailsPerPage * 8 + 700; } function CMessagesDictionary() { this.oMessages = {}; // Clears dictionary from old messages every 30 minutes setInterval(this.checkAndClear.bind(this), 1000 * 60 * CHECK_AND_CLEAR_DICT_EVERY_MINUTES); } /** * Obtains message from dictionary. * @param {array} aKey * @returns {object} */ CMessagesDictionary.prototype.get = function (aKey) { var sKey = JSON.stringify(aKey); return this.oMessages[sKey]; }; /** * Adds message to dictionary. * @param {array} aKey * @param {object} oMessage */ CMessagesDictionary.prototype.set = function (aKey, oMessage) { var sKey = JSON.stringify(aKey); this.oMessages[sKey] = oMessage; }; /** * Requires MailCache. It cannot be required earlier because it is not initialized yet. */ CMessagesDictionary.prototype.requireMailCache = function () { if (MailCache === null) { MailCache = require('modules/%ModuleName%/js/Cache.js'); } }; /** * Checks the number of messages in the dictionary. * If the number is over 1000 destroys messages that have not been used for 4 hours. */ CMessagesDictionary.prototype.checkAndClear = function () { this.requireMailCache(); // Do not check if the current folder has not been synchronized for the last 30 minutes. // This may be first moments after computer wakes up. var oIndicatorFolder = MailCache.getCurrentFolder(); if (!oIndicatorFolder && MailCache.folderList()) { oIndicatorFolder = MailCache.folderList().inboxFolder(); } if (!oIndicatorFolder || moment().diff(oIndicatorFolder.oRelevantInformationLastMoment) > 1000 * 60 * CHECK_AND_CLEAR_DICT_EVERY_MINUTES) { return; } var iCount = _.size(this.oMessages), iPrevNow = moment().add(-DESTROY_NOT_USED_LAST_HOURS, 'hours').unix(), iMessagesLimitToStore = GetMessagesLimitToStore() ; if (iCount > iMessagesLimitToStore) { Logger.log('checkAndClear', iCount, Settings.MailsPerPage, iMessagesLimitToStore); // Update last access time for messages on the current page. _.each(MailCache.messages(), function (oMessage) { oMessage.updateLastAccessTime(); }); // Update last access time for the current message. if (MailCache.currentMessage()) { MailCache.currentMessage().updateLastAccessTime(); } // Destroy old messages. _.each(this.oMessages, function (oMessage, sKey) { if (oMessage.iLastAccessTime !== 0 && oMessage.iLastAccessTime < iPrevNow) { Utils.destroyObjectWithObservables(this.oMessages, sKey); } }.bind(this)); Logger.log('checkAndClear', _.size(this.oMessages)); } }; /** * Removes message from the dictionary. * @param {Array} aKey */ CMessagesDictionary.prototype.remove = function (aKey) { var sKey = JSON.stringify(aKey); Utils.destroyObjectWithObservables(this.oMessages, sKey); }; // Updates all messages dates if current date has been just changed. CMessagesDictionary.prototype.updateMomentDates = function () { _.each(this.oMessages, function (oMessage) { oMessage.updateMomentDate(); }, this); }; module.exports = new CMessagesDictionary();