mirror of
https://github.com/the-djmaze/snappymail.git
synced 2025-02-23 22:36:01 +08:00
More MessageFlagsCache improvements
This commit is contained in:
parent
0f6bb75e80
commit
148913ea32
2 changed files with 26 additions and 31 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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], '');
|
||||
|
|
Loading…
Reference in a new issue