From 48a10f724171bfae702b7b40438189adbbe75079 Mon Sep 17 00:00:00 2001 From: Manos Pitsidianakis Date: Tue, 18 Jul 2023 15:51:31 +0300 Subject: [PATCH] melib: remove unused BackendOp::fetch_flags() method --- meli/src/plugins/backend.rs | 4 -- melib/src/backends.rs | 7 --- melib/src/backends/imap/operations.rs | 63 +-------------------------- melib/src/backends/jmap/operations.rs | 4 -- melib/src/backends/maildir.rs | 6 --- melib/src/backends/mbox.rs | 60 ------------------------- melib/src/backends/nntp/operations.rs | 6 +-- melib/src/backends/notmuch.rs | 7 --- 8 files changed, 2 insertions(+), 155 deletions(-) diff --git a/meli/src/plugins/backend.rs b/meli/src/plugins/backend.rs index 8efa90fe..b8398170 100644 --- a/meli/src/plugins/backend.rs +++ b/meli/src/plugins/backend.rs @@ -298,8 +298,4 @@ impl BackendOp for PluginOp { } })) } - - fn fetch_flags(&self) -> ResultFuture { - Err(Error::new("Unimplemented.")) - } } diff --git a/melib/src/backends.rs b/melib/src/backends.rs index a64b935a..f5b53f63 100644 --- a/melib/src/backends.rs +++ b/melib/src/backends.rs @@ -475,16 +475,12 @@ pub trait MailBackend: ::std::fmt::Debug + Send + Sync { /// fn as_bytes(&mut self) -> Result<&[u8]> { /// unimplemented!() /// } -/// fn fetch_flags(&self) -> Result { -/// unimplemented!() -/// } /// } /// /// let operation = Box::new(FooOp {}); /// ``` pub trait BackendOp: ::std::fmt::Debug + ::std::marker::Send { fn as_bytes(&mut self) -> ResultFuture>; - fn fetch_flags(&self) -> ResultFuture; } /// Wrapper for BackendOps that are to be set read-only. @@ -507,9 +503,6 @@ impl BackendOp for ReadOnlyOp { fn as_bytes(&mut self) -> ResultFuture> { self.op.as_bytes() } - fn fetch_flags(&self) -> ResultFuture { - self.op.fetch_flags() - } } #[derive(Default, Debug, Copy, Hash, Eq, Clone, Serialize, Deserialize, PartialEq)] diff --git a/melib/src/backends/imap/operations.rs b/melib/src/backends/imap/operations.rs index f3e35ac8..2d5269cd 100644 --- a/melib/src/backends/imap/operations.rs +++ b/melib/src/backends/imap/operations.rs @@ -24,7 +24,7 @@ use std::sync::Arc; use imap_codec::fetch::MessageDataItemName; use super::*; -use crate::{backends::*, email::*, error::Error}; +use crate::{backends::*, error::Error}; /// `BackendOp` implementor for Imap #[derive(Debug, Clone)] @@ -114,65 +114,4 @@ impl BackendOp for ImapOp { Ok(ret) })) } - - fn fetch_flags(&self) -> ResultFuture { - let mut response = Vec::with_capacity(8 * 1024); - let connection = self.connection.clone(); - let mailbox_hash = self.mailbox_hash; - let uid = self.uid; - let uid_store = self.uid_store.clone(); - - Ok(Box::pin(async move { - let exists_in_cache = { - let mut bytes_cache = uid_store.byte_cache.lock()?; - let cache = bytes_cache.entry(uid).or_default(); - cache.flags.is_some() - }; - if !exists_in_cache { - let mut conn = connection.lock().await; - conn.connect().await?; - conn.examine_mailbox(mailbox_hash, &mut response, false) - .await?; - conn.send_command(CommandBody::fetch( - uid, - vec![MessageDataItemName::Flags], - true, - )?) - .await?; - conn.read_response(&mut response, RequiredResponses::FETCH_REQUIRED) - .await?; - debug!( - "fetch response is {} bytes and {} lines", - response.len(), - String::from_utf8_lossy(&response).lines().count() - ); - let v = protocol_parser::uid_fetch_flags_responses(&response) - .map(|(_, v)| v) - .map_err(Error::from)?; - if v.len() != 1 { - debug!("responses len is {}", v.len()); - debug!(String::from_utf8_lossy(&response)); - /* [ref:TODO]: Trigger cache invalidation here. */ - debug!("message with UID {} was not found", uid); - return Err( - Error::new(format!("Invalid/unexpected response: {:?}", response)) - .set_summary(format!("message with UID {} was not found?", uid)), - ); - } - let (_uid, (_flags, _)) = v[0]; - assert_eq!(_uid, uid); - let mut bytes_cache = uid_store.byte_cache.lock()?; - let cache = bytes_cache.entry(uid).or_default(); - cache.flags = Some(_flags); - } - { - let val = { - let mut bytes_cache = uid_store.byte_cache.lock()?; - let cache = bytes_cache.entry(uid).or_default(); - cache.flags - }; - Ok(val.unwrap()) - } - })) - } } diff --git a/melib/src/backends/jmap/operations.rs b/melib/src/backends/jmap/operations.rs index 17245a83..72074242 100644 --- a/melib/src/backends/jmap/operations.rs +++ b/melib/src/backends/jmap/operations.rs @@ -84,8 +84,4 @@ impl BackendOp for JmapOp { Ok(res_text.into_bytes()) })) } - - fn fetch_flags(&self) -> ResultFuture { - Ok(Box::pin(async { Ok(Flag::default()) })) - } } diff --git a/melib/src/backends/maildir.rs b/melib/src/backends/maildir.rs index 28b0b9c0..11105d70 100644 --- a/melib/src/backends/maildir.rs +++ b/melib/src/backends/maildir.rs @@ -110,12 +110,6 @@ impl BackendOp for MaildirOp { let ret = Ok(self.slice.as_ref().unwrap().as_slice().to_vec()); Ok(Box::pin(async move { ret })) } - - fn fetch_flags(&self) -> ResultFuture { - let path = self.path()?; - let ret = Ok(path.flags()); - Ok(Box::pin(async move { ret })) - } } #[derive(Debug, Default, Clone)] diff --git a/melib/src/backends/mbox.rs b/melib/src/backends/mbox.rs index 391d2080..8d19f17a 100644 --- a/melib/src/backends/mbox.rs +++ b/melib/src/backends/mbox.rs @@ -322,66 +322,6 @@ impl BackendOp for MboxOp { .to_vec(); Ok(Box::pin(async move { Ok(ret) })) } - - fn fetch_flags(&self) -> ResultFuture { - let mut flags = Flag::empty(); - if self.slice.borrow().is_none() { - let file = std::fs::OpenOptions::new() - .read(true) - .write(true) - .open(&self.path)?; - get_rw_lock_blocking(&file, &self.path)?; - let mut buf_reader = BufReader::new(file); - let mut contents = Vec::new(); - buf_reader.read_to_end(&mut contents)?; - *self.slice.borrow_mut() = Some(contents); - } - let slice_ref = self.slice.borrow(); - let (_, headers) = parser::headers::headers_raw(slice_ref.as_ref().unwrap().as_slice())?; - if let Some(start) = headers.find(b"Status:") { - if let Some(end) = headers[start..].find(b"\n") { - let start = start + b"Status:".len(); - let status = headers[start..start + end].trim(); - if status.contains(&b'F') { - flags.set(Flag::FLAGGED, true); - } - if status.contains(&b'A') { - flags.set(Flag::REPLIED, true); - } - if status.contains(&b'R') { - flags.set(Flag::SEEN, true); - } - if status.contains(&b'D') { - flags.set(Flag::TRASHED, true); - } - if status.contains(&b'T') { - flags.set(Flag::DRAFT, true); - } - } - } - if let Some(start) = headers.find(b"X-Status:") { - let start = start + b"X-Status:".len(); - if let Some(end) = headers[start..].find(b"\n") { - let status = headers[start..start + end].trim(); - if status.contains(&b'F') { - flags.set(Flag::FLAGGED, true); - } - if status.contains(&b'A') { - flags.set(Flag::REPLIED, true); - } - if status.contains(&b'R') { - flags.set(Flag::SEEN, true); - } - if status.contains(&b'D') { - flags.set(Flag::TRASHED, true); - } - if status.contains(&b'T') { - flags.set(Flag::DRAFT, true); - } - } - } - Ok(Box::pin(async move { Ok(flags) })) - } } #[derive(Debug, Clone, Copy)] diff --git a/melib/src/backends/nntp/operations.rs b/melib/src/backends/nntp/operations.rs index a4ca29eb..f0e65adc 100644 --- a/melib/src/backends/nntp/operations.rs +++ b/melib/src/backends/nntp/operations.rs @@ -22,7 +22,7 @@ use std::sync::Arc; use super::*; -use crate::{backends::*, email::*, error::Error}; +use crate::{backends::*, error::Error}; /// `BackendOp` implementor for Nntp #[derive(Debug, Clone)] @@ -84,8 +84,4 @@ impl BackendOp for NntpOp { Ok(res.as_bytes()[pos..].to_vec()) })) } - - fn fetch_flags(&self) -> ResultFuture { - Ok(Box::pin(async move { Ok(Flag::default()) })) - } } diff --git a/melib/src/backends/notmuch.rs b/melib/src/backends/notmuch.rs index 275fbb0a..af95a022 100644 --- a/melib/src/backends/notmuch.rs +++ b/melib/src/backends/notmuch.rs @@ -1059,13 +1059,6 @@ impl BackendOp for NotmuchOp { let ret = Ok(self.bytes.as_ref().unwrap().to_vec()); Ok(Box::pin(async move { ret })) } - - fn fetch_flags(&self) -> ResultFuture { - let index_lck = self.index.write().unwrap(); - let message = Message::find_message(&self.database, &index_lck[&self.hash])?; - let (flags, _tags) = message.tags().collect_flags_and_tags(); - Ok(Box::pin(async move { Ok(flags) })) - } } pub struct Query<'s> {