From b2e853dd7b3f4c59f189b99df17a9b34920745f1 Mon Sep 17 00:00:00 2001 From: Manos Pitsidianakis Date: Thu, 24 Dec 2020 10:56:30 +0200 Subject: [PATCH] melib/imap: update unseen count on \Seen set_flags() --- melib/src/backends/imap.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/melib/src/backends/imap.rs b/melib/src/backends/imap.rs index 88efed124..8a8d8b4b1 100644 --- a/melib/src/backends/imap.rs +++ b/melib/src/backends/imap.rs @@ -708,6 +708,7 @@ impl MailBackend for ImapType { .await?; if flags.iter().any(|(_, b)| *b) { /* Set flags/tags to true */ + let mut set_seen = false; let command = { let mut tag_lck = uid_store.tag_index.write().unwrap(); let mut cmd = format!("UID STORE {}", uids[0]); @@ -731,6 +732,7 @@ impl MailBackend for ImapType { } Ok(flag) if *flag == Flag::SEEN => { cmd.push_str("\\Seen "); + set_seen = true; } Ok(flag) if *flag == Flag::DRAFT => { cmd.push_str("\\Draft "); @@ -757,8 +759,17 @@ impl MailBackend for ImapType { conn.send_command(command.as_bytes()).await?; conn.read_response(&mut response, RequiredResponses::empty()) .await?; + if set_seen { + let f = &uid_store.mailboxes.lock().await[&mailbox_hash]; + if let Ok(mut unseen) = f.unseen.lock() { + for env_hash in env_hashes.iter() { + unseen.remove(env_hash); + } + }; + } } if flags.iter().any(|(_, b)| !*b) { + let mut set_unseen = false; /* Set flags/tags to false */ let command = { let mut cmd = format!("UID STORE {}", uids[0]); @@ -782,6 +793,7 @@ impl MailBackend for ImapType { } Ok(flag) if *flag == Flag::SEEN => { cmd.push_str("\\Seen "); + set_unseen = true; } Ok(flag) if *flag == Flag::DRAFT => { cmd.push_str("\\Draft "); @@ -811,6 +823,14 @@ impl MailBackend for ImapType { conn.send_command(command.as_bytes()).await?; conn.read_response(&mut response, RequiredResponses::empty()) .await?; + if set_unseen { + let f = &uid_store.mailboxes.lock().await[&mailbox_hash]; + if let Ok(mut unseen) = f.unseen.lock() { + for env_hash in env_hashes.iter() { + unseen.insert_new(env_hash); + } + }; + } } Ok(()) }))