From 0f6bb75e80e54c3b846900a3816546511a8ea7d3 Mon Sep 17 00:00:00 2001 From: djmaze Date: Mon, 6 Dec 2021 19:25:28 +0100 Subject: [PATCH] Improve and bugfix MessageFlagsCache --- dev/App/User.js | 2 +- dev/Common/Cache.js | 72 +++++++++++++++++++-------------------------- 2 files changed, 31 insertions(+), 43 deletions(-) diff --git a/dev/App/User.js b/dev/App/User.js index 669c55f21..7fa35f0ab 100644 --- a/dev/App/User.js +++ b/dev/App/User.js @@ -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(); diff --git a/dev/Common/Cache.js b/dev/Common/Cache.js index 8b78d2597..f67d828b9 100644 --- a/dev/Common/Cache.js +++ b/dev/Common/Cache.js @@ -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) { - if (!MESSAGE_FLAGS_CACHE[folderFullName]) { - MESSAGE_FLAGS_CACHE[folderFullName] = {}; + static setFor(folderFullName, uid, flags) { + if (isArray(flags)) { + if (!MESSAGE_FLAGS_CACHE[folderFullName]) { + MESSAGE_FLAGS_CACHE[folderFullName] = {}; + } + MESSAGE_FLAGS_CACHE[folderFullName][uid] = flags; } - MESSAGE_FLAGS_CACHE[folderFullName][uid] = flagsCache; } /** @@ -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,28 +230,24 @@ export class MessageFlagsCache } }; - if (isArray(flags)) { - unread = flags.includes('\\seen') ? 0 : 1; - - switch (setAction) { - case MessageSetAction.SetSeen: - flags.push('\\seen'); - break; - case MessageSetAction.UnsetSeen: - remove('\\seen'); - break; - case MessageSetAction.SetFlag: - flags.push('\\flagged'); - break; - case MessageSetAction.UnsetFlag: - remove('\\flagged'); - break; - // no default - } - - this.setFor(folder, uid, flags.unique()); + switch (setAction) { + case MessageSetAction.SetSeen: + flags.push('\\seen'); + break; + case MessageSetAction.UnsetSeen: + remove('\\seen'); + break; + case MessageSetAction.SetFlag: + flags.push('\\flagged'); + break; + case MessageSetAction.UnsetFlag: + remove('\\flagged'); + break; + // no default } + this.setFor(folder, uid, flags.unique()); + return unread; }