Improve and bugfix MessageFlagsCache

This commit is contained in:
djmaze 2021-12-06 19:25:28 +01:00
parent d734a3e415
commit 0f6bb75e80
2 changed files with 31 additions and 43 deletions

View file

@ -508,7 +508,7 @@ class AppUser extends AbstractApp {
if (result.Flags.length) { if (result.Flags.length) {
result.Flags.forEach(message => result.Flags.forEach(message =>
MessageFlagsCache.storeByFolderAndUid(folderFromCache.fullName, message.Uid.toString(), message.Flags) MessageFlagsCache.setFor(folderFromCache.fullName, message.Uid.toString(), message.Flags)
); );
this.reloadFlagsCurrentMessageListAndMessageFromCache(); this.reloadFlagsCurrentMessageListAndMessageFromCache();

View file

@ -1,5 +1,5 @@
import { MessageSetAction } from 'Common/EnumsUser'; import { MessageSetAction } from 'Common/EnumsUser';
import { isArray, pInt } from 'Common/Utils'; import { isArray } from 'Common/Utils';
let FOLDERS_CACHE = {}, let FOLDERS_CACHE = {},
FOLDERS_NAME_CACHE = {}, FOLDERS_NAME_CACHE = {},
@ -154,11 +154,13 @@ export class MessageFlagsCache
* @param {string} uid * @param {string} uid
* @param {Array} flagsCache * @param {Array} flagsCache
*/ */
static setFor(folderFullName, uid, flagsCache) { static setFor(folderFullName, uid, flags) {
if (isArray(flags)) {
if (!MESSAGE_FLAGS_CACHE[folderFullName]) { if (!MESSAGE_FLAGS_CACHE[folderFullName]) {
MESSAGE_FLAGS_CACHE[folderFullName] = {}; MESSAGE_FLAGS_CACHE[folderFullName] = {};
} }
MESSAGE_FLAGS_CACHE[folderFullName][uid] = flagsCache; MESSAGE_FLAGS_CACHE[folderFullName][uid] = flags;
}
} }
/** /**
@ -184,7 +186,7 @@ export class MessageFlagsCache
const unseenSubUid = message.threads.find(sSubUid => { const unseenSubUid = message.threads.find(sSubUid => {
if (uid !== sSubUid) { if (uid !== sSubUid) {
const subFlags = this.getFor(message.folder, sSubUid); const subFlags = this.getFor(message.folder, sSubUid);
return subFlags && subFlags.length && !!subFlags[0]; return subFlags && !subFlags.includes('\\seen');
} }
return false; return false;
}); });
@ -192,13 +194,13 @@ export class MessageFlagsCache
const flaggedSubUid = message.threads.find(sSubUid => { const flaggedSubUid = message.threads.find(sSubUid => {
if (uid !== sSubUid) { if (uid !== sSubUid) {
const subFlags = this.getFor(message.folder, sSubUid); const subFlags = this.getFor(message.folder, sSubUid);
return subFlags && subFlags.length && !!subFlags[1]; return subFlags && subFlags.includes('\\flagged');
} }
return false; return false;
}); });
message.hasUnseenSubMessage(unseenSubUid && 0 < pInt(unseenSubUid)); message.hasUnseenSubMessage(!!unseenSubUid);
message.hasFlaggedSubMessage(flaggedSubUid && 0 < pInt(flaggedSubUid)); message.hasFlaggedSubMessage(!!flaggedSubUid);
} }
} }
} }
@ -212,25 +214,15 @@ export class MessageFlagsCache
} }
} }
/**
* @param {string} folder
* @param {string} uid
* @param {Array} flags
*/
static storeByFolderAndUid(folder, uid, flags) {
if (isArray(flags)) {
this.setFor(folder, uid, flags);
}
}
/** /**
* @param {string} folder * @param {string} folder
* @param {string} uid * @param {string} uid
* @param {number} setAction * @param {number} setAction
*/ */
static storeBySetAction(folder, uid, setAction) { static storeBySetAction(folder, uid, setAction) {
let unread = 0; const
const flags = this.getFor(folder, uid), flags = this.getFor(folder, uid) || [],
unread = flags.includes('\\seen') ? 0 : 1,
remove = item => { remove = item => {
const index = flags.indexOf(item); const index = flags.indexOf(item);
if (index > -1) { if (index > -1) {
@ -238,9 +230,6 @@ export class MessageFlagsCache
} }
}; };
if (isArray(flags)) {
unread = flags.includes('\\seen') ? 0 : 1;
switch (setAction) { switch (setAction) {
case MessageSetAction.SetSeen: case MessageSetAction.SetSeen:
flags.push('\\seen'); flags.push('\\seen');
@ -258,7 +247,6 @@ export class MessageFlagsCache
} }
this.setFor(folder, uid, flags.unique()); this.setFor(folder, uid, flags.unique());
}
return unread; return unread;
} }