mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-09-07 16:37:02 +03: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
|
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} folderFullName
|
||||||
* @param {string} uid
|
* @param {string} uid
|
||||||
|
|
@ -183,21 +195,13 @@ export class MessageFlagsCache
|
||||||
}
|
}
|
||||||
|
|
||||||
if (message.threads.length) {
|
if (message.threads.length) {
|
||||||
const unseenSubUid = message.threads.find(sSubUid => {
|
const unseenSubUid = message.threads.find(sSubUid =>
|
||||||
if (uid !== sSubUid) {
|
(uid !== sSubUid) && !this.hasFlag(message.folder, sSubUid, '\\seen')
|
||||||
const subFlags = this.getFor(message.folder, sSubUid);
|
);
|
||||||
return subFlags && !subFlags.includes('\\seen');
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
const flaggedSubUid = message.threads.find(sSubUid => {
|
const flaggedSubUid = message.threads.find(sSubUid =>
|
||||||
if (uid !== sSubUid) {
|
(uid !== sSubUid) && this.hasFlag(message.folder, sSubUid, '\\flagged')
|
||||||
const subFlags = this.getFor(message.folder, sSubUid);
|
);
|
||||||
return subFlags && subFlags.includes('\\flagged');
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
message.hasUnseenSubMessage(!!unseenSubUid);
|
message.hasUnseenSubMessage(!!unseenSubUid);
|
||||||
message.hasFlaggedSubMessage(!!flaggedSubUid);
|
message.hasFlaggedSubMessage(!!flaggedSubUid);
|
||||||
|
|
@ -220,25 +224,21 @@ export class MessageFlagsCache
|
||||||
* @param {number} setAction
|
* @param {number} setAction
|
||||||
*/
|
*/
|
||||||
static storeBySetAction(folder, uid, setAction) {
|
static storeBySetAction(folder, uid, setAction) {
|
||||||
|
let flags = this.getFor(folder, uid) || [];
|
||||||
const
|
const
|
||||||
flags = this.getFor(folder, uid) || [],
|
|
||||||
unread = flags.includes('\\seen') ? 0 : 1,
|
unread = flags.includes('\\seen') ? 0 : 1,
|
||||||
remove = item => {
|
add = item => flags.includes(item) || flags.push(item),
|
||||||
const index = flags.indexOf(item);
|
remove = item => flags = flags.filter(flag => flag != item);
|
||||||
if (index > -1) {
|
|
||||||
flags.splice(index, 1);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
switch (setAction) {
|
switch (setAction) {
|
||||||
case MessageSetAction.SetSeen:
|
case MessageSetAction.SetSeen:
|
||||||
flags.push('\\seen');
|
add('\\seen');
|
||||||
break;
|
break;
|
||||||
case MessageSetAction.UnsetSeen:
|
case MessageSetAction.UnsetSeen:
|
||||||
remove('\\seen');
|
remove('\\seen');
|
||||||
break;
|
break;
|
||||||
case MessageSetAction.SetFlag:
|
case MessageSetAction.SetFlag:
|
||||||
flags.push('\\flagged');
|
add('\\flagged');
|
||||||
break;
|
break;
|
||||||
case MessageSetAction.UnsetFlag:
|
case MessageSetAction.UnsetFlag:
|
||||||
remove('\\flagged');
|
remove('\\flagged');
|
||||||
|
|
@ -246,7 +246,7 @@ export class MessageFlagsCache
|
||||||
// no default
|
// no default
|
||||||
}
|
}
|
||||||
|
|
||||||
this.setFor(folder, uid, flags.unique());
|
this.setFor(folder, uid, flags);
|
||||||
|
|
||||||
return unread;
|
return unread;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -397,13 +397,8 @@ class ComposePopupView extends AbstractViewPopup {
|
||||||
|
|
||||||
if (3 === arrayLength(this.aDraftInfo)) {
|
if (3 === arrayLength(this.aDraftInfo)) {
|
||||||
const flagsCache = MessageFlagsCache.getFor(this.aDraftInfo[2], this.aDraftInfo[1]);
|
const flagsCache = MessageFlagsCache.getFor(this.aDraftInfo[2], this.aDraftInfo[1]);
|
||||||
if (flagsCache) {
|
if (isArray(flagsCache)) {
|
||||||
if ('forward' === this.aDraftInfo[0]) {
|
flagsCache.push(('forward' === this.aDraftInfo[0]) ? '$forwarded' : '\\answered');
|
||||||
flagsCache[3] = true;
|
|
||||||
} else {
|
|
||||||
flagsCache[2] = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
MessageFlagsCache.setFor(this.aDraftInfo[2], this.aDraftInfo[1], flagsCache);
|
MessageFlagsCache.setFor(this.aDraftInfo[2], this.aDraftInfo[1], flagsCache);
|
||||||
rl.app.reloadFlagsCurrentMessageListAndMessageFromCache();
|
rl.app.reloadFlagsCurrentMessageListAndMessageFromCache();
|
||||||
setFolderHash(this.aDraftInfo[2], '');
|
setFolderHash(this.aDraftInfo[2], '');
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue