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) {
result.Flags.forEach(message =>
MessageFlagsCache.storeByFolderAndUid(folderFromCache.fullName, message.Uid.toString(), message.Flags)
MessageFlagsCache.setFor(folderFromCache.fullName, message.Uid.toString(), message.Flags)
);
this.reloadFlagsCurrentMessageListAndMessageFromCache();

View file

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