_.each(oData.Result.List, function (oItem) { var aList = [], sHash = Cache.getFolderHash(oItem.Folder), oFolder = Cache.getFolderFromCacheList(oItem.Folder), bUnreadCountChange = false ; if (oFolder) { oFolder.interval = iUtc; if (oItem.Hash) { Cache.setFolderHash(oItem.Folder, oItem.Hash); } if (Utils.isNormal(oItem.MessageCount)) { oFolder.messageCountAll(oItem.MessageCount); } if (Utils.isNormal(oItem.MessageUnseenCount)) { if (Utils.pInt(oFolder.messageCountUnread()) !== Utils.pInt(oItem.MessageUnseenCount)) { bUnreadCountChange = true; } oFolder.messageCountUnread(oItem.MessageUnseenCount); } if (bUnreadCountChange) { Cache.clearMessageFlagsFromCacheByFolder(oFolder.fullNameRaw); } if (oItem.Hash !== sHash || '' === sHash) { if (oFolder.fullNameRaw === FolderStore.currentFolderFullNameRaw()) { self.reloadMessageList(); } } else if (bUnreadCountChange) { if (oFolder.fullNameRaw === FolderStore.currentFolderFullNameRaw()) { aList = MessageStore.messageList(); if (Utils.isNonEmptyArray(aList)) { self.folderInformation(oFolder.fullNameRaw, aList); } } } } });
_.each(aFolders, (oFolder) => { if (oFolder) { let oCacheFolder = Cache.getFolderFromCacheList(oFolder.FullNameRaw); if (!oCacheFolder) { oCacheFolder = FolderModel.newInstanceFromJson(oFolder); if (oCacheFolder) { Cache.setFolderToCacheList(oFolder.FullNameRaw, oCacheFolder); Cache.setFolderFullNameRaw(oCacheFolder.fullNameHash, oFolder.FullNameRaw, oCacheFolder); } } if (oCacheFolder) { if (bDisplaySpecSetting) { oCacheFolder.checkable(!!oFolder.Checkable); } else { oCacheFolder.checkable(true); } oCacheFolder.collapsed(!this.isFolderExpanded(oCacheFolder.fullNameHash, expandedFolders)); if (oFolder.Extended) { if (oFolder.Extended.Hash) { Cache.setFolderHash(oCacheFolder.fullNameRaw, oFolder.Extended.Hash); } if (isNormal(oFolder.Extended.MessageCount)) { oCacheFolder.messageCountAll(oFolder.Extended.MessageCount); } if (isNormal(oFolder.Extended.MessageUnseenCount)) { oCacheFolder.messageCountUnread(oFolder.Extended.MessageUnseenCount); } } if (oFolder.SubFolders && 'Collection/FolderCollection' === oFolder.SubFolders['@Object'] && oFolder.SubFolders['@Collection'] && isArray(oFolder.SubFolders['@Collection'])) { oCacheFolder.subFolders( this.folderResponseParseRec(sNamespace, oFolder.SubFolders['@Collection'], expandedFolders)); } aList.push(oCacheFolder); } } });
AppUser.prototype.reloadMessageList = function (bDropPagePosition, bDropCurrenFolderCache) { var iOffset = (MessageStore.messageListPage() - 1) * SettingsStore.messagesPerPage() ; if (Utils.isUnd(bDropCurrenFolderCache) ? false : !!bDropCurrenFolderCache) { Cache.setFolderHash(FolderStore.currentFolderFullNameRaw(), ''); } if (Utils.isUnd(bDropPagePosition) ? false : !!bDropPagePosition) { MessageStore.messageListPage(1); MessageStore.messageListPageBeforeThread(1); iOffset = 0; kn.setHash(Links.mailBox( FolderStore.currentFolderFullNameHash(), MessageStore.messageListPage(), MessageStore.messageListSearch(), MessageStore.messageListThreadUid() ), true, true); } MessageStore.messageListLoading(true); Remote.messageList(function (sResult, oData, bCached) { if (Enums.StorageResultType.Success === sResult && oData && oData.Result) { MessageStore.messageListError(''); MessageStore.messageListLoading(false); MessageStore.setMessageList(oData, bCached); } else if (Enums.StorageResultType.Unload === sResult) { MessageStore.messageListError(''); MessageStore.messageListLoading(false); } else if (Enums.StorageResultType.Abort !== sResult) { MessageStore.messageList([]); MessageStore.messageListLoading(false); MessageStore.messageListError(oData && oData.ErrorCode ? Translator.getNotification(oData.ErrorCode) : Translator.i18n('NOTIFICATIONS/CANT_GET_MESSAGE_LIST') ); } }, FolderStore.currentFolderFullNameRaw(), iOffset, SettingsStore.messagesPerPage(), MessageStore.messageListSearch(), MessageStore.messageListThreadUid()); };
AppUser.prototype.moveOrDeleteResponseHelper = function (sResult, oData) { if (Enums.StorageResultType.Success === sResult && FolderStore.currentFolder()) { if (oData && Utils.isArray(oData.Result) && 2 === oData.Result.length) { Cache.setFolderHash(oData.Result[0], oData.Result[1]); } else { Cache.setFolderHash(FolderStore.currentFolderFullNameRaw(), ''); if (oData && -1 < Utils.inArray(oData.ErrorCode, [Enums.Notification.CantMoveMessage, Enums.Notification.CantCopyMessage])) { window.alert(Translator.getNotification(oData.ErrorCode)); } } this.reloadMessageList(0 === MessageStore.messageList().length); this.quotaDebounce(); } };
this.clearCommand = Utils.createCommand(this, function () { var self = this, oFolderToClear = this.selectedFolder() ; if (oFolderToClear) { MessageStore.message(null); MessageStore.messageList([]); this.clearingProcess(true); oFolderToClear.messageCountAll(0); oFolderToClear.messageCountUnread(0); Cache.setFolderHash(oFolderToClear.fullNameRaw, ''); Remote.folderClear(function (sResult, oData) { self.clearingProcess(false); if (Enums.StorageResultType.Success === sResult && oData && oData.Result) { require('App/User').reloadMessageList(true); self.cancelCommand(); } else { if (oData && oData.ErrorCode) { self.clearingError(Translator.getNotification(oData.ErrorCode)); } else { self.clearingError(Translator.getNotification(Enums.Notification.MailServerError)); } } }, oFolderToClear.fullNameRaw); } }, function () {
fSelectFolder = function (oEvent, bStarred) { if (bMobile) { Globals.leftPanelDisabled(true); } oEvent.preventDefault(); if (bStarred) { oEvent.stopPropagation(); } var oFolder = ko.dataFor(this) ; if (oFolder) { if (Enums.Layout.NoPreview === SettingsStore.layout()) { MessageStore.message(null); } if (oFolder.fullNameRaw === FolderStore.currentFolderFullNameRaw()) { Cache.setFolderHash(oFolder.fullNameRaw, ''); } if (bStarred) { kn.setHash(Links.mailBox(oFolder.fullNameHash, 1, 'is:flagged')); } else { kn.setHash(Links.mailBox(oFolder.fullNameHash)); } } }
.on('click', '.b-folders .e-item .e-link.selectable', function (oEvent) { oEvent.preventDefault(); var oFolder = ko.dataFor(this) ; if (oFolder) { if (Enums.Layout.NoPreview === SettingsStore.layout()) { MessageStore.message(null); } if (oFolder.fullNameRaw === FolderStore.currentFolderFullNameRaw()) { Cache.setFolderHash(oFolder.fullNameRaw, ''); } kn.setHash(Links.mailBox(oFolder.fullNameHash)); } })
PromisesUserPopulator.prototype.folderResponseParseRec = function (sNamespace, aFolders) { var self = this, iIndex = 0, iLen = 0, oFolder = null, oCacheFolder = null, sFolderFullNameRaw = '', aSubFolders = [], aList = [] ; for (iIndex = 0, iLen = aFolders.length; iIndex < iLen; iIndex++) { oFolder = aFolders[iIndex]; if (oFolder) { sFolderFullNameRaw = oFolder.FullNameRaw; oCacheFolder = Cache.getFolderFromCacheList(sFolderFullNameRaw); if (!oCacheFolder) { oCacheFolder = FolderModel.newInstanceFromJson(oFolder); if (oCacheFolder) { Cache.setFolderToCacheList(sFolderFullNameRaw, oCacheFolder); Cache.setFolderFullNameRaw(oCacheFolder.fullNameHash, sFolderFullNameRaw, oCacheFolder); } } if (oCacheFolder) { if (!FolderStore.displaySpecSetting()) { oCacheFolder.checkable(true); } else { oCacheFolder.checkable(!!oFolder.Checkable); } oCacheFolder.collapsed(!self.isFolderExpanded(oCacheFolder.fullNameHash)); if (oFolder.Extended) { if (oFolder.Extended.Hash) { Cache.setFolderHash(oCacheFolder.fullNameRaw, oFolder.Extended.Hash); } if (Utils.isNormal(oFolder.Extended.MessageCount)) { oCacheFolder.messageCountAll(oFolder.Extended.MessageCount); } if (Utils.isNormal(oFolder.Extended.MessageUnseenCount)) { oCacheFolder.messageCountUnread(oFolder.Extended.MessageUnseenCount); } } aSubFolders = oFolder['SubFolders']; if (aSubFolders && 'Collection/FolderCollection' === aSubFolders['@Object'] && aSubFolders['@Collection'] && Utils.isArray(aSubFolders['@Collection'])) { oCacheFolder.subFolders( this.folderResponseParseRec(sNamespace, aSubFolders['@Collection'])); } aList.push(oCacheFolder); } } } return aList; };
MessageUserStore.prototype.setMessageList = function (oData, bCached) { if (oData && oData.Result && 'Collection/MessageCollection' === oData.Result['@Object'] && oData.Result['@Collection'] && Utils.isArray(oData.Result['@Collection'])) { var iIndex = 0, iLen = 0, iCount = 0, iOffset = 0, aList = [], oJsonMessage = null, oMessage = null, oFolder = null, iNewCount = 0, iUtc = require('Common/Momentor').momentNowUnix(), bUnreadCountChange = false ; iCount = Utils.pInt(oData.Result.MessageResultCount); iOffset = Utils.pInt(oData.Result.Offset); oFolder = Cache.getFolderFromCacheList( Utils.isNormal(oData.Result.Folder) ? oData.Result.Folder : ''); if (oFolder && !bCached) { oFolder.interval = iUtc; Cache.setFolderHash(oData.Result.Folder, oData.Result.FolderHash); if (Utils.isNormal(oData.Result.MessageCount)) { oFolder.messageCountAll(oData.Result.MessageCount); } if (Utils.isNormal(oData.Result.MessageUnseenCount)) { if (Utils.pInt(oFolder.messageCountUnread()) !== Utils.pInt(oData.Result.MessageUnseenCount)) { bUnreadCountChange = true; } oFolder.messageCountUnread(oData.Result.MessageUnseenCount); } this.initUidNextAndNewMessages(oFolder.fullNameRaw, oData.Result.UidNext, oData.Result.NewMessages); } if (bUnreadCountChange && oFolder) { Cache.clearMessageFlagsFromCacheByFolder(oFolder.fullNameRaw); } for (iIndex = 0, iLen = oData.Result['@Collection'].length; iIndex < iLen; iIndex++) { oJsonMessage = oData.Result['@Collection'][iIndex]; if (oJsonMessage && 'Object/Message' === oJsonMessage['@Object']) { oMessage = MessageModel.newInstanceFromJson(oJsonMessage); if (oMessage) { if (Cache.hasNewMessageAndRemoveFromCache(oMessage.folderFullNameRaw, oMessage.uid) && 5 >= iNewCount) { iNewCount++; oMessage.newForAnimation(true); } oMessage.deleted(false); if (bCached) { Cache.initMessageFlagsFromCache(oMessage); } else { Cache.storeMessageFlagsToCache(oMessage); } aList.push(oMessage); } } } this.messageListCount(iCount); this.messageListSearch(Utils.isNormal(oData.Result.Search) ? oData.Result.Search : ''); this.messageListPage(window.Math.ceil((iOffset / SettingsStore.messagesPerPage()) + 1)); this.messageListThreadUid(Utils.isNormal(oData.Result.ThreadUid) ? Utils.pString(oData.Result.ThreadUid) : ''); this.messageListEndFolder(Utils.isNormal(oData.Result.Folder) ? oData.Result.Folder : ''); this.messageListEndSearch(this.messageListSearch()); this.messageListEndThreadUid(this.messageListThreadUid()); this.messageListEndPage(this.messageListPage()); this.messageListDisableAutoSelect(true); this.messageList(aList); this.messageListIsNotCompleted(false); Cache.clearNewMessageCache(); if (oFolder && (bCached || bUnreadCountChange || SettingsStore.useThreads())) { require('App/User').folderInformation(oFolder.fullNameRaw, aList); } } else { this.messageListCount(0); this.messageList([]); this.messageListError(Translator.getNotification( oData && oData.ErrorCode ? oData.ErrorCode : Enums.Notification.CantGetMessageList )); } };
MessageUserStore.prototype.removeMessagesFromList = function ( sFromFolderFullNameRaw, aUidForRemove, sToFolderFullNameRaw, bCopy) { sToFolderFullNameRaw = Utils.isNormal(sToFolderFullNameRaw) ? sToFolderFullNameRaw : ''; bCopy = Utils.isUnd(bCopy) ? false : !!bCopy; aUidForRemove = _.map(aUidForRemove, function (mValue) { return Utils.pInt(mValue); }); var self = this, iUnseenCount = 0, oMessage = null, sTrashFolder = FolderStore.trashFolder(), sSpamFolder = FolderStore.spamFolder(), aMessageList = this.messageList(), oFromFolder = Cache.getFolderFromCacheList(sFromFolderFullNameRaw), oToFolder = '' === sToFolderFullNameRaw ? null : Cache.getFolderFromCacheList(sToFolderFullNameRaw || ''), sCurrentFolderFullNameRaw = FolderStore.currentFolderFullNameRaw(), oCurrentMessage = this.message(), aMessages = sCurrentFolderFullNameRaw === sFromFolderFullNameRaw ? _.filter(aMessageList, function (oMessage) { return oMessage && -1 < Utils.inArray(Utils.pInt(oMessage.uid), aUidForRemove); }) : [] ; _.each(aMessages, function (oMessage) { if (oMessage && oMessage.unseen()) { iUnseenCount++; } }); if (oFromFolder && !bCopy) { oFromFolder.messageCountAll(0 <= oFromFolder.messageCountAll() - aUidForRemove.length ? oFromFolder.messageCountAll() - aUidForRemove.length : 0); if (0 < iUnseenCount) { oFromFolder.messageCountUnread(0 <= oFromFolder.messageCountUnread() - iUnseenCount ? oFromFolder.messageCountUnread() - iUnseenCount : 0); } } if (oToFolder) { if (sTrashFolder === oToFolder.fullNameRaw || sSpamFolder === oToFolder.fullNameRaw) { iUnseenCount = 0; } oToFolder.messageCountAll(oToFolder.messageCountAll() + aUidForRemove.length); if (0 < iUnseenCount) { oToFolder.messageCountUnread(oToFolder.messageCountUnread() + iUnseenCount); } oToFolder.actionBlink(true); } if (0 < aMessages.length) { if (bCopy) { _.each(aMessages, function (oMessage) { oMessage.checked(false); }); } else { this.messageListIsNotCompleted(true); _.each(aMessages, function (oMessage) { if (oCurrentMessage && oCurrentMessage.hash === oMessage.hash) { oCurrentMessage = null; self.message(null); } oMessage.deleted(true); }); _.delay(function () { _.each(aMessages, function (oMessage) { self.messageList.remove(oMessage); }); }, 400); } } if ('' !== sFromFolderFullNameRaw) { Cache.setFolderHash(sFromFolderFullNameRaw, ''); } if ('' !== sToFolderFullNameRaw) { Cache.setFolderHash(sToFolderFullNameRaw, ''); } if ('' !== this.messageListThreadUid()) { aMessageList = this.messageList(); if (aMessageList && 0 < aMessageList.length && !!_.find(aMessageList, function (oMessage) { return !!(oMessage && oMessage.deleted() && oMessage.uid === self.messageListThreadUid()); })) { oMessage = _.find(aMessageList, function (oMessage) { return oMessage && !oMessage.deleted(); }); if (oMessage && this.messageListThreadUid() !== Utils.pString(oMessage.uid)) { this.messageListThreadUid(Utils.pString(oMessage.uid)); kn.setHash(Links.mailBox( FolderStore.currentFolderFullNameHash(), this.messageListPage(), this.messageListSearch(), this.messageListThreadUid() ), true, true); } else if (!oMessage) { if (1 < this.messageListPage()) { this.messageListPage(this.messageListPage() - 1); kn.setHash(Links.mailBox( FolderStore.currentFolderFullNameHash(), this.messageListPage(), this.messageListSearch(), this.messageListThreadUid() ), true, true); } else { this.messageListThreadUid(''); kn.setHash(Links.mailBox( FolderStore.currentFolderFullNameHash(), this.messageListPageBeforeThread(), this.messageListSearch() ), true, true); } } } } };
Remote.folderInformation(function (sResult, oData) { if (Enums.StorageResultType.Success === sResult) { if (oData && oData.Result && oData.Result.Hash && oData.Result.Folder) { var iUtc = Momentor.momentNowUnix(), sHash = Cache.getFolderHash(oData.Result.Folder), oFolder = Cache.getFolderFromCacheList(oData.Result.Folder), bCheck = false, sUid = '', aList = [], oFlags = null, bUnreadCountChange = false ; if (oFolder) { oFolder.interval = iUtc; if (oData.Result.Hash) { Cache.setFolderHash(oData.Result.Folder, oData.Result.Hash); } if (Utils.isNormal(oData.Result.MessageCount)) { oFolder.messageCountAll(oData.Result.MessageCount); } if (Utils.isNormal(oData.Result.MessageUnseenCount)) { if (Utils.pInt(oFolder.messageCountUnread()) !== Utils.pInt(oData.Result.MessageUnseenCount)) { bUnreadCountChange = true; } oFolder.messageCountUnread(oData.Result.MessageUnseenCount); } if (bUnreadCountChange) { Cache.clearMessageFlagsFromCacheByFolder(oFolder.fullNameRaw); } if (oData.Result.Flags) { for (sUid in oData.Result.Flags) { if (oData.Result.Flags.hasOwnProperty(sUid)) { bCheck = true; oFlags = oData.Result.Flags[sUid]; Cache.storeMessageFlagsToCacheByFolderAndUid(oFolder.fullNameRaw, sUid.toString(), [ !oFlags['IsSeen'], !!oFlags['IsFlagged'], !!oFlags['IsAnswered'], !!oFlags['IsForwarded'], !!oFlags['IsReadReceipt'] ]); } } if (bCheck) { self.reloadFlagsCurrentMessageListAndMessageFromCache(); } } MessageStore.initUidNextAndNewMessages(oFolder.fullNameRaw, oData.Result.UidNext, oData.Result.NewMessages); if (oData.Result.Hash !== sHash || '' === sHash) { if (oFolder.fullNameRaw === FolderStore.currentFolderFullNameRaw()) { self.reloadMessageList(); } else if (Cache.getFolderInboxName() === oFolder.fullNameRaw) { self.recacheInboxMessageList(); } } else if (bUnreadCountChange) { if (oFolder.fullNameRaw === FolderStore.currentFolderFullNameRaw()) { aList = MessageStore.messageList(); if (Utils.isNonEmptyArray(aList)) { self.folderInformation(oFolder.fullNameRaw, aList); } } } } } } }, sFolder, aList);