From 148913ea327ee0e5a0e152bea1fc630067a56be9 Mon Sep 17 00:00:00 2001 From: djmaze Date: Tue, 7 Dec 2021 00:05:55 +0100 Subject: [PATCH] More MessageFlagsCache improvements --- dev/Common/Cache.js | 48 +++++++++++++++++++-------------------- dev/View/Popup/Compose.js | 9 ++------ 2 files changed, 26 insertions(+), 31 deletions(-) diff --git a/dev/Common/Cache.js b/dev/Common/Cache.js index f67d828b9..2fb32866e 100644 --- a/dev/Common/Cache.js +++ b/dev/Common/Cache.js @@ -138,6 +138,18 @@ export const export class MessageFlagsCache { + /** + * @param {string} folderFullName + * @param {string} uid + * @param {string} flag + * @returns {bool} + */ + static hasFlag(folderFullName, uid, flag) { + return MESSAGE_FLAGS_CACHE[folderFullName] + && MESSAGE_FLAGS_CACHE[folderFullName][uid] + && MESSAGE_FLAGS_CACHE[folderFullName][uid].includes(flag); + } + /** * @param {string} folderFullName * @param {string} uid @@ -183,21 +195,13 @@ export class MessageFlagsCache } if (message.threads.length) { - const unseenSubUid = message.threads.find(sSubUid => { - if (uid !== sSubUid) { - const subFlags = this.getFor(message.folder, sSubUid); - return subFlags && !subFlags.includes('\\seen'); - } - return false; - }); + const unseenSubUid = message.threads.find(sSubUid => + (uid !== sSubUid) && !this.hasFlag(message.folder, sSubUid, '\\seen') + ); - const flaggedSubUid = message.threads.find(sSubUid => { - if (uid !== sSubUid) { - const subFlags = this.getFor(message.folder, sSubUid); - return subFlags && subFlags.includes('\\flagged'); - } - return false; - }); + const flaggedSubUid = message.threads.find(sSubUid => + (uid !== sSubUid) && this.hasFlag(message.folder, sSubUid, '\\flagged') + ); message.hasUnseenSubMessage(!!unseenSubUid); message.hasFlaggedSubMessage(!!flaggedSubUid); @@ -220,25 +224,21 @@ export class MessageFlagsCache * @param {number} setAction */ static storeBySetAction(folder, uid, setAction) { + let flags = this.getFor(folder, uid) || []; const - flags = this.getFor(folder, uid) || [], unread = flags.includes('\\seen') ? 0 : 1, - remove = item => { - const index = flags.indexOf(item); - if (index > -1) { - flags.splice(index, 1); - } - }; + add = item => flags.includes(item) || flags.push(item), + remove = item => flags = flags.filter(flag => flag != item); switch (setAction) { case MessageSetAction.SetSeen: - flags.push('\\seen'); + add('\\seen'); break; case MessageSetAction.UnsetSeen: remove('\\seen'); break; case MessageSetAction.SetFlag: - flags.push('\\flagged'); + add('\\flagged'); break; case MessageSetAction.UnsetFlag: remove('\\flagged'); @@ -246,7 +246,7 @@ export class MessageFlagsCache // no default } - this.setFor(folder, uid, flags.unique()); + this.setFor(folder, uid, flags); return unread; } diff --git a/dev/View/Popup/Compose.js b/dev/View/Popup/Compose.js index 6cd846098..0baf270ea 100644 --- a/dev/View/Popup/Compose.js +++ b/dev/View/Popup/Compose.js @@ -397,13 +397,8 @@ class ComposePopupView extends AbstractViewPopup { if (3 === arrayLength(this.aDraftInfo)) { const flagsCache = MessageFlagsCache.getFor(this.aDraftInfo[2], this.aDraftInfo[1]); - if (flagsCache) { - if ('forward' === this.aDraftInfo[0]) { - flagsCache[3] = true; - } else { - flagsCache[2] = true; - } - + if (isArray(flagsCache)) { + flagsCache.push(('forward' === this.aDraftInfo[0]) ? '$forwarded' : '\\answered'); MessageFlagsCache.setFor(this.aDraftInfo[2], this.aDraftInfo[1], flagsCache); rl.app.reloadFlagsCurrentMessageListAndMessageFromCache(); setFolderHash(this.aDraftInfo[2], '');