melib/imap/cache/sync: explicitly remove new seen messages from unseen counter

jmap-eventsource
Manos Pitsidianakis 2020-12-11 16:17:36 +02:00
parent 09684e821d
commit 7e977fe627
Signed by: Manos Pitsidianakis
GPG Key ID: 73627C2F690DF710
1 changed files with 22 additions and 16 deletions

View File

@ -228,14 +228,17 @@ impl ImapConnection {
payload.push((uid, env)); payload.push((uid, env));
} }
debug!("sending payload for {}", mailbox_hash); debug!("sending payload for {}", mailbox_hash);
unseen let payload_hash_set: BTreeSet<_> =
.lock() payload.iter().map(|(_, env)| env.hash()).collect::<_>();
.unwrap() {
.insert_set(new_unseen.iter().cloned().collect()); let mut unseen_lck = unseen.lock().unwrap();
mailbox_exists for &seen_env_hash in payload_hash_set.difference(&new_unseen) {
.lock() unseen_lck.remove(seen_env_hash);
.unwrap() }
.insert_set(payload.iter().map(|(_, env)| env.hash()).collect::<_>());
unseen_lck.insert_set(new_unseen);
}
mailbox_exists.lock().unwrap().insert_set(payload_hash_set);
// 3. tag2 UID FETCH 1:<lastseenuid> FLAGS // 3. tag2 UID FETCH 1:<lastseenuid> FLAGS
if max_uid == 0 { if max_uid == 0 {
self.send_command("UID FETCH 1:* FLAGS".as_bytes()).await?; self.send_command("UID FETCH 1:* FLAGS".as_bytes()).await?;
@ -517,14 +520,17 @@ impl ImapConnection {
payload.push((uid, env)); payload.push((uid, env));
} }
debug!("sending payload for {}", mailbox_hash); debug!("sending payload for {}", mailbox_hash);
unseen let payload_hash_set: BTreeSet<_> =
.lock() payload.iter().map(|(_, env)| env.hash()).collect::<_>();
.unwrap() {
.insert_set(new_unseen.iter().cloned().collect()); let mut unseen_lck = unseen.lock().unwrap();
mailbox_exists for &seen_env_hash in payload_hash_set.difference(&new_unseen) {
.lock() unseen_lck.remove(seen_env_hash);
.unwrap() }
.insert_set(payload.iter().map(|(_, env)| env.hash()).collect::<_>());
unseen_lck.insert_set(new_unseen);
}
mailbox_exists.lock().unwrap().insert_set(payload_hash_set);
// 3. tag2 UID FETCH 1:<lastseenuid> FLAGS // 3. tag2 UID FETCH 1:<lastseenuid> FLAGS
if cached_max_uid == 0 { if cached_max_uid == 0 {
self.send_command( self.send_command(