mirror of
https://github.com/the-djmaze/snappymail.git
synced 2025-02-24 23:08:08 +08:00
Improve and bugfix MessageFlagsCache
This commit is contained in:
parent
d734a3e415
commit
0f6bb75e80
2 changed files with 31 additions and 43 deletions
|
@ -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();
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue