From 1e084c1d854ed7efb2254f9e8d52ac13d8badffa Mon Sep 17 00:00:00 2001 From: Manos Pitsidianakis Date: Sat, 22 Jul 2023 22:16:01 +0300 Subject: [PATCH] melib: move backends out of the backends module No reason to have such a deep module tree. --- meli/src/command.rs | 2 +- meli/src/command/actions.rs | 2 +- meli/src/components/mail/listing.rs | 2 +- meli/src/managesieve.rs | 2 +- melib/src/backends.rs | 88 +++++++++---------- melib/src/{backends => }/imap/cache.rs | 0 melib/src/{backends => }/imap/cache/sync.rs | 0 melib/src/{backends => }/imap/connection.rs | 0 melib/src/{backends => }/imap/error.rs | 0 melib/src/{backends => }/imap/mailbox.rs | 0 melib/src/{backends => }/imap/managesieve.rs | 2 +- melib/src/{backends/imap.rs => imap/mod.rs} | 4 +- melib/src/{backends => }/imap/operations.rs | 0 .../{backends => }/imap/protocol_parser.rs | 0 melib/src/{backends => }/imap/search.rs | 0 melib/src/{backends => }/imap/untagged.rs | 7 +- melib/src/{backends => }/imap/watch.rs | 0 melib/src/{backends => }/jmap/connection.rs | 0 melib/src/{backends => }/jmap/mailbox.rs | 0 melib/src/{backends/jmap.rs => jmap/mod.rs} | 12 +-- melib/src/{backends => }/jmap/objects.rs | 0 .../src/{backends => }/jmap/objects/email.rs | 2 +- .../jmap/objects/email/import.rs | 0 .../{backends => }/jmap/objects/mailbox.rs | 0 .../src/{backends => }/jmap/objects/thread.rs | 0 melib/src/{backends => }/jmap/operations.rs | 0 melib/src/{backends => }/jmap/protocol.rs | 0 melib/src/{backends => }/jmap/rfc8620.rs | 0 .../{backends => }/jmap/rfc8620/argument.rs | 2 +- .../{backends => }/jmap/rfc8620/comparator.rs | 0 .../{backends => }/jmap/rfc8620/filters.rs | 0 melib/src/lib.rs | 12 +++ melib/src/{backends => }/maildir/backend.rs | 5 +- .../{backends/maildir.rs => maildir/mod.rs} | 5 +- melib/src/{backends => }/maildir/stream.rs | 2 +- melib/src/{backends/mbox.rs => mbox/mod.rs} | 8 +- melib/src/{backends => }/mbox/write.rs | 0 melib/src/{backends => }/nntp/connection.rs | 0 melib/src/{backends => }/nntp/mailbox.rs | 0 melib/src/{backends/nntp.rs => nntp/mod.rs} | 6 +- melib/src/{backends => }/nntp/operations.rs | 0 .../{backends => }/nntp/protocol_parser.rs | 0 melib/src/{backends => }/nntp/store.rs | 2 +- melib/src/{backends => }/notmuch/bindings.rs | 0 melib/src/{backends => }/notmuch/message.rs | 0 .../{backends/notmuch.rs => notmuch/mod.rs} | 10 ++- melib/src/{backends => }/notmuch/notmuch.h | 0 melib/src/{backends => }/notmuch/tags.rs | 0 melib/src/{backends => }/notmuch/thread.rs | 0 49 files changed, 97 insertions(+), 78 deletions(-) rename melib/src/{backends => }/imap/cache.rs (100%) rename melib/src/{backends => }/imap/cache/sync.rs (100%) rename melib/src/{backends => }/imap/connection.rs (100%) rename melib/src/{backends => }/imap/error.rs (100%) rename melib/src/{backends => }/imap/mailbox.rs (100%) rename melib/src/{backends => }/imap/managesieve.rs (99%) rename melib/src/{backends/imap.rs => imap/mod.rs} (99%) rename melib/src/{backends => }/imap/operations.rs (100%) rename melib/src/{backends => }/imap/protocol_parser.rs (100%) rename melib/src/{backends => }/imap/search.rs (100%) rename melib/src/{backends => }/imap/untagged.rs (99%) rename melib/src/{backends => }/imap/watch.rs (100%) rename melib/src/{backends => }/jmap/connection.rs (100%) rename melib/src/{backends => }/jmap/mailbox.rs (100%) rename melib/src/{backends/jmap.rs => jmap/mod.rs} (99%) rename melib/src/{backends => }/jmap/objects.rs (100%) rename melib/src/{backends => }/jmap/objects/email.rs (99%) rename melib/src/{backends => }/jmap/objects/email/import.rs (100%) rename melib/src/{backends => }/jmap/objects/mailbox.rs (100%) rename melib/src/{backends => }/jmap/objects/thread.rs (100%) rename melib/src/{backends => }/jmap/operations.rs (100%) rename melib/src/{backends => }/jmap/protocol.rs (100%) rename melib/src/{backends => }/jmap/rfc8620.rs (100%) rename melib/src/{backends => }/jmap/rfc8620/argument.rs (98%) rename melib/src/{backends => }/jmap/rfc8620/comparator.rs (100%) rename melib/src/{backends => }/jmap/rfc8620/filters.rs (100%) rename melib/src/{backends => }/maildir/backend.rs (99%) rename melib/src/{backends/maildir.rs => maildir/mod.rs} (98%) rename melib/src/{backends => }/maildir/stream.rs (98%) rename melib/src/{backends/mbox.rs => mbox/mod.rs} (99%) rename melib/src/{backends => }/mbox/write.rs (100%) rename melib/src/{backends => }/nntp/connection.rs (100%) rename melib/src/{backends => }/nntp/mailbox.rs (100%) rename melib/src/{backends/nntp.rs => nntp/mod.rs} (99%) rename melib/src/{backends => }/nntp/operations.rs (100%) rename melib/src/{backends => }/nntp/protocol_parser.rs (100%) rename melib/src/{backends => }/nntp/store.rs (99%) rename melib/src/{backends => }/notmuch/bindings.rs (100%) rename melib/src/{backends => }/notmuch/message.rs (100%) rename melib/src/{backends/notmuch.rs => notmuch/mod.rs} (99%) rename melib/src/{backends => }/notmuch/notmuch.h (100%) rename melib/src/{backends => }/notmuch/tags.rs (100%) rename melib/src/{backends => }/notmuch/thread.rs (100%) diff --git a/meli/src/command.rs b/meli/src/command.rs index 284d0a13..533bfc6f 100644 --- a/meli/src/command.rs +++ b/meli/src/command.rs @@ -460,7 +460,7 @@ define_commands!([ let (input, _) = is_a(" ")(input)?; let (input, path) = quoted_argument(input.trim())?; let (input, _) = eof(input)?; - Ok((input, Listing(ExportMbox(Some(melib::backends::mbox::MboxFormat::MboxCl2), path.to_string().into())))) + Ok((input, Listing(ExportMbox(Some(melib::mbox::MboxFormat::MboxCl2), path.to_string().into())))) } ) }, diff --git a/meli/src/command/actions.rs b/meli/src/command/actions.rs index 24d88aa0..cb130287 100644 --- a/meli/src/command/actions.rs +++ b/meli/src/command/actions.rs @@ -49,7 +49,7 @@ pub enum ListingAction { MoveTo(MailboxPath), MoveToOtherAccount(AccountName, MailboxPath), Import(PathBuf, MailboxPath), - ExportMbox(Option, PathBuf), + ExportMbox(Option, PathBuf), Delete, OpenInNewTab, Tag(TagAction), diff --git a/meli/src/components/mail/listing.rs b/meli/src/components/mail/listing.rs index 76ed3492..901d16d0 100644 --- a/meli/src/components/mail/listing.rs +++ b/meli/src/components/mail/listing.rs @@ -670,7 +670,7 @@ pub trait MailListingTrait: ListingTrait { let fut: Pin> + Send + 'static>> = Box::pin(async move { let cl = async move { - use melib::backends::mbox::MboxMetadata; + use melib::mbox::MboxMetadata; let bytes: Vec> = try_join_all(futures?).await?; let envs: Vec<_> = envs_to_set .iter() diff --git a/meli/src/managesieve.rs b/meli/src/managesieve.rs index 83bf696b..fb504a85 100644 --- a/meli/src/managesieve.rs +++ b/meli/src/managesieve.rs @@ -31,7 +31,7 @@ extern crate serde_json; extern crate smallvec; extern crate termion; -use melib::{backends::imap::managesieve::ManageSieveConnection, Result}; +use melib::{imap::managesieve::ManageSieveConnection, Result}; #[macro_use] pub mod types; diff --git a/melib/src/backends.rs b/melib/src/backends.rs index 1af9ed58..3d1dc20f 100644 --- a/melib/src/backends.rs +++ b/melib/src/backends.rs @@ -22,20 +22,6 @@ pub mod utf7; use smallvec::SmallVec; -#[cfg(feature = "imap")] -pub mod imap; -#[cfg(feature = "nntp")] -pub mod nntp; -#[cfg(feature = "notmuch")] -pub mod notmuch; -#[cfg(feature = "notmuch")] -pub use self::notmuch::NotmuchDb; -#[cfg(feature = "jmap")] -pub mod jmap; -#[cfg(feature = "maildir")] -pub mod maildir; -#[cfg(feature = "mbox")] -pub mod mbox; use std::{ any::Any, borrow::Cow, @@ -45,20 +31,13 @@ use std::{ future::Future, ops::Deref, pin::Pin, - sync::{Arc, RwLock}, + sync::Arc, }; use futures::stream::Stream; -#[cfg(feature = "imap")] -pub use self::imap::ImapType; -#[cfg(feature = "maildir")] -use self::maildir::MaildirType; -#[cfg(feature = "mbox")] -use self::mbox::MboxType; -#[cfg(feature = "nntp")] -pub use self::nntp::NntpType; use super::email::{Envelope, EnvelopeHash, Flag}; + use crate::{ conf::AccountSettings, error::{Error, ErrorKind, Result}, @@ -153,6 +132,8 @@ impl Backends { }; #[cfg(feature = "maildir")] { + use crate::maildir::MaildirType; + b.register( "maildir".to_string(), Backend { @@ -163,6 +144,8 @@ impl Backends { } #[cfg(feature = "mbox")] { + use crate::mbox::MboxType; + b.register( "mbox".to_string(), Backend { @@ -173,26 +156,32 @@ impl Backends { } #[cfg(feature = "imap")] { + use crate::imap::ImapType; + b.register( "imap".to_string(), Backend { - create_fn: Box::new(|| Box::new(|f, i, ev| imap::ImapType::new(f, i, ev))), - validate_conf_fn: Box::new(imap::ImapType::validate_config), + create_fn: Box::new(|| Box::new(|f, i, ev| ImapType::new(f, i, ev))), + validate_conf_fn: Box::new(ImapType::validate_config), }, ); } #[cfg(feature = "nntp")] { + use crate::nntp::NntpType; + b.register( "nntp".to_string(), Backend { - create_fn: Box::new(|| Box::new(|f, i, ev| nntp::NntpType::new(f, i, ev))), - validate_conf_fn: Box::new(nntp::NntpType::validate_config), + create_fn: Box::new(|| Box::new(|f, i, ev| NntpType::new(f, i, ev))), + validate_conf_fn: Box::new(NntpType::validate_config), }, ); } #[cfg(feature = "notmuch")] { + use crate::notmuch::NotmuchDb; + b.register( "notmuch".to_string(), Backend { @@ -203,11 +192,13 @@ impl Backends { } #[cfg(feature = "jmap")] { + use crate::jmap::JmapType; + b.register( "jmap".to_string(), Backend { - create_fn: Box::new(|| Box::new(|f, i, ev| jmap::JmapType::new(f, i, ev))), - validate_conf_fn: Box::new(jmap::JmapType::validate_config), + create_fn: Box::new(|| Box::new(|f, i, ev| JmapType::new(f, i, ev))), + validate_conf_fn: Box::new(JmapType::validate_config), }, ); } @@ -675,8 +666,8 @@ impl EnvelopeHashBatch { #[derive(Default, Clone)] pub struct LazyCountSet { - not_yet_seen: usize, - set: BTreeSet, + pub not_yet_seen: usize, + pub set: BTreeSet, } impl fmt::Debug for LazyCountSet { @@ -744,21 +735,7 @@ impl LazyCountSet { } } -#[test] -fn test_lazy_count_set() { - let mut new = LazyCountSet::default(); - assert_eq!(new.len(), 0); - new.set_not_yet_seen(10); - assert_eq!(new.len(), 10); - for i in 0..10 { - assert!(new.insert_existing(EnvelopeHash(i))); - } - assert_eq!(new.len(), 10); - assert!(!new.insert_existing(EnvelopeHash(10))); - assert_eq!(new.len(), 10); -} - -pub struct IsSubscribedFn(Box bool + Send + Sync>); +pub struct IsSubscribedFn(pub Box bool + Send + Sync>); impl std::fmt::Debug for IsSubscribedFn { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { @@ -772,3 +749,22 @@ impl std::ops::Deref for IsSubscribedFn { &self.0 } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_lazy_count_set() { + let mut new = LazyCountSet::default(); + assert_eq!(new.len(), 0); + new.set_not_yet_seen(10); + assert_eq!(new.len(), 10); + for i in 0..10 { + assert!(new.insert_existing(EnvelopeHash(i))); + } + assert_eq!(new.len(), 10); + assert!(!new.insert_existing(EnvelopeHash(10))); + assert_eq!(new.len(), 10); + } +} diff --git a/melib/src/backends/imap/cache.rs b/melib/src/imap/cache.rs similarity index 100% rename from melib/src/backends/imap/cache.rs rename to melib/src/imap/cache.rs diff --git a/melib/src/backends/imap/cache/sync.rs b/melib/src/imap/cache/sync.rs similarity index 100% rename from melib/src/backends/imap/cache/sync.rs rename to melib/src/imap/cache/sync.rs diff --git a/melib/src/backends/imap/connection.rs b/melib/src/imap/connection.rs similarity index 100% rename from melib/src/backends/imap/connection.rs rename to melib/src/imap/connection.rs diff --git a/melib/src/backends/imap/error.rs b/melib/src/imap/error.rs similarity index 100% rename from melib/src/backends/imap/error.rs rename to melib/src/imap/error.rs diff --git a/melib/src/backends/imap/mailbox.rs b/melib/src/imap/mailbox.rs similarity index 100% rename from melib/src/backends/imap/mailbox.rs rename to melib/src/imap/mailbox.rs diff --git a/melib/src/backends/imap/managesieve.rs b/melib/src/imap/managesieve.rs similarity index 99% rename from melib/src/backends/imap/managesieve.rs rename to melib/src/imap/managesieve.rs index 6a49c25d..3ccc2ad6 100644 --- a/melib/src/backends/imap/managesieve.rs +++ b/melib/src/imap/managesieve.rs @@ -284,7 +284,7 @@ pub mod parser { } pub fn sieve_name(input: &[u8]) -> IResult<&[u8], &[u8]> { - crate::backends::imap::protocol_parser::string_token(input) + crate::imap::protocol_parser::string_token(input) } // *(sieve-name [SP "ACTIVE"] CRLF) diff --git a/melib/src/backends/imap.rs b/melib/src/imap/mod.rs similarity index 99% rename from melib/src/backends/imap.rs rename to melib/src/imap/mod.rs index 7f237724..01f9aee7 100644 --- a/melib/src/backends/imap.rs +++ b/melib/src/imap/mod.rs @@ -899,11 +899,11 @@ impl MailBackend for ImapType { })) } - fn as_any(&self) -> &dyn Any { + fn as_any(&self) -> &dyn std::any::Any { self } - fn as_any_mut(&mut self) -> &mut dyn Any { + fn as_any_mut(&mut self) -> &mut dyn std::any::Any { self } diff --git a/melib/src/backends/imap/operations.rs b/melib/src/imap/operations.rs similarity index 100% rename from melib/src/backends/imap/operations.rs rename to melib/src/imap/operations.rs diff --git a/melib/src/backends/imap/protocol_parser.rs b/melib/src/imap/protocol_parser.rs similarity index 100% rename from melib/src/backends/imap/protocol_parser.rs rename to melib/src/imap/protocol_parser.rs diff --git a/melib/src/backends/imap/search.rs b/melib/src/imap/search.rs similarity index 100% rename from melib/src/backends/imap/search.rs rename to melib/src/imap/search.rs diff --git a/melib/src/backends/imap/untagged.rs b/melib/src/imap/untagged.rs similarity index 99% rename from melib/src/backends/imap/untagged.rs rename to melib/src/imap/untagged.rs index 8ff362fd..3cbbb4fd 100644 --- a/melib/src/backends/imap/untagged.rs +++ b/melib/src/imap/untagged.rs @@ -26,16 +26,15 @@ use imap_codec::{command::CommandBody, search::SearchKey, sequence::SequenceSet} use super::{ImapConnection, MailboxSelection, UID}; use crate::{ backends::{ - imap::protocol_parser::{ - generate_envelope_hash, FetchResponse, ImapLineSplit, RequiredResponses, - UntaggedResponse, - }, BackendMailbox, RefreshEvent, RefreshEventKind::{self, *}, TagHash, }, email::common_attributes, error::*, + imap::protocol_parser::{ + generate_envelope_hash, FetchResponse, ImapLineSplit, RequiredResponses, UntaggedResponse, + }, }; impl ImapConnection { diff --git a/melib/src/backends/imap/watch.rs b/melib/src/imap/watch.rs similarity index 100% rename from melib/src/backends/imap/watch.rs rename to melib/src/imap/watch.rs diff --git a/melib/src/backends/jmap/connection.rs b/melib/src/jmap/connection.rs similarity index 100% rename from melib/src/backends/jmap/connection.rs rename to melib/src/jmap/connection.rs diff --git a/melib/src/backends/jmap/mailbox.rs b/melib/src/jmap/mailbox.rs similarity index 100% rename from melib/src/backends/jmap/mailbox.rs rename to melib/src/jmap/mailbox.rs diff --git a/melib/src/backends/jmap.rs b/melib/src/jmap/mod.rs similarity index 99% rename from melib/src/backends/jmap.rs rename to melib/src/jmap/mod.rs index 0902ccc7..a766f5a2 100644 --- a/melib/src/backends/jmap.rs +++ b/melib/src/jmap/mod.rs @@ -20,22 +20,24 @@ */ use std::{ - collections::{HashMap, HashSet}, + collections::{BTreeSet, HashMap, HashSet}, convert::TryFrom, + pin::Pin, str::FromStr, sync::{Arc, Mutex, RwLock}, time::{Duration, Instant}, }; -use futures::lock::Mutex as FutureMutex; +use futures::{lock::Mutex as FutureMutex, Stream}; use isahc::{config::RedirectPolicy, AsyncReadResponseExt, HttpClient}; use serde_json::Value; +use smallvec::SmallVec; use crate::{ backends::*, conf::AccountSettings, email::*, - error::{Error, Result}, + error::{Error, ErrorKind, Result}, utils::futures::{sleep, timeout}, Collection, }; @@ -499,11 +501,11 @@ impl MailBackend for JmapType { })) } - fn as_any(&self) -> &dyn Any { + fn as_any(&self) -> &dyn std::any::Any { self } - fn as_any_mut(&mut self) -> &mut dyn Any { + fn as_any_mut(&mut self) -> &mut dyn std::any::Any { self } diff --git a/melib/src/backends/jmap/objects.rs b/melib/src/jmap/objects.rs similarity index 100% rename from melib/src/backends/jmap/objects.rs rename to melib/src/jmap/objects.rs diff --git a/melib/src/backends/jmap/objects/email.rs b/melib/src/jmap/objects/email.rs similarity index 99% rename from melib/src/backends/jmap/objects/email.rs rename to melib/src/jmap/objects/email.rs index c75c15a3..880c20f7 100644 --- a/melib/src/backends/jmap/objects/email.rs +++ b/melib/src/jmap/objects/email.rs @@ -27,8 +27,8 @@ use serde_json::{value::RawValue, Value}; use super::*; use crate::{ - backends::jmap::rfc8620::bool_false, email::address::{Address, MailboxAddress}, + jmap::rfc8620::bool_false, utils::datetime, }; diff --git a/melib/src/backends/jmap/objects/email/import.rs b/melib/src/jmap/objects/email/import.rs similarity index 100% rename from melib/src/backends/jmap/objects/email/import.rs rename to melib/src/jmap/objects/email/import.rs diff --git a/melib/src/backends/jmap/objects/mailbox.rs b/melib/src/jmap/objects/mailbox.rs similarity index 100% rename from melib/src/backends/jmap/objects/mailbox.rs rename to melib/src/jmap/objects/mailbox.rs diff --git a/melib/src/backends/jmap/objects/thread.rs b/melib/src/jmap/objects/thread.rs similarity index 100% rename from melib/src/backends/jmap/objects/thread.rs rename to melib/src/jmap/objects/thread.rs diff --git a/melib/src/backends/jmap/operations.rs b/melib/src/jmap/operations.rs similarity index 100% rename from melib/src/backends/jmap/operations.rs rename to melib/src/jmap/operations.rs diff --git a/melib/src/backends/jmap/protocol.rs b/melib/src/jmap/protocol.rs similarity index 100% rename from melib/src/backends/jmap/protocol.rs rename to melib/src/jmap/protocol.rs diff --git a/melib/src/backends/jmap/rfc8620.rs b/melib/src/jmap/rfc8620.rs similarity index 100% rename from melib/src/backends/jmap/rfc8620.rs rename to melib/src/jmap/rfc8620.rs diff --git a/melib/src/backends/jmap/rfc8620/argument.rs b/melib/src/jmap/rfc8620/argument.rs similarity index 98% rename from melib/src/backends/jmap/rfc8620/argument.rs rename to melib/src/jmap/rfc8620/argument.rs index c0f9667b..7c5e5012 100644 --- a/melib/src/backends/jmap/rfc8620/argument.rs +++ b/melib/src/jmap/rfc8620/argument.rs @@ -19,7 +19,7 @@ * along with meli. If not, see . */ -use crate::backends::jmap::{ +use crate::jmap::{ protocol::Method, rfc8620::{Object, ResultField}, }; diff --git a/melib/src/backends/jmap/rfc8620/comparator.rs b/melib/src/jmap/rfc8620/comparator.rs similarity index 100% rename from melib/src/backends/jmap/rfc8620/comparator.rs rename to melib/src/jmap/rfc8620/comparator.rs diff --git a/melib/src/backends/jmap/rfc8620/filters.rs b/melib/src/jmap/rfc8620/filters.rs similarity index 100% rename from melib/src/backends/jmap/rfc8620/filters.rs rename to melib/src/jmap/rfc8620/filters.rs diff --git a/melib/src/lib.rs b/melib/src/lib.rs index 6e0d1092..ca7bd18f 100644 --- a/melib/src/lib.rs +++ b/melib/src/lib.rs @@ -158,6 +158,18 @@ pub mod utils; #[cfg(feature = "gpgme")] pub mod gpgme; +#[cfg(feature = "imap")] +pub mod imap; +#[cfg(feature = "jmap")] +pub mod jmap; +#[cfg(feature = "maildir")] +pub mod maildir; +#[cfg(feature = "mbox")] +pub mod mbox; +#[cfg(feature = "nntp")] +pub mod nntp; +#[cfg(feature = "notmuch")] +pub mod notmuch; #[cfg(feature = "smtp")] pub mod smtp; diff --git a/melib/src/backends/maildir/backend.rs b/melib/src/maildir/backend.rs similarity index 99% rename from melib/src/backends/maildir/backend.rs rename to melib/src/maildir/backend.rs index da495b7c..63382420 100644 --- a/melib/src/backends/maildir/backend.rs +++ b/melib/src/maildir/backend.rs @@ -25,6 +25,7 @@ //! specification. use futures::prelude::Stream; +use smallvec::SmallVec; use super::{MaildirMailbox, MaildirOp, MaildirPathTrait}; use crate::{ @@ -1063,11 +1064,11 @@ impl MailBackend for MaildirType { ) } - fn as_any(&self) -> &dyn Any { + fn as_any(&self) -> &dyn std::any::Any { self } - fn as_any_mut(&mut self) -> &mut dyn Any { + fn as_any_mut(&mut self) -> &mut dyn std::any::Any { self } } diff --git a/melib/src/backends/maildir.rs b/melib/src/maildir/mod.rs similarity index 98% rename from melib/src/backends/maildir.rs rename to melib/src/maildir/mod.rs index 11105d70..f5fdc988 100644 --- a/melib/src/backends/maildir.rs +++ b/melib/src/maildir/mod.rs @@ -26,14 +26,16 @@ pub use self::backend::*; mod stream; use std::{ collections::hash_map::DefaultHasher, + collections::HashMap, fs, hash::{Hash, Hasher}, io::{BufReader, Read}, path::{Path, PathBuf}, - sync::{Arc, Mutex}, + sync::{Arc, Mutex, RwLock}, }; use futures::stream::Stream; +use smallvec::SmallVec; pub use stream::*; use crate::{ @@ -41,6 +43,7 @@ use crate::{ email::Flag, error::{Error, Result}, utils::shellexpand::ShellExpandTrait, + AccountSettings, Envelope, EnvelopeHash, }; /// `BackendOp` implementor for Maildir diff --git a/melib/src/backends/maildir/stream.rs b/melib/src/maildir/stream.rs similarity index 98% rename from melib/src/backends/maildir/stream.rs rename to melib/src/maildir/stream.rs index fd797299..7f4a433b 100644 --- a/melib/src/backends/maildir/stream.rs +++ b/melib/src/maildir/stream.rs @@ -32,7 +32,7 @@ use futures::{ }; use super::*; -use crate::backends::maildir::backend::move_to_cur; +use crate::maildir::backend::move_to_cur; type Payload = Pin>> + Send + 'static>>; diff --git a/melib/src/backends/mbox.rs b/melib/src/mbox/mod.rs similarity index 99% rename from melib/src/backends/mbox.rs rename to melib/src/mbox/mod.rs index 2d0546f2..b6aba598 100644 --- a/melib/src/backends/mbox.rs +++ b/melib/src/mbox/mod.rs @@ -150,12 +150,16 @@ use crate::{ }; extern crate notify; +use futures::Stream; +use smallvec::SmallVec; + use std::{ collections::hash_map::HashMap, fs::File, io::{BufReader, Read}, os::unix::io::AsRawFd, path::{Path, PathBuf}, + pin::Pin, str::FromStr, sync::{mpsc::channel, Arc, Mutex, RwLock}, }; @@ -1175,11 +1179,11 @@ impl MailBackend for MboxType { )) } - fn as_any(&self) -> &dyn Any { + fn as_any(&self) -> &dyn std::any::Any { self } - fn as_any_mut(&mut self) -> &mut dyn Any { + fn as_any_mut(&mut self) -> &mut dyn std::any::Any { self } diff --git a/melib/src/backends/mbox/write.rs b/melib/src/mbox/write.rs similarity index 100% rename from melib/src/backends/mbox/write.rs rename to melib/src/mbox/write.rs diff --git a/melib/src/backends/nntp/connection.rs b/melib/src/nntp/connection.rs similarity index 100% rename from melib/src/backends/nntp/connection.rs rename to melib/src/nntp/connection.rs diff --git a/melib/src/backends/nntp/mailbox.rs b/melib/src/nntp/mailbox.rs similarity index 100% rename from melib/src/backends/nntp/mailbox.rs rename to melib/src/nntp/mailbox.rs diff --git a/melib/src/backends/nntp.rs b/melib/src/nntp/mod.rs similarity index 99% rename from melib/src/backends/nntp.rs rename to melib/src/nntp/mod.rs index 24f1a343..b336d790 100644 --- a/melib/src/backends/nntp.rs +++ b/melib/src/nntp/mod.rs @@ -57,7 +57,7 @@ use crate::{ email::*, error::{Error, Result, ResultIntoError}, utils::futures::timeout, - Collection, + Collection, ErrorKind, RefreshEventKind::NewFlags, }; pub type UID = usize; @@ -508,11 +508,11 @@ impl MailBackend for NntpType { Err(Error::new("NNTP doesn't support deletion.")) } - fn as_any(&self) -> &dyn Any { + fn as_any(&self) -> &dyn std::any::Any { self } - fn as_any_mut(&mut self) -> &mut dyn Any { + fn as_any_mut(&mut self) -> &mut dyn std::any::Any { self } diff --git a/melib/src/backends/nntp/operations.rs b/melib/src/nntp/operations.rs similarity index 100% rename from melib/src/backends/nntp/operations.rs rename to melib/src/nntp/operations.rs diff --git a/melib/src/backends/nntp/protocol_parser.rs b/melib/src/nntp/protocol_parser.rs similarity index 100% rename from melib/src/backends/nntp/protocol_parser.rs rename to melib/src/nntp/protocol_parser.rs diff --git a/melib/src/backends/nntp/store.rs b/melib/src/nntp/store.rs similarity index 99% rename from melib/src/backends/nntp/store.rs rename to melib/src/nntp/store.rs index 8b740170..71915004 100644 --- a/melib/src/backends/nntp/store.rs +++ b/melib/src/nntp/store.rs @@ -27,8 +27,8 @@ pub use inner::*; #[cfg(feature = "sqlite3")] mod inner { use crate::{ - backends::nntp::UID, email::Flag, + nntp::UID, utils::sqlite3::{self, Connection, DatabaseDescription}, EnvelopeHash, MailboxHash, Result, }; diff --git a/melib/src/backends/notmuch/bindings.rs b/melib/src/notmuch/bindings.rs similarity index 100% rename from melib/src/backends/notmuch/bindings.rs rename to melib/src/notmuch/bindings.rs diff --git a/melib/src/backends/notmuch/message.rs b/melib/src/notmuch/message.rs similarity index 100% rename from melib/src/backends/notmuch/message.rs rename to melib/src/notmuch/message.rs diff --git a/melib/src/backends/notmuch.rs b/melib/src/notmuch/mod.rs similarity index 99% rename from melib/src/backends/notmuch.rs rename to melib/src/notmuch/mod.rs index 037b8ce3..03b70d96 100644 --- a/melib/src/backends/notmuch.rs +++ b/melib/src/notmuch/mod.rs @@ -25,9 +25,11 @@ use std::{ io::Read, os::unix::ffi::OsStrExt, path::{Path, PathBuf}, + pin::Pin, sync::{Arc, Mutex, RwLock}, }; +use futures::Stream; use smallvec::SmallVec; use crate::{ @@ -36,7 +38,7 @@ use crate::{ email::{Envelope, EnvelopeHash, Flag}, error::{Error, Result}, utils::shellexpand::ShellExpandTrait, - Collection, + Collection, ErrorKind, }; macro_rules! call { @@ -798,7 +800,7 @@ impl MailBackend for NotmuchDb { .as_ref() .unwrap_or(&self.path) .to_path_buf(); - MaildirType::save_to_mailbox(path, bytes, flags)?; + crate::maildir::MaildirType::save_to_mailbox(path, bytes, flags)?; Ok(Box::pin(async { Ok(()) })) } @@ -976,11 +978,11 @@ impl MailBackend for NotmuchDb { self.collection.clone() } - fn as_any(&self) -> &dyn Any { + fn as_any(&self) -> &dyn std::any::Any { self } - fn as_any_mut(&mut self) -> &mut dyn Any { + fn as_any_mut(&mut self) -> &mut dyn std::any::Any { self } diff --git a/melib/src/backends/notmuch/notmuch.h b/melib/src/notmuch/notmuch.h similarity index 100% rename from melib/src/backends/notmuch/notmuch.h rename to melib/src/notmuch/notmuch.h diff --git a/melib/src/backends/notmuch/tags.rs b/melib/src/notmuch/tags.rs similarity index 100% rename from melib/src/backends/notmuch/tags.rs rename to melib/src/notmuch/tags.rs diff --git a/melib/src/backends/notmuch/thread.rs b/melib/src/notmuch/thread.rs similarity index 100% rename from melib/src/backends/notmuch/thread.rs rename to melib/src/notmuch/thread.rs