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
{
/**
* @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;
}

View file

@ -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], '');