More MessageFlagsCache improvements

This commit is contained in:
djmaze 2021-12-07 00:05:55 +01:00
parent 0f6bb75e80
commit 148913ea32
2 changed files with 26 additions and 31 deletions

View file

@ -138,6 +138,18 @@ export const
export class MessageFlagsCache 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} folderFullName
* @param {string} uid * @param {string} uid
@ -183,21 +195,13 @@ export class MessageFlagsCache
} }
if (message.threads.length) { if (message.threads.length) {
const unseenSubUid = message.threads.find(sSubUid => { const unseenSubUid = message.threads.find(sSubUid =>
if (uid !== sSubUid) { (uid !== sSubUid) && !this.hasFlag(message.folder, sSubUid, '\\seen')
const subFlags = this.getFor(message.folder, sSubUid); );
return subFlags && !subFlags.includes('\\seen');
}
return false;
});
const flaggedSubUid = message.threads.find(sSubUid => { const flaggedSubUid = message.threads.find(sSubUid =>
if (uid !== sSubUid) { (uid !== sSubUid) && this.hasFlag(message.folder, sSubUid, '\\flagged')
const subFlags = this.getFor(message.folder, sSubUid); );
return subFlags && subFlags.includes('\\flagged');
}
return false;
});
message.hasUnseenSubMessage(!!unseenSubUid); message.hasUnseenSubMessage(!!unseenSubUid);
message.hasFlaggedSubMessage(!!flaggedSubUid); message.hasFlaggedSubMessage(!!flaggedSubUid);
@ -220,25 +224,21 @@ export class MessageFlagsCache
* @param {number} setAction * @param {number} setAction
*/ */
static storeBySetAction(folder, uid, setAction) { static storeBySetAction(folder, uid, setAction) {
let flags = this.getFor(folder, uid) || [];
const const
flags = this.getFor(folder, uid) || [],
unread = flags.includes('\\seen') ? 0 : 1, unread = flags.includes('\\seen') ? 0 : 1,
remove = item => { add = item => flags.includes(item) || flags.push(item),
const index = flags.indexOf(item); remove = item => flags = flags.filter(flag => flag != item);
if (index > -1) {
flags.splice(index, 1);
}
};
switch (setAction) { switch (setAction) {
case MessageSetAction.SetSeen: case MessageSetAction.SetSeen:
flags.push('\\seen'); add('\\seen');
break; break;
case MessageSetAction.UnsetSeen: case MessageSetAction.UnsetSeen:
remove('\\seen'); remove('\\seen');
break; break;
case MessageSetAction.SetFlag: case MessageSetAction.SetFlag:
flags.push('\\flagged'); add('\\flagged');
break; break;
case MessageSetAction.UnsetFlag: case MessageSetAction.UnsetFlag:
remove('\\flagged'); remove('\\flagged');
@ -246,7 +246,7 @@ export class MessageFlagsCache
// no default // no default
} }
this.setFor(folder, uid, flags.unique()); this.setFor(folder, uid, flags);
return unread; return unread;
} }

View file

@ -397,13 +397,8 @@ class ComposePopupView extends AbstractViewPopup {
if (3 === arrayLength(this.aDraftInfo)) { if (3 === arrayLength(this.aDraftInfo)) {
const flagsCache = MessageFlagsCache.getFor(this.aDraftInfo[2], this.aDraftInfo[1]); const flagsCache = MessageFlagsCache.getFor(this.aDraftInfo[2], this.aDraftInfo[1]);
if (flagsCache) { if (isArray(flagsCache)) {
if ('forward' === this.aDraftInfo[0]) { flagsCache.push(('forward' === this.aDraftInfo[0]) ? '$forwarded' : '\\answered');
flagsCache[3] = true;
} else {
flagsCache[2] = true;
}
MessageFlagsCache.setFor(this.aDraftInfo[2], this.aDraftInfo[1], flagsCache); MessageFlagsCache.setFor(this.aDraftInfo[2], this.aDraftInfo[1], flagsCache);
rl.app.reloadFlagsCurrentMessageListAndMessageFromCache(); rl.app.reloadFlagsCurrentMessageListAndMessageFromCache();
setFolderHash(this.aDraftInfo[2], ''); setFolderHash(this.aDraftInfo[2], '');