Much better fix for #175

And added some comments to it, to prevent more screw ups
This commit is contained in:
djmaze 2021-12-22 20:16:14 +01:00
parent 11547b575e
commit e244ba01de
6 changed files with 83 additions and 75 deletions

View file

@ -181,19 +181,20 @@ export class MessageFlagsCache
static initMessage(message) {
if (message) {
const uid = message.uid,
flags = this.getFor(message.folder, uid);
flags = this.getFor(message.folder, uid),
thread = message.threads;
if (isArray(flags)) {
message.flags(flags);
}
if (message.threads.length) {
const unseenSubUid = message.threads.find(sSubUid =>
(uid !== sSubUid) && !this.hasFlag(message.folder, sSubUid, '\\seen')
if (thread.length) {
const unseenSubUid = thread.find(iSubUid =>
(uid !== iSubUid) && !this.hasFlag(message.folder, iSubUid, '\\seen')
);
const flaggedSubUid = message.threads.find(sSubUid =>
(uid !== sSubUid) && this.hasFlag(message.folder, sSubUid, '\\flagged')
const flaggedSubUid = thread.find(iSubUid =>
(uid !== iSubUid) && this.hasFlag(message.folder, iSubUid, '\\flagged')
);
message.hasUnseenSubMessage(!!unseenSubUid);

View file

@ -35,7 +35,7 @@ class RemoteUserFetch extends AbstractFetchRemote {
Offset: 0,
Limit: SettingsUserStore.messagesPerPage(),
Search: '',
UidNext: getFolderInboxName() === sFolderFullName ? getFolderUidNext(sFolderFullName) : '',
UidNext: getFolderUidNext(sFolderFullName), // Used to check for new messages
Sort: FolderUserStore.sortMode(),
Hash: folderHash + SettingsGet('AccountHash')
}, params);
@ -104,11 +104,10 @@ class RemoteUserFetch extends AbstractFetchRemote {
* @param {Array=} list = []
*/
folderInformation(fCallback, folder, list = []) {
let request = true;
let fetch = !arrayLength(list);
const uids = [];
if (arrayLength(list)) {
request = false;
if (!fetch) {
list.forEach(messageListItem => {
if (!MessageFlagsCache.getFor(messageListItem.folder, messageListItem.uid)) {
uids.push(messageListItem.uid);
@ -122,17 +121,14 @@ class RemoteUserFetch extends AbstractFetchRemote {
});
}
});
if (uids.length) {
request = true;
}
fetch = uids.length;
}
if (request) {
if (fetch) {
this.request('FolderInformation', fCallback, {
Folder: folder,
FlagsUids: isArray(uids) ? uids : [],
UidNext: getFolderInboxName() === folder ? getFolderUidNext(folder) : 0
FlagsUids: uids,
UidNext: getFolderUidNext(folder) // Used to check for new messages
});
} else if (SettingsUserStore.useThreads()) {
rl.app.reloadFlagsCurrentMessageListAndMessageFromCache();

View file

@ -412,7 +412,7 @@ export const MessageUserStore = new class {
message.folder === json.Folder
) {
const threads = message.threads();
if (message.uid != json.Uid && 1 < threads.length && threads.includes(json.Uid)) {
if (message.uid != json.Uid && threads.includes(json.Uid)) {
message = oMessage ? null : MessageModel.reviveFromJson(json);
if (message) {
message.threads(threads);