From ea0fb114e15aa6a8fe905b1e50830fc36be1cb19 Mon Sep 17 00:00:00 2001 From: Manos Pitsidianakis Date: Sun, 20 Sep 2020 13:29:57 +0300 Subject: [PATCH] melib/imap: delete reverse_modseq storage Modsequences are not unique, and many messages may share the same modsequence. So storing a reverse mapping of modsequences to messages is invalid. --- melib/src/backends/imap.rs | 2 -- melib/src/backends/imap/untagged.rs | 41 ++++++----------------------- 2 files changed, 8 insertions(+), 35 deletions(-) diff --git a/melib/src/backends/imap.rs b/melib/src/backends/imap.rs index beda15070..219946e41 100644 --- a/melib/src/backends/imap.rs +++ b/melib/src/backends/imap.rs @@ -164,7 +164,6 @@ pub struct UIDStore { envelopes: Arc>>, max_uids: Arc>>, modseq: Arc>>, - reverse_modseq: Arc>>>, highestmodseqs: Arc>>>, mailboxes: Arc>>, is_online: Arc)>>, @@ -188,7 +187,6 @@ impl UIDStore { envelopes: Default::default(), max_uids: Default::default(), modseq: Default::default(), - reverse_modseq: Default::default(), highestmodseqs: Default::default(), hash_index: Default::default(), uid_index: Default::default(), diff --git a/melib/src/backends/imap/untagged.rs b/melib/src/backends/imap/untagged.rs index 52ba49302..021fa28bd 100644 --- a/melib/src/backends/imap/untagged.rs +++ b/melib/src/backends/imap/untagged.rs @@ -35,7 +35,7 @@ use std::convert::TryInto; impl ImapConnection { pub async fn process_untagged(&mut self, line: &[u8]) -> Result { macro_rules! try_fail { - ($mailbox_hash: expr, $($result:expr)+) => { + ($mailbox_hash: expr, $($result:expr $(,)*)+) => { $(if let Err(err) = $result { self.uid_store.is_online.lock().unwrap().1 = Err(err.clone()); debug!("failure: {}", err.to_string()); @@ -358,35 +358,17 @@ impl ImapConnection { body: _, envelope: _, }) => { - if let Some(modseq) = modseq { - if self - .uid_store - .reverse_modseq - .lock() - .unwrap() - .entry(mailbox_hash) - .or_default() - .contains_key(&modseq) - { - return Ok(true); - } - } - if let Some(flags) = flags { let uid = if let Some(uid) = uid { uid } else { try_fail!( - mailbox_hash, - self.send_command( - &[ - b"UID SEARCH", - format!("{}", msg_seq).as_bytes(), - ] - .join(&b' '), - ).await - self.read_response(&mut response, RequiredResponses::SEARCH).await - ); + mailbox_hash, + self.send_command(format!("UID SEARCH {}", msg_seq).as_bytes()) + .await, + self.read_response(&mut response, RequiredResponses::SEARCH) + .await, + ); debug!(to_str!(&response)); match super::protocol_parser::search_results( response.split_rn().next().unwrap_or(b""), @@ -398,8 +380,8 @@ impl ImapConnection { return Ok(false); } Err(e) => { + debug!("SEARCH error failed: {}", e); debug!(to_str!(&response)); - debug!(e); return Ok(false); } } @@ -419,13 +401,6 @@ impl ImapConnection { mailbox.unseen.lock().unwrap().remove(env_hash); } if let Some(modseq) = modseq { - self.uid_store - .reverse_modseq - .lock() - .unwrap() - .entry(mailbox_hash) - .or_default() - .insert(modseq, env_hash); self.uid_store .modseq .lock()