diff --git a/Cargo.lock b/Cargo.lock index 93c67ac..c3aa0e6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1217,7 +1217,7 @@ dependencies = [ [[package]] name = "email-lib" version = "0.20.1" -source = "git+https://git.sr.ht/~soywod/pimalaya#aadfde30406f97b480ee673ec04f4d79b9e8d8b3" +source = "git+https://git.sr.ht/~soywod/pimalaya#0454027ca9bfba17931e7414e4463dacf8c028f8" dependencies = [ "advisory-lock", "anyhow", diff --git a/src/account/config.rs b/src/account/config.rs index 086ae42..4268618 100644 --- a/src/account/config.rs +++ b/src/account/config.rs @@ -11,6 +11,8 @@ use email::account::sync::config::SyncConfig; use email::imap::config::ImapConfig; #[cfg(feature = "maildir")] use email::maildir::config::MaildirConfig; +#[cfg(feature = "notmuch")] +use email::notmuch::config::NotmuchConfig; #[cfg(feature = "sendmail")] use email::sendmail::config::SendmailConfig; #[cfg(feature = "smtp")] diff --git a/src/backend/mod.rs b/src/backend/mod.rs index a1add72..08f325b 100644 --- a/src/backend/mod.rs +++ b/src/backend/mod.rs @@ -8,79 +8,113 @@ use std::ops::Deref; use email::account::config::AccountConfig; #[cfg(all(feature = "envelope-get", feature = "imap"))] -use email::envelope::get::imap::GetEnvelopeImap; +use email::envelope::get::imap::GetImapEnvelope; #[cfg(all(feature = "envelope-get", feature = "maildir"))] -use email::envelope::get::maildir::GetEnvelopeMaildir; +use email::envelope::get::maildir::GetMaildirEnvelope; +#[cfg(all(feature = "envelope-get", feature = "notmuch"))] +use email::envelope::get::notmuch::GetNotmuchEnvelope; #[cfg(all(feature = "envelope-list", feature = "imap"))] -use email::envelope::list::imap::ListEnvelopesImap; +use email::envelope::list::imap::ListImapEnvelopes; #[cfg(all(feature = "envelope-list", feature = "maildir"))] -use email::envelope::list::maildir::ListEnvelopesMaildir; +use email::envelope::list::maildir::ListMaildirEnvelopes; +#[cfg(all(feature = "envelope-list", feature = "notmuch"))] +use email::envelope::list::notmuch::ListNotmuchEnvelopes; #[cfg(all(feature = "envelope-watch", feature = "imap"))] use email::envelope::watch::imap::WatchImapEnvelopes; #[cfg(all(feature = "envelope-watch", feature = "maildir"))] use email::envelope::watch::maildir::WatchMaildirEnvelopes; +// #[cfg(all(feature = "envelope-watch", feature = "notmuch"))] +// use email::envelope::watch::notmuch::WatchNotmuchEnvelopes; #[cfg(feature = "message-add")] use email::envelope::SingleId; #[cfg(all(feature = "flag-add", feature = "imap"))] -use email::flag::add::imap::AddFlagsImap; +use email::flag::add::imap::AddImapFlags; #[cfg(all(feature = "flag-add", feature = "maildir"))] -use email::flag::add::maildir::AddFlagsMaildir; +use email::flag::add::maildir::AddMaildirFlags; +#[cfg(all(feature = "flag-add", feature = "notmuch"))] +use email::flag::add::notmuch::AddNotmuchFlags; #[cfg(all(feature = "flag-remove", feature = "imap"))] -use email::flag::remove::imap::RemoveFlagsImap; +use email::flag::remove::imap::RemoveImapFlags; #[cfg(all(feature = "flag-remove", feature = "maildir"))] -use email::flag::remove::maildir::RemoveFlagsMaildir; +use email::flag::remove::maildir::RemoveMaildirFlags; +#[cfg(all(feature = "flag-remove", feature = "notmuch"))] +use email::flag::remove::notmuch::RemoveNotmuchFlags; #[cfg(all(feature = "flag-set", feature = "imap"))] -use email::flag::set::imap::SetFlagsImap; +use email::flag::set::imap::SetImapFlags; #[cfg(all(feature = "flag-set", feature = "maildir"))] -use email::flag::set::maildir::SetFlagsMaildir; +use email::flag::set::maildir::SetMaildirFlags; +#[cfg(all(feature = "flag-set", feature = "notmuch"))] +use email::flag::set::notmuch::SetNotmuchFlags; #[cfg(all(feature = "folder-add", feature = "imap"))] -use email::folder::add::imap::AddFolderImap; +use email::folder::add::imap::AddImapFolder; #[cfg(all(feature = "folder-add", feature = "maildir"))] -use email::folder::add::maildir::AddFolderMaildir; +use email::folder::add::maildir::AddMaildirFolder; +#[cfg(all(feature = "folder-add", feature = "notmuch"))] +use email::folder::add::notmuch::AddNotmuchFolder; #[cfg(all(feature = "folder-delete", feature = "imap"))] -use email::folder::delete::imap::DeleteFolderImap; +use email::folder::delete::imap::DeleteImapFolder; #[cfg(all(feature = "folder-delete", feature = "maildir"))] -use email::folder::delete::maildir::DeleteFolderMaildir; +use email::folder::delete::maildir::DeleteMaildirFolder; +// #[cfg(all(feature = "folder-delete", feature = "notmuch"))] +// use email::folder::delete::notmuch::DeleteNotmuchFolder; #[cfg(all(feature = "folder-expunge", feature = "imap"))] -use email::folder::expunge::imap::ExpungeFolderImap; +use email::folder::expunge::imap::ExpungeImapFolder; #[cfg(all(feature = "folder-expunge", feature = "maildir"))] -use email::folder::expunge::maildir::ExpungeFolderMaildir; +use email::folder::expunge::maildir::ExpungeMaildirFolder; +// #[cfg(all(feature = "folder-expunge", feature = "notmuch"))] +// use email::folder::expunge::notmuch::ExpungeNotmuchFolder; #[cfg(all(feature = "folder-list", feature = "imap"))] -use email::folder::list::imap::ListFoldersImap; +use email::folder::list::imap::ListImapFolders; #[cfg(all(feature = "folder-list", feature = "maildir"))] -use email::folder::list::maildir::ListFoldersMaildir; +use email::folder::list::maildir::ListMaildirFolders; +#[cfg(all(feature = "folder-list", feature = "notmuch"))] +use email::folder::list::notmuch::ListNotmuchFolders; #[cfg(all(feature = "folder-purge", feature = "imap"))] -use email::folder::purge::imap::PurgeFolderImap; +use email::folder::purge::imap::PurgeImapFolder; +// #[cfg(all(feature = "folder-purge", feature = "maildir"))] +// use email::folder::purge::maildir::PurgeMaildirFolder; +// #[cfg(all(feature = "folder-purge", feature = "notmuch"))] +// use email::folder::purge::notmuch::PurgeNotmuchFolder; #[cfg(feature = "imap")] -use email::imap::{ImapSessionBuilder, ImapSessionSync}; +use email::imap::{ImapContextBuilder, ImapContextSync}; #[cfg(feature = "account-sync")] use email::maildir::config::MaildirConfig; #[cfg(feature = "maildir")] -use email::maildir::{MaildirSessionBuilder, MaildirSessionSync}; +use email::maildir::{MaildirContextBuilder, MaildirContextSync}; #[cfg(all(feature = "message-add", feature = "imap"))] use email::message::add::imap::AddImapMessage; #[cfg(all(feature = "message-add", feature = "maildir"))] use email::message::add::maildir::AddMaildirMessage; +#[cfg(all(feature = "message-add", feature = "notmuch"))] +use email::message::add::notmuch::AddNotmuchMessage; #[cfg(all(feature = "message-copy", feature = "imap"))] -use email::message::copy::imap::CopyMessagesImap; +use email::message::copy::imap::CopyImapMessages; #[cfg(all(feature = "message-copy", feature = "maildir"))] -use email::message::copy::maildir::CopyMessagesMaildir; +use email::message::copy::maildir::CopyMaildirMessages; +#[cfg(all(feature = "message-copy", feature = "notmuch"))] +use email::message::copy::notmuch::CopyNotmuchMessages; #[cfg(all(feature = "message-get", feature = "imap"))] -use email::message::get::imap::GetMessagesImap; +use email::message::get::imap::GetImapMessages; #[cfg(all(feature = "message-move", feature = "imap"))] -use email::message::move_::imap::MoveMessagesImap; +use email::message::move_::imap::MoveImapMessages; #[cfg(all(feature = "message-move", feature = "maildir"))] -use email::message::move_::maildir::MoveMessagesMaildir; +use email::message::move_::maildir::MoveMaildirMessages; +#[cfg(all(feature = "message-move", feature = "notmuch"))] +use email::message::move_::notmuch::MoveNotmuchMessages; #[cfg(all(feature = "message-peek", feature = "imap"))] -use email::message::peek::imap::PeekMessagesImap; +use email::message::peek::imap::PeekImapMessages; #[cfg(all(feature = "message-peek", feature = "maildir"))] -use email::message::peek::maildir::PeekMessagesMaildir; +use email::message::peek::maildir::PeekMaildirMessages; +#[cfg(all(feature = "message-peek", feature = "notmuch"))] +use email::message::peek::notmuch::PeekNotmuchMessages; #[cfg(any(feature = "message-peek", feature = "message-get"))] use email::message::Messages; +#[cfg(feature = "notmuch")] +use email::notmuch::{NotmuchContextBuilder, NotmuchContextSync}; #[cfg(feature = "sendmail")] use email::sendmail::SendmailContext; #[cfg(feature = "smtp")] -use email::smtp::{SmtpClientBuilder, SmtpClientSync}; +use email::smtp::{SmtpContextBuilder, SmtpContextSync}; #[allow(unused)] use email::{ @@ -137,13 +171,15 @@ impl ToString for BackendKind { #[derive(Clone, Default)] pub struct BackendContextBuilder { #[cfg(feature = "imap")] - pub imap: Option, + pub imap: Option, #[cfg(feature = "maildir")] - pub maildir: Option, + pub maildir: Option, #[cfg(feature = "account-sync")] - pub maildir_for_sync: Option, + pub maildir_for_sync: Option, + #[cfg(feature = "notmuch")] + pub notmuch: Option, #[cfg(feature = "smtp")] - pub smtp: Option, + pub smtp: Option, #[cfg(feature = "sendmail")] pub sendmail: Option, } @@ -163,7 +199,7 @@ impl BackendContextBuilder { .as_ref() .filter(|_| kinds.contains(&&BackendKind::Imap)) .map(|imap_config| { - ImapSessionBuilder::new(account_config.clone(), imap_config.clone()) + ImapContextBuilder::new(account_config.clone(), imap_config.clone()) .with_prebuilt_credentials() }); match ctx_builder { @@ -177,21 +213,21 @@ impl BackendContextBuilder { .as_ref() .filter(|_| kinds.contains(&&BackendKind::Maildir)) .map(|mdir_config| { - MaildirSessionBuilder::new(account_config.clone(), mdir_config.clone()) + MaildirContextBuilder::new(account_config.clone(), mdir_config.clone()) }), #[cfg(feature = "account-sync")] maildir_for_sync: Some(MaildirConfig { root_dir: account_config.get_sync_dir()?, }) .filter(|_| kinds.contains(&&BackendKind::MaildirForSync)) - .map(|mdir_config| MaildirSessionBuilder::new(account_config.clone(), mdir_config)), + .map(|mdir_config| MaildirContextBuilder::new(account_config.clone(), mdir_config)), #[cfg(feature = "notmuch")] notmuch: toml_account_config .notmuch .as_ref() .filter(|_| kinds.contains(&&BackendKind::Notmuch)) .map(|notmuch_config| { - NotmuchSessionBuilder::new(account_config.clone(), notmuch_config.clone()) + NotmuchContextBuilder::new(account_config.clone(), notmuch_config.clone()) }), #[cfg(feature = "smtp")] smtp: toml_account_config @@ -199,7 +235,7 @@ impl BackendContextBuilder { .as_ref() .filter(|_| kinds.contains(&&BackendKind::Smtp)) .map(|smtp_config| { - SmtpClientBuilder::new(account_config.clone(), smtp_config.clone()) + SmtpContextBuilder::new(account_config.clone(), smtp_config.clone()) }), #[cfg(feature = "sendmail")] sendmail: toml_account_config @@ -258,13 +294,15 @@ impl email::backend::BackendContextBuilder for BackendContextBuilder { #[derive(Default)] pub struct BackendContext { #[cfg(feature = "imap")] - pub imap: Option, + pub imap: Option, #[cfg(feature = "maildir")] - pub maildir: Option, + pub maildir: Option, #[cfg(feature = "account-sync")] - pub maildir_for_sync: Option, + pub maildir_for_sync: Option, + #[cfg(feature = "notmuch")] + pub notmuch: Option, #[cfg(feature = "smtp")] - pub smtp: Option, + pub smtp: Option, #[cfg(feature = "sendmail")] pub sendmail: Option, } @@ -297,7 +335,7 @@ impl BackendBuilder { .as_ref() .filter(|_| is_imap_used) .map(|imap_config| { - ImapSessionBuilder::new(account_config.clone(), imap_config.clone()) + ImapContextBuilder::new(account_config.clone(), imap_config.clone()) .with_prebuilt_credentials() }); @@ -312,14 +350,14 @@ impl BackendBuilder { .as_ref() .filter(|_| is_maildir_used) .map(|mdir_config| { - MaildirSessionBuilder::new(account_config.clone(), mdir_config.clone()) + MaildirContextBuilder::new(account_config.clone(), mdir_config.clone()) }), #[cfg(feature = "account-sync")] maildir_for_sync: Some(MaildirConfig { root_dir: account_config.get_sync_dir()?, }) .filter(|_| is_maildir_for_sync_used) - .map(|mdir_config| MaildirSessionBuilder::new(account_config.clone(), mdir_config)), + .map(|mdir_config| MaildirContextBuilder::new(account_config.clone(), mdir_config)), ..Default::default() }; @@ -332,25 +370,25 @@ impl BackendBuilder { #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { backend_builder = backend_builder - .with_add_folder(|ctx| ctx.maildir.as_ref().and_then(AddFolderMaildir::new)); + .with_add_folder(|ctx| ctx.maildir.as_ref().map(AddMaildirFolder::new_boxed)); } #[cfg(feature = "account-sync")] Some(BackendKind::MaildirForSync) => { backend_builder = backend_builder.with_add_folder(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(AddFolderMaildir::new) + .map(AddMaildirFolder::new_boxed) }); } #[cfg(feature = "imap")] Some(BackendKind::Imap) => { backend_builder = backend_builder - .with_add_folder(|ctx| ctx.imap.as_ref().and_then(AddFolderImap::new)); + .with_add_folder(|ctx| ctx.imap.as_ref().map(AddImapFolder::new_boxed)); } #[cfg(feature = "notmuch")] Some(BackendKind::Notmuch) => { backend_builder = backend_builder - .with_add_folder(|ctx| ctx.notmuch.as_ref().and_then(AddFolderNotmuch::new)); + .with_add_folder(|ctx| ctx.notmuch.as_ref().map(AddNotmuchFolder::new_boxed)); } _ => (), } @@ -360,7 +398,7 @@ impl BackendBuilder { #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { backend_builder = backend_builder.with_list_folders(|ctx| { - ctx.maildir.as_ref().and_then(ListFoldersMaildir::new) + ctx.maildir.as_ref().map(ListMaildirFolders::new_boxed) }); } #[cfg(feature = "account-sync")] @@ -368,18 +406,18 @@ impl BackendBuilder { backend_builder = backend_builder.with_list_folders(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(ListFoldersMaildir::new) + .map(ListMaildirFolders::new_boxed) }); } #[cfg(feature = "imap")] Some(BackendKind::Imap) => { backend_builder = backend_builder - .with_list_folders(|ctx| ctx.imap.as_ref().and_then(ListFoldersImap::new)); + .with_list_folders(|ctx| ctx.imap.as_ref().map(ListImapFolders::new_boxed)); } #[cfg(feature = "notmuch")] Some(BackendKind::Notmuch) => { backend_builder = backend_builder.with_list_folders(|ctx| { - ctx.notmuch.as_ref().and_then(ListFoldersNotmuch::new) + ctx.notmuch.as_ref().map(ListNotmuchFolders::new_boxed) }); } _ => (), @@ -390,7 +428,7 @@ impl BackendBuilder { #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { backend_builder = backend_builder.with_expunge_folder(|ctx| { - ctx.maildir.as_ref().and_then(ExpungeFolderMaildir::new) + ctx.maildir.as_ref().map(ExpungeMaildirFolder::new_boxed) }); } #[cfg(feature = "account-sync")] @@ -398,19 +436,20 @@ impl BackendBuilder { backend_builder = backend_builder.with_expunge_folder(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(ExpungeFolderMaildir::new) + .map(ExpungeMaildirFolder::new_boxed) }); } #[cfg(feature = "imap")] Some(BackendKind::Imap) => { backend_builder = backend_builder - .with_expunge_folder(|ctx| ctx.imap.as_ref().and_then(ExpungeFolderImap::new)); + .with_expunge_folder(|ctx| ctx.imap.as_ref().map(ExpungeImapFolder::new_boxed)); } #[cfg(feature = "notmuch")] Some(BackendKind::Notmuch) => { - backend_builder = backend_builder.with_expunge_folder(|ctx| { - ctx.notmuch.as_ref().and_then(ExpungeFolderNotmuch::new) - }); + // TODO + // backend_builder = backend_builder.with_expunge_folder(|ctx| { + // ctx.notmuch.as_ref().map(ExpungeNotmuchFolder::new_boxed) + // }); } _ => (), } @@ -421,24 +460,25 @@ impl BackendBuilder { // #[cfg(feature = "maildir")] // Some(BackendKind::Maildir) => { // backend_builder = backend_builder - // .with_purge_folder(|ctx| ctx.maildir.as_ref().and_then(PurgeFolderMaildir::new)); + // .with_purge_folder(|ctx| ctx.maildir.as_ref().map(PurgeMaildirFolder::new_boxed)); // } // TODO // #[cfg(feature = "account-sync")] // Some(BackendKind::MaildirForSync) => { // backend_builder = backend_builder - // .with_purge_folder(|ctx| ctx.maildir_for_sync.as_ref().and_then(PurgeFolderMaildir::new)); + // .with_purge_folder(|ctx| ctx.maildir_for_sync.as_ref().map(PurgeMaildirFolder::new_boxed)); // } #[cfg(feature = "imap")] Some(BackendKind::Imap) => { backend_builder = backend_builder - .with_purge_folder(|ctx| ctx.imap.as_ref().and_then(PurgeFolderImap::new)); + .with_purge_folder(|ctx| ctx.imap.as_ref().map(PurgeImapFolder::new_boxed)); } #[cfg(feature = "notmuch")] Some(BackendKind::Notmuch) => { - backend_builder = backend_builder.with_purge_folder(|ctx| { - ctx.notmuch.as_ref().and_then(PurgeFolderNotmuch::new) - }); + // TODO + // backend_builder = backend_builder.with_purge_folder(|ctx| { + // ctx.notmuch.as_ref().map(PurgeNotmuchFolder::new_boxed) + // }); } _ => (), } @@ -448,7 +488,7 @@ impl BackendBuilder { #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { backend_builder = backend_builder.with_delete_folder(|ctx| { - ctx.maildir.as_ref().and_then(DeleteFolderMaildir::new) + ctx.maildir.as_ref().map(DeleteMaildirFolder::new_boxed) }); } #[cfg(feature = "account-sync")] @@ -456,19 +496,20 @@ impl BackendBuilder { backend_builder = backend_builder.with_delete_folder(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(DeleteFolderMaildir::new) + .map(DeleteMaildirFolder::new_boxed) }); } #[cfg(feature = "imap")] Some(BackendKind::Imap) => { backend_builder = backend_builder - .with_delete_folder(|ctx| ctx.imap.as_ref().and_then(DeleteFolderImap::new)); + .with_delete_folder(|ctx| ctx.imap.as_ref().map(DeleteImapFolder::new_boxed)); } #[cfg(feature = "notmuch")] Some(BackendKind::Notmuch) => { - backend_builder = backend_builder.with_delete_folder(|ctx| { - ctx.notmuch.as_ref().and_then(DeleteFolderNotmuch::new) - }); + // TODO + // backend_builder = backend_builder.with_delete_folder(|ctx| { + // ctx.notmuch.as_ref().map(DeleteNotmuchFolder::new_boxed) + // }); } _ => (), } @@ -478,7 +519,7 @@ impl BackendBuilder { #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { backend_builder = backend_builder.with_list_envelopes(|ctx| { - ctx.maildir.as_ref().and_then(ListEnvelopesMaildir::new) + ctx.maildir.as_ref().map(ListMaildirEnvelopes::new_boxed) }); } #[cfg(feature = "account-sync")] @@ -486,18 +527,18 @@ impl BackendBuilder { backend_builder = backend_builder.with_list_envelopes(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(ListEnvelopesMaildir::new) + .map(ListMaildirEnvelopes::new_boxed) }); } #[cfg(feature = "imap")] Some(BackendKind::Imap) => { backend_builder = backend_builder - .with_list_envelopes(|ctx| ctx.imap.as_ref().and_then(ListEnvelopesImap::new)); + .with_list_envelopes(|ctx| ctx.imap.as_ref().map(ListImapEnvelopes::new_boxed)); } #[cfg(feature = "notmuch")] Some(BackendKind::Notmuch) => { backend_builder = backend_builder.with_list_envelopes(|ctx| { - ctx.notmuch.as_ref().and_then(ListEnvelopesNotmuch::new) + ctx.notmuch.as_ref().map(ListNotmuchEnvelopes::new_boxed) }); } _ => (), @@ -508,7 +549,7 @@ impl BackendBuilder { #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { backend_builder = backend_builder.with_watch_envelopes(|ctx| { - ctx.maildir.as_ref().and_then(WatchMaildirEnvelopes::new) + ctx.maildir.as_ref().map(WatchMaildirEnvelopes::new_boxed) }); } #[cfg(feature = "account-sync")] @@ -516,20 +557,21 @@ impl BackendBuilder { backend_builder = backend_builder.with_watch_envelopes(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(WatchMaildirEnvelopes::new) + .map(WatchMaildirEnvelopes::new_boxed) }); } #[cfg(feature = "imap")] Some(BackendKind::Imap) => { backend_builder = backend_builder.with_watch_envelopes(|ctx| { - ctx.imap.as_ref().and_then(WatchImapEnvelopes::new) + ctx.imap.as_ref().map(WatchImapEnvelopes::new_boxed) }); } #[cfg(feature = "notmuch")] Some(BackendKind::Notmuch) => { - backend_builder = backend_builder.with_watch_envelopes(|ctx| { - ctx.notmuch.as_ref().and_then(WatchNotmuchEnvelopes::new) - }); + // TODO + // backend_builder = backend_builder.with_watch_envelopes(|ctx| { + // ctx.notmuch.as_ref().map(WatchNotmuchEnvelopes::new_boxed) + // }); } _ => (), } @@ -539,7 +581,7 @@ impl BackendBuilder { #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { backend_builder = backend_builder.with_get_envelope(|ctx| { - ctx.maildir.as_ref().and_then(GetEnvelopeMaildir::new) + ctx.maildir.as_ref().map(GetMaildirEnvelope::new_boxed) }); } #[cfg(feature = "account-sync")] @@ -547,18 +589,18 @@ impl BackendBuilder { backend_builder = backend_builder.with_get_envelope(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(GetEnvelopeMaildir::new) + .map(GetMaildirEnvelope::new_boxed) }); } #[cfg(feature = "imap")] Some(BackendKind::Imap) => { backend_builder = backend_builder - .with_get_envelope(|ctx| ctx.imap.as_ref().and_then(GetEnvelopeImap::new)); + .with_get_envelope(|ctx| ctx.imap.as_ref().map(GetImapEnvelope::new_boxed)); } #[cfg(feature = "notmuch")] Some(BackendKind::Notmuch) => { backend_builder = backend_builder.with_get_envelope(|ctx| { - ctx.notmuch.as_ref().and_then(GetEnvelopeNotmuch::new) + ctx.notmuch.as_ref().map(GetNotmuchEnvelope::new_boxed) }); } _ => (), @@ -569,23 +611,25 @@ impl BackendBuilder { #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { backend_builder = backend_builder - .with_add_flags(|ctx| ctx.maildir.as_ref().and_then(AddFlagsMaildir::new)); + .with_add_flags(|ctx| ctx.maildir.as_ref().map(AddMaildirFlags::new_boxed)); } #[cfg(feature = "account-sync")] Some(BackendKind::MaildirForSync) => { backend_builder = backend_builder.with_add_flags(|ctx| { - ctx.maildir_for_sync.as_ref().and_then(AddFlagsMaildir::new) + ctx.maildir_for_sync + .as_ref() + .map(AddMaildirFlags::new_boxed) }); } #[cfg(feature = "imap")] Some(BackendKind::Imap) => { backend_builder = backend_builder - .with_add_flags(|ctx| ctx.imap.as_ref().and_then(AddFlagsImap::new)); + .with_add_flags(|ctx| ctx.imap.as_ref().map(AddImapFlags::new_boxed)); } #[cfg(feature = "notmuch")] Some(BackendKind::Notmuch) => { backend_builder = backend_builder - .with_add_flags(|ctx| ctx.notmuch.as_ref().and_then(AddFlagsNotmuch::new)); + .with_add_flags(|ctx| ctx.notmuch.as_ref().map(AddNotmuchFlags::new_boxed)); } _ => (), } @@ -595,23 +639,25 @@ impl BackendBuilder { #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { backend_builder = backend_builder - .with_set_flags(|ctx| ctx.maildir.as_ref().and_then(SetFlagsMaildir::new)); + .with_set_flags(|ctx| ctx.maildir.as_ref().map(SetMaildirFlags::new_boxed)); } #[cfg(feature = "account-sync")] Some(BackendKind::MaildirForSync) => { backend_builder = backend_builder.with_set_flags(|ctx| { - ctx.maildir_for_sync.as_ref().and_then(SetFlagsMaildir::new) + ctx.maildir_for_sync + .as_ref() + .map(SetMaildirFlags::new_boxed) }); } #[cfg(feature = "imap")] Some(BackendKind::Imap) => { backend_builder = backend_builder - .with_set_flags(|ctx| ctx.imap.as_ref().and_then(SetFlagsImap::new)); + .with_set_flags(|ctx| ctx.imap.as_ref().map(SetImapFlags::new_boxed)); } #[cfg(feature = "notmuch")] Some(BackendKind::Notmuch) => { backend_builder = backend_builder - .with_set_flags(|ctx| ctx.notmuch.as_ref().and_then(SetFlagsNotmuch::new)); + .with_set_flags(|ctx| ctx.notmuch.as_ref().map(SetNotmuchFlags::new_boxed)); } _ => (), } @@ -621,7 +667,7 @@ impl BackendBuilder { #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { backend_builder = backend_builder.with_remove_flags(|ctx| { - ctx.maildir.as_ref().and_then(RemoveFlagsMaildir::new) + ctx.maildir.as_ref().map(RemoveMaildirFlags::new_boxed) }); } #[cfg(feature = "account-sync")] @@ -629,18 +675,18 @@ impl BackendBuilder { backend_builder = backend_builder.with_remove_flags(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(RemoveFlagsMaildir::new) + .map(RemoveMaildirFlags::new_boxed) }); } #[cfg(feature = "imap")] Some(BackendKind::Imap) => { backend_builder = backend_builder - .with_remove_flags(|ctx| ctx.imap.as_ref().and_then(RemoveFlagsImap::new)); + .with_remove_flags(|ctx| ctx.imap.as_ref().map(RemoveImapFlags::new_boxed)); } #[cfg(feature = "notmuch")] Some(BackendKind::Notmuch) => { backend_builder = backend_builder.with_remove_flags(|ctx| { - ctx.notmuch.as_ref().and_then(RemoveFlagsNotmuch::new) + ctx.notmuch.as_ref().map(RemoveNotmuchFlags::new_boxed) }); } _ => (), @@ -651,27 +697,26 @@ impl BackendBuilder { #[cfg(feature = "imap")] Some(BackendKind::Imap) => { backend_builder = backend_builder - .with_add_message(|ctx| ctx.imap.as_ref().and_then(AddImapMessage::new)) - .with_add_message(|ctx| ctx.imap.as_ref().and_then(AddImapMessage::new)); + .with_add_message(|ctx| ctx.imap.as_ref().map(AddImapMessage::new_boxed)) + .with_add_message(|ctx| ctx.imap.as_ref().map(AddImapMessage::new_boxed)); } #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { backend_builder = backend_builder - .with_add_message(|ctx| ctx.maildir.as_ref().and_then(AddMaildirMessage::new)); + .with_add_message(|ctx| ctx.maildir.as_ref().map(AddMaildirMessage::new_boxed)); } #[cfg(feature = "account-sync")] Some(BackendKind::MaildirForSync) => { backend_builder = backend_builder.with_add_message(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(AddMaildirMessage::new) + .map(AddMaildirMessage::new_boxed) }); } #[cfg(feature = "notmuch")] Some(BackendKind::Notmuch) => { - backend_builder = backend_builder.with_add_raw_message(|ctx| { - ctx.notmuch.as_ref().and_then(AddRawMessageNotmuch::new) - }); + backend_builder = backend_builder + .with_add_message(|ctx| ctx.notmuch.as_ref().map(AddNotmuchMessage::new_boxed)); } _ => (), } @@ -681,7 +726,7 @@ impl BackendBuilder { #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { backend_builder = backend_builder.with_peek_messages(|ctx| { - ctx.maildir.as_ref().and_then(PeekMessagesMaildir::new) + ctx.maildir.as_ref().map(PeekMaildirMessages::new_boxed) }); } #[cfg(feature = "account-sync")] @@ -689,18 +734,18 @@ impl BackendBuilder { backend_builder = backend_builder.with_peek_messages(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(PeekMessagesMaildir::new) + .map(PeekMaildirMessages::new_boxed) }); } #[cfg(feature = "imap")] Some(BackendKind::Imap) => { backend_builder = backend_builder - .with_peek_messages(|ctx| ctx.imap.as_ref().and_then(PeekMessagesImap::new)); + .with_peek_messages(|ctx| ctx.imap.as_ref().map(PeekImapMessages::new_boxed)); } #[cfg(feature = "notmuch")] Some(BackendKind::Notmuch) => { backend_builder = backend_builder.with_peek_messages(|ctx| { - ctx.notmuch.as_ref().and_then(PeekMessagesNotmuch::new) + ctx.notmuch.as_ref().map(PeekNotmuchMessages::new_boxed) }); } _ => (), @@ -711,13 +756,7 @@ impl BackendBuilder { #[cfg(feature = "imap")] Some(BackendKind::Imap) => { backend_builder = backend_builder - .with_get_messages(|ctx| ctx.imap.as_ref().and_then(GetMessagesImap::new)); - } - #[cfg(feature = "notmuch")] - Some(BackendKind::Notmuch) => { - backend_builder = backend_builder.with_get_messages(|ctx| { - ctx.notmuch.as_ref().and_then(GetMessagesNotmuch::new) - }); + .with_get_messages(|ctx| ctx.imap.as_ref().map(GetImapMessages::new_boxed)); } _ => (), } @@ -727,7 +766,7 @@ impl BackendBuilder { #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { backend_builder = backend_builder.with_copy_messages(|ctx| { - ctx.maildir.as_ref().and_then(CopyMessagesMaildir::new) + ctx.maildir.as_ref().map(CopyMaildirMessages::new_boxed) }); } #[cfg(feature = "account-sync")] @@ -735,18 +774,18 @@ impl BackendBuilder { backend_builder = backend_builder.with_copy_messages(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(CopyMessagesMaildir::new) + .map(CopyMaildirMessages::new_boxed) }); } #[cfg(feature = "imap")] Some(BackendKind::Imap) => { backend_builder = backend_builder - .with_copy_messages(|ctx| ctx.imap.as_ref().and_then(CopyMessagesImap::new)); + .with_copy_messages(|ctx| ctx.imap.as_ref().map(CopyImapMessages::new_boxed)); } #[cfg(feature = "notmuch")] Some(BackendKind::Notmuch) => { backend_builder = backend_builder.with_copy_messages(|ctx| { - ctx.notmuch.as_ref().and_then(CopyMessagesNotmuch::new) + ctx.notmuch.as_ref().map(CopyNotmuchMessages::new_boxed) }); } _ => (), @@ -757,7 +796,7 @@ impl BackendBuilder { #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { backend_builder = backend_builder.with_move_messages(|ctx| { - ctx.maildir.as_ref().and_then(MoveMessagesMaildir::new) + ctx.maildir.as_ref().map(MoveMaildirMessages::new_boxed) }); } #[cfg(feature = "account-sync")] @@ -765,18 +804,18 @@ impl BackendBuilder { backend_builder = backend_builder.with_move_messages(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(MoveMessagesMaildir::new) + .map(MoveMaildirMessages::new_boxed) }); } #[cfg(feature = "imap")] Some(BackendKind::Imap) => { backend_builder = backend_builder - .with_move_messages(|ctx| ctx.imap.as_ref().and_then(MoveMessagesImap::new)); + .with_move_messages(|ctx| ctx.imap.as_ref().map(MoveImapMessages::new_boxed)); } #[cfg(feature = "notmuch")] Some(BackendKind::Notmuch) => { backend_builder = backend_builder.with_move_messages(|ctx| { - ctx.notmuch.as_ref().and_then(MoveMessagesNotmuch::new) + ctx.notmuch.as_ref().map(MoveNotmuchMessages::new_boxed) }); } _ => (), @@ -870,7 +909,7 @@ impl Backend { id_mapper = IdMapper::new( &self.backend.account_config, folder, - mdir_config.root_dir.clone(), + notmuch_config.get_maildir_path()?, )?; } } diff --git a/src/email/envelope/command/list.rs b/src/email/envelope/command/list.rs index 9c941a1..fdcf653 100644 --- a/src/email/envelope/command/list.rs +++ b/src/email/envelope/command/list.rs @@ -1,11 +1,11 @@ use anyhow::Result; use clap::Parser; #[cfg(feature = "imap")] -use email::envelope::list::imap::ListEnvelopesImap; +use email::envelope::list::imap::ListImapEnvelopes; #[cfg(feature = "maildir")] -use email::envelope::list::maildir::ListEnvelopesMaildir; +use email::envelope::list::maildir::ListMaildirEnvelopes; #[cfg(feature = "notmuch")] -use email::envelope::list::notmuch::ListEnvelopesNotmuch; +use email::envelope::list::notmuch::ListNotmuchEnvelopes; use log::info; #[cfg(feature = "account-sync")] @@ -92,13 +92,13 @@ impl ListEnvelopesCommand { #[cfg(feature = "imap")] Some(BackendKind::Imap) => { builder.set_list_envelopes(|ctx| { - ctx.imap.as_ref().and_then(ListEnvelopesImap::new) + ctx.imap.as_ref().map(ListImapEnvelopes::new_boxed) }); } #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { builder.set_list_envelopes(|ctx| { - ctx.maildir.as_ref().and_then(ListEnvelopesMaildir::new) + ctx.maildir.as_ref().map(ListMaildirEnvelopes::new_boxed) }); } #[cfg(feature = "account-sync")] @@ -106,7 +106,13 @@ impl ListEnvelopesCommand { builder.set_list_envelopes(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(ListEnvelopesMaildir::new) + .map(ListMaildirEnvelopes::new_boxed) + }); + } + #[cfg(feature = "notmuch")] + Some(BackendKind::Notmuch) => { + builder.set_list_envelopes(|ctx| { + ctx.notmuch.as_ref().map(ListNotmuchEnvelopes::new_boxed) }); } _ => (), diff --git a/src/email/envelope/command/watch.rs b/src/email/envelope/command/watch.rs index e59f424..8701e57 100644 --- a/src/email/envelope/command/watch.rs +++ b/src/email/envelope/command/watch.rs @@ -4,8 +4,8 @@ use clap::Parser; use email::envelope::watch::imap::WatchImapEnvelopes; #[cfg(feature = "maildir")] use email::envelope::watch::maildir::WatchMaildirEnvelopes; -#[cfg(feature = "notmuch")] -use email::envelope::watch::notmuch::WatchNotmuchEnvelopes; +// #[cfg(feature = "notmuch")] +// use email::envelope::watch::notmuch::WatchNotmuchEnvelopes; use log::info; #[cfg(feature = "account-sync")] @@ -56,13 +56,13 @@ impl WatchEnvelopesCommand { #[cfg(feature = "imap")] Some(BackendKind::Imap) => { builder.set_watch_envelopes(|ctx| { - ctx.imap.as_ref().and_then(WatchImapEnvelopes::new) + ctx.imap.as_ref().map(WatchImapEnvelopes::new_boxed) }); } #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { builder.set_watch_envelopes(|ctx| { - ctx.maildir.as_ref().and_then(WatchMaildirEnvelopes::new) + ctx.maildir.as_ref().map(WatchMaildirEnvelopes::new_boxed) }); } #[cfg(feature = "account-sync")] @@ -70,9 +70,16 @@ impl WatchEnvelopesCommand { builder.set_watch_envelopes(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(WatchMaildirEnvelopes::new) + .map(WatchMaildirEnvelopes::new_boxed) }); } + #[cfg(feature = "notmuch")] + Some(BackendKind::Notmuch) => { + // TODO + // builder.set_watch_envelopes(|ctx| { + // ctx.notmuch.as_ref().map(WatchNotmuchEnvelopes::new_boxed) + // }); + } _ => (), }, ) diff --git a/src/email/envelope/flag/command/add.rs b/src/email/envelope/flag/command/add.rs index 531d42b..a56e446 100644 --- a/src/email/envelope/flag/command/add.rs +++ b/src/email/envelope/flag/command/add.rs @@ -1,11 +1,11 @@ use anyhow::Result; use clap::Parser; #[cfg(feature = "imap")] -use email::flag::add::imap::AddFlagsImap; +use email::flag::add::imap::AddImapFlags; #[cfg(feature = "maildir")] -use email::flag::add::maildir::AddFlagsMaildir; +use email::flag::add::maildir::AddMaildirFlags; #[cfg(feature = "notmuch")] -use email::flag::add::notmuch::AddFlagsNotmuch; +use email::flag::add::notmuch::AddNotmuchFlags; use log::info; #[cfg(feature = "account-sync")] @@ -60,19 +60,26 @@ impl FlagAddCommand { |builder| match add_flags_kind { #[cfg(feature = "imap")] Some(BackendKind::Imap) => { - builder.set_add_flags(|ctx| ctx.imap.as_ref().and_then(AddFlagsImap::new)); + builder.set_add_flags(|ctx| ctx.imap.as_ref().map(AddImapFlags::new_boxed)); } #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { builder - .set_add_flags(|ctx| ctx.maildir.as_ref().and_then(AddFlagsMaildir::new)); + .set_add_flags(|ctx| ctx.maildir.as_ref().map(AddMaildirFlags::new_boxed)); } #[cfg(feature = "account-sync")] Some(BackendKind::MaildirForSync) => { builder.set_add_flags(|ctx| { - ctx.maildir_for_sync.as_ref().and_then(AddFlagsMaildir::new) + ctx.maildir_for_sync + .as_ref() + .map(AddMaildirFlags::new_boxed) }); } + #[cfg(feature = "notmuch")] + Some(BackendKind::Notmuch) => { + builder + .set_add_flags(|ctx| ctx.notmuch.as_ref().map(AddNotmuchFlags::new_boxed)); + } _ => (), }, ) diff --git a/src/email/envelope/flag/command/remove.rs b/src/email/envelope/flag/command/remove.rs index d6be3ba..6803c97 100644 --- a/src/email/envelope/flag/command/remove.rs +++ b/src/email/envelope/flag/command/remove.rs @@ -1,11 +1,11 @@ use anyhow::Result; use clap::Parser; #[cfg(feature = "imap")] -use email::flag::remove::imap::RemoveFlagsImap; +use email::flag::remove::imap::RemoveImapFlags; #[cfg(feature = "maildir")] -use email::flag::remove::maildir::RemoveFlagsMaildir; +use email::flag::remove::maildir::RemoveMaildirFlags; #[cfg(feature = "notmuch")] -use email::flag::remove::notmuch::RemoveFlagsNotmuch; +use email::flag::remove::notmuch::RemoveNotmuchFlags; use log::info; #[cfg(feature = "account-sync")] @@ -61,12 +61,12 @@ impl FlagRemoveCommand { #[cfg(feature = "imap")] Some(BackendKind::Imap) => { builder - .set_remove_flags(|ctx| ctx.imap.as_ref().and_then(RemoveFlagsImap::new)); + .set_remove_flags(|ctx| ctx.imap.as_ref().map(RemoveImapFlags::new_boxed)); } #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { builder.set_remove_flags(|ctx| { - ctx.maildir.as_ref().and_then(RemoveFlagsMaildir::new) + ctx.maildir.as_ref().map(RemoveMaildirFlags::new_boxed) }); } #[cfg(feature = "account-sync")] @@ -74,7 +74,13 @@ impl FlagRemoveCommand { builder.set_remove_flags(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(RemoveFlagsMaildir::new) + .map(RemoveMaildirFlags::new_boxed) + }); + } + #[cfg(feature = "notmuch")] + Some(BackendKind::Notmuch) => { + builder.set_remove_flags(|ctx| { + ctx.notmuch.as_ref().map(RemoveNotmuchFlags::new_boxed) }); } _ => (), diff --git a/src/email/envelope/flag/command/set.rs b/src/email/envelope/flag/command/set.rs index 84b2480..fa9bd76 100644 --- a/src/email/envelope/flag/command/set.rs +++ b/src/email/envelope/flag/command/set.rs @@ -1,11 +1,11 @@ use anyhow::Result; use clap::Parser; #[cfg(feature = "imap")] -use email::flag::set::imap::SetFlagsImap; +use email::flag::set::imap::SetImapFlags; #[cfg(feature = "maildir")] -use email::flag::set::maildir::SetFlagsMaildir; +use email::flag::set::maildir::SetMaildirFlags; #[cfg(feature = "notmuch")] -use email::flag::set::notmuch::SetFlagsNotmuch; +use email::flag::set::notmuch::SetNotmuchFlags; use log::info; #[cfg(feature = "account-sync")] @@ -60,19 +60,26 @@ impl FlagSetCommand { |builder| match set_flags_kind { #[cfg(feature = "imap")] Some(BackendKind::Imap) => { - builder.set_set_flags(|ctx| ctx.imap.as_ref().and_then(SetFlagsImap::new)); + builder.set_set_flags(|ctx| ctx.imap.as_ref().map(SetImapFlags::new_boxed)); } #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { builder - .set_set_flags(|ctx| ctx.maildir.as_ref().and_then(SetFlagsMaildir::new)); + .set_set_flags(|ctx| ctx.maildir.as_ref().map(SetMaildirFlags::new_boxed)); } #[cfg(feature = "account-sync")] Some(BackendKind::MaildirForSync) => { builder.set_set_flags(|ctx| { - ctx.maildir_for_sync.as_ref().and_then(SetFlagsMaildir::new) + ctx.maildir_for_sync + .as_ref() + .map(SetMaildirFlags::new_boxed) }); } + #[cfg(feature = "notmuch")] + Some(BackendKind::Notmuch) => { + builder + .set_set_flags(|ctx| ctx.notmuch.as_ref().map(SetNotmuchFlags::new_boxed)); + } _ => (), }, ) diff --git a/src/email/message/attachment/command/download.rs b/src/email/message/attachment/command/download.rs index c04853c..80425b8 100644 --- a/src/email/message/attachment/command/download.rs +++ b/src/email/message/attachment/command/download.rs @@ -1,9 +1,9 @@ use anyhow::{Context, Result}; use clap::Parser; #[cfg(feature = "imap")] -use email::message::get::imap::GetMessagesImap; +use email::message::get::imap::GetImapMessages; #[cfg(feature = "maildir")] -use email::{flag::add::maildir::AddFlagsMaildir, message::peek::maildir::PeekMessagesMaildir}; +use email::{flag::add::maildir::AddMaildirFlags, message::peek::maildir::PeekMaildirMessages}; use log::info; use std::{fs, path::PathBuf}; use uuid::Uuid; @@ -62,25 +62,27 @@ impl AttachmentDownloadCommand { #[cfg(feature = "imap")] Some(BackendKind::Imap) => { builder - .set_get_messages(|ctx| ctx.imap.as_ref().and_then(GetMessagesImap::new)); + .set_get_messages(|ctx| ctx.imap.as_ref().map(GetImapMessages::new_boxed)); } #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { builder.set_peek_messages(|ctx| { - ctx.maildir.as_ref().and_then(PeekMessagesMaildir::new) + ctx.maildir.as_ref().map(PeekMaildirMessages::new_boxed) }); builder - .set_add_flags(|ctx| ctx.maildir.as_ref().and_then(AddFlagsMaildir::new)); + .set_add_flags(|ctx| ctx.maildir.as_ref().map(AddMaildirFlags::new_boxed)); } #[cfg(feature = "account-sync")] Some(BackendKind::MaildirForSync) => { builder.set_peek_messages(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(PeekMessagesMaildir::new) + .map(PeekMaildirMessages::new_boxed) }); builder.set_add_flags(|ctx| { - ctx.maildir_for_sync.as_ref().and_then(AddFlagsMaildir::new) + ctx.maildir_for_sync + .as_ref() + .map(AddMaildirFlags::new_boxed) }); } _ => (), diff --git a/src/email/message/command/copy.rs b/src/email/message/command/copy.rs index 0bb95cc..c6017e6 100644 --- a/src/email/message/command/copy.rs +++ b/src/email/message/command/copy.rs @@ -1,9 +1,9 @@ use anyhow::Result; use clap::Parser; #[cfg(feature = "imap")] -use email::message::copy::imap::CopyMessagesImap; +use email::message::copy::imap::CopyImapMessages; #[cfg(feature = "maildir")] -use email::message::copy::maildir::CopyMessagesMaildir; +use email::message::copy::maildir::CopyMaildirMessages; use log::info; #[cfg(feature = "account-sync")] @@ -61,13 +61,14 @@ impl MessageCopyCommand { |#[allow(unused)] builder| match copy_messages_kind { #[cfg(feature = "imap")] Some(BackendKind::Imap) => { - builder - .set_copy_messages(|ctx| ctx.imap.as_ref().and_then(CopyMessagesImap::new)); + builder.set_copy_messages(|ctx| { + ctx.imap.as_ref().map(CopyImapMessages::new_boxed) + }); } #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { builder.set_copy_messages(|ctx| { - ctx.maildir.as_ref().and_then(CopyMessagesMaildir::new) + ctx.maildir.as_ref().map(CopyMaildirMessages::new_boxed) }); } #[cfg(feature = "account-sync")] @@ -75,7 +76,7 @@ impl MessageCopyCommand { builder.set_copy_messages(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(CopyMessagesMaildir::new) + .map(CopyMaildirMessages::new_boxed) }); } _ => (), diff --git a/src/email/message/command/delete.rs b/src/email/message/command/delete.rs index 77a6ce5..8ba7429 100644 --- a/src/email/message/command/delete.rs +++ b/src/email/message/command/delete.rs @@ -1,9 +1,9 @@ use anyhow::Result; use clap::Parser; #[cfg(feature = "imap")] -use email::{flag::add::imap::AddFlagsImap, message::move_::imap::MoveMessagesImap}; +use email::{flag::add::imap::AddImapFlags, message::move_::imap::MoveImapMessages}; #[cfg(feature = "maildir")] -use email::{flag::add::maildir::AddFlagsMaildir, message::move_::maildir::MoveMessagesMaildir}; +use email::{flag::add::maildir::AddMaildirFlags, message::move_::maildir::MoveMaildirMessages}; use log::info; #[cfg(feature = "account-sync")] @@ -62,27 +62,30 @@ impl MessageDeleteCommand { |#[allow(unused)] builder| match delete_messages_kind { #[cfg(feature = "imap")] Some(BackendKind::Imap) => { - builder - .set_move_messages(|ctx| ctx.imap.as_ref().and_then(MoveMessagesImap::new)); - builder.set_add_flags(|ctx| ctx.imap.as_ref().and_then(AddFlagsImap::new)); + builder.set_move_messages(|ctx| { + ctx.imap.as_ref().map(MoveImapMessages::new_boxed) + }); + builder.set_add_flags(|ctx| ctx.imap.as_ref().map(AddImapFlags::new_boxed)); } #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { builder.set_move_messages(|ctx| { - ctx.maildir.as_ref().and_then(MoveMessagesMaildir::new) + ctx.maildir.as_ref().map(MoveMaildirMessages::new_boxed) }); builder - .set_add_flags(|ctx| ctx.maildir.as_ref().and_then(AddFlagsMaildir::new)); + .set_add_flags(|ctx| ctx.maildir.as_ref().map(AddMaildirFlags::new_boxed)); } #[cfg(feature = "account-sync")] Some(BackendKind::MaildirForSync) => { builder.set_move_messages(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(MoveMessagesMaildir::new) + .map(MoveMaildirMessages::new_boxed) }); builder.set_add_flags(|ctx| { - ctx.maildir_for_sync.as_ref().and_then(AddFlagsMaildir::new) + ctx.maildir_for_sync + .as_ref() + .map(AddMaildirFlags::new_boxed) }); } _ => (), diff --git a/src/email/message/command/forward.rs b/src/email/message/command/forward.rs index ba0e163..3d9961f 100644 --- a/src/email/message/command/forward.rs +++ b/src/email/message/command/forward.rs @@ -5,9 +5,9 @@ use email::message::add::imap::AddImapMessage; #[cfg(feature = "maildir")] use email::message::add::maildir::AddMaildirMessage; #[cfg(feature = "sendmail")] -use email::message::send::sendmail::SendMessageSendmail; +use email::message::send::sendmail::SendSendmailMessage; #[cfg(feature = "smtp")] -use email::message::send::smtp::SendMessageSmtp; +use email::message::send::smtp::SendSmtpMessage; use log::info; #[cfg(feature = "account-sync")] @@ -75,13 +75,14 @@ impl MessageForwardCommand { match add_message_kind { #[cfg(feature = "imap")] Some(BackendKind::Imap) => { - builder - .set_add_message(|ctx| ctx.imap.as_ref().and_then(AddImapMessage::new)); + builder.set_add_message(|ctx| { + ctx.imap.as_ref().map(AddImapMessage::new_boxed) + }); } #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { builder.set_add_message(|ctx| { - ctx.maildir.as_ref().and_then(AddMaildirMessage::new) + ctx.maildir.as_ref().map(AddMaildirMessage::new_boxed) }); } #[cfg(feature = "account-sync")] @@ -89,7 +90,7 @@ impl MessageForwardCommand { builder.set_add_message(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(AddMaildirMessage::new) + .map(AddMaildirMessage::new_boxed) }); } _ => (), @@ -99,13 +100,13 @@ impl MessageForwardCommand { #[cfg(feature = "smtp")] Some(BackendKind::Smtp) => { builder.set_send_message(|ctx| { - ctx.smtp.as_ref().and_then(SendMessageSmtp::new) + ctx.smtp.as_ref().map(SendSmtpMessage::new_boxed) }); } #[cfg(feature = "sendmail")] Some(BackendKind::Sendmail) => { builder.set_send_message(|ctx| { - ctx.sendmail.as_ref().and_then(SendMessageSendmail::new) + ctx.sendmail.as_ref().map(SendSendmailMessage::new_boxed) }); } _ => (), diff --git a/src/email/message/command/mailto.rs b/src/email/message/command/mailto.rs index 86a3cc0..8b5af27 100644 --- a/src/email/message/command/mailto.rs +++ b/src/email/message/command/mailto.rs @@ -5,9 +5,9 @@ use email::message::add::imap::AddImapMessage; #[cfg(feature = "maildir")] use email::message::add::maildir::AddMaildirMessage; #[cfg(feature = "sendmail")] -use email::message::send::sendmail::SendMessageSendmail; +use email::message::send::sendmail::SendSendmailMessage; #[cfg(feature = "smtp")] -use email::message::send::smtp::SendMessageSmtp; +use email::message::send::smtp::SendSmtpMessage; use log::{debug, info}; use mail_builder::MessageBuilder; use url::Url; @@ -72,13 +72,14 @@ impl MessageMailtoCommand { match add_message_kind { #[cfg(feature = "imap")] Some(BackendKind::Imap) => { - builder - .set_add_message(|ctx| ctx.imap.as_ref().and_then(AddImapMessage::new)); + builder.set_add_message(|ctx| { + ctx.imap.as_ref().map(AddImapMessage::new_boxed) + }); } #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { builder.set_add_message(|ctx| { - ctx.maildir.as_ref().and_then(AddMaildirMessage::new) + ctx.maildir.as_ref().map(AddMaildirMessage::new_boxed) }); } #[cfg(feature = "account-sync")] @@ -86,7 +87,7 @@ impl MessageMailtoCommand { builder.set_add_message(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(AddMaildirMessage::new) + .map(AddMaildirMessage::new_boxed) }); } _ => (), @@ -96,13 +97,13 @@ impl MessageMailtoCommand { #[cfg(feature = "smtp")] Some(BackendKind::Smtp) => { builder.set_send_message(|ctx| { - ctx.smtp.as_ref().and_then(SendMessageSmtp::new) + ctx.smtp.as_ref().map(SendSmtpMessage::new_boxed) }); } #[cfg(feature = "sendmail")] Some(BackendKind::Sendmail) => { builder.set_send_message(|ctx| { - ctx.sendmail.as_ref().and_then(SendMessageSendmail::new) + ctx.sendmail.as_ref().map(SendSendmailMessage::new_boxed) }); } _ => (), diff --git a/src/email/message/command/move_.rs b/src/email/message/command/move_.rs index 7ca7b1d..d0eac06 100644 --- a/src/email/message/command/move_.rs +++ b/src/email/message/command/move_.rs @@ -1,9 +1,9 @@ use anyhow::Result; use clap::Parser; #[cfg(feature = "imap")] -use email::message::move_::imap::MoveMessagesImap; +use email::message::move_::imap::MoveImapMessages; #[cfg(feature = "maildir")] -use email::message::move_::maildir::MoveMessagesMaildir; +use email::message::move_::maildir::MoveMaildirMessages; use log::info; #[cfg(feature = "account-sync")] @@ -61,13 +61,14 @@ impl MessageMoveCommand { |#[allow(unused)] builder| match move_messages_kind { #[cfg(feature = "imap")] Some(BackendKind::Imap) => { - builder - .set_move_messages(|ctx| ctx.imap.as_ref().and_then(MoveMessagesImap::new)); + builder.set_move_messages(|ctx| { + ctx.imap.as_ref().map(MoveImapMessages::new_boxed) + }); } #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { builder.set_move_messages(|ctx| { - ctx.maildir.as_ref().and_then(MoveMessagesMaildir::new) + ctx.maildir.as_ref().map(MoveMaildirMessages::new_boxed) }); } #[cfg(feature = "account-sync")] @@ -75,7 +76,7 @@ impl MessageMoveCommand { builder.set_move_messages(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(MoveMessagesMaildir::new) + .map(MoveMaildirMessages::new_boxed) }); } _ => (), diff --git a/src/email/message/command/read.rs b/src/email/message/command/read.rs index 8b6555d..d326437 100644 --- a/src/email/message/command/read.rs +++ b/src/email/message/command/read.rs @@ -1,9 +1,9 @@ use anyhow::Result; use clap::Parser; #[cfg(feature = "imap")] -use email::message::{get::imap::GetMessagesImap, peek::imap::PeekMessagesImap}; +use email::message::{get::imap::GetImapMessages, peek::imap::PeekImapMessages}; #[cfg(feature = "maildir")] -use email::{flag::add::maildir::AddFlagsMaildir, message::peek::maildir::PeekMessagesMaildir}; +use email::{flag::add::maildir::AddMaildirFlags, message::peek::maildir::PeekMaildirMessages}; use log::info; use mml::message::FilterParts; @@ -106,28 +106,31 @@ impl MessageReadCommand { |#[allow(unused)] builder| match get_messages_kind { #[cfg(feature = "imap")] Some(BackendKind::Imap) => { + builder.set_peek_messages(|ctx| { + ctx.imap.as_ref().map(PeekImapMessages::new_boxed) + }); builder - .set_peek_messages(|ctx| ctx.imap.as_ref().and_then(PeekMessagesImap::new)); - builder - .set_get_messages(|ctx| ctx.imap.as_ref().and_then(GetMessagesImap::new)); + .set_get_messages(|ctx| ctx.imap.as_ref().map(GetImapMessages::new_boxed)); } #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { builder.set_peek_messages(|ctx| { - ctx.maildir.as_ref().and_then(PeekMessagesMaildir::new) + ctx.maildir.as_ref().map(PeekMaildirMessages::new_boxed) }); builder - .set_add_flags(|ctx| ctx.maildir.as_ref().and_then(AddFlagsMaildir::new)); + .set_add_flags(|ctx| ctx.maildir.as_ref().map(AddMaildirFlags::new_boxed)); } #[cfg(feature = "account-sync")] Some(BackendKind::MaildirForSync) => { builder.set_peek_messages(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(PeekMessagesMaildir::new) + .map(PeekMaildirMessages::new_boxed) }); builder.set_add_flags(|ctx| { - ctx.maildir_for_sync.as_ref().and_then(AddFlagsMaildir::new) + ctx.maildir_for_sync + .as_ref() + .map(AddMaildirFlags::new_boxed) }); } _ => (), diff --git a/src/email/message/command/reply.rs b/src/email/message/command/reply.rs index 2eee59a..7611e4d 100644 --- a/src/email/message/command/reply.rs +++ b/src/email/message/command/reply.rs @@ -5,9 +5,9 @@ use email::message::add::imap::AddImapMessage; #[cfg(feature = "maildir")] use email::message::add::maildir::AddMaildirMessage; #[cfg(feature = "sendmail")] -use email::message::send::sendmail::SendMessageSendmail; +use email::message::send::sendmail::SendSendmailMessage; #[cfg(feature = "smtp")] -use email::message::send::smtp::SendMessageSmtp; +use email::message::send::smtp::SendSmtpMessage; use log::info; #[cfg(feature = "account-sync")] @@ -77,13 +77,14 @@ impl MessageReplyCommand { match add_message_kind { #[cfg(feature = "imap")] Some(BackendKind::Imap) => { - builder - .set_add_message(|ctx| ctx.imap.as_ref().and_then(AddImapMessage::new)); + builder.set_add_message(|ctx| { + ctx.imap.as_ref().map(AddImapMessage::new_boxed) + }); } #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { builder.set_add_message(|ctx| { - ctx.maildir.as_ref().and_then(AddMaildirMessage::new) + ctx.maildir.as_ref().map(AddMaildirMessage::new_boxed) }); } #[cfg(feature = "account-sync")] @@ -91,7 +92,7 @@ impl MessageReplyCommand { builder.set_add_message(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(AddMaildirMessage::new) + .map(AddMaildirMessage::new_boxed) }); } _ => (), @@ -101,13 +102,13 @@ impl MessageReplyCommand { #[cfg(feature = "smtp")] Some(BackendKind::Smtp) => { builder.set_send_message(|ctx| { - ctx.smtp.as_ref().and_then(SendMessageSmtp::new) + ctx.smtp.as_ref().map(SendSmtpMessage::new_boxed) }); } #[cfg(feature = "sendmail")] Some(BackendKind::Sendmail) => { builder.set_send_message(|ctx| { - ctx.sendmail.as_ref().and_then(SendMessageSendmail::new) + ctx.sendmail.as_ref().map(SendSendmailMessage::new_boxed) }); } _ => (), diff --git a/src/email/message/command/save.rs b/src/email/message/command/save.rs index bc1b9c2..c8a9f4a 100644 --- a/src/email/message/command/save.rs +++ b/src/email/message/command/save.rs @@ -59,12 +59,12 @@ impl MessageSaveCommand { |#[allow(unused)] builder| match add_message_kind { #[cfg(feature = "imap")] Some(BackendKind::Imap) => { - builder.set_add_message(|ctx| ctx.imap.as_ref().and_then(AddImapMessage::new)); + builder.set_add_message(|ctx| ctx.imap.as_ref().map(AddImapMessage::new_boxed)); } #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { builder.set_add_message(|ctx| { - ctx.maildir.as_ref().and_then(AddMaildirMessage::new) + ctx.maildir.as_ref().map(AddMaildirMessage::new_boxed) }); } #[cfg(feature = "account-sync")] @@ -72,7 +72,7 @@ impl MessageSaveCommand { builder.set_add_message(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(AddMaildirMessage::new) + .map(AddMaildirMessage::new_boxed) }); } _ => (), diff --git a/src/email/message/command/send.rs b/src/email/message/command/send.rs index d8c265b..a7945a8 100644 --- a/src/email/message/command/send.rs +++ b/src/email/message/command/send.rs @@ -5,9 +5,9 @@ use email::message::add::imap::AddImapMessage; #[cfg(feature = "maildir")] use email::message::add::maildir::AddMaildirMessage; #[cfg(feature = "sendmail")] -use email::message::send::sendmail::SendMessageSendmail; +use email::message::send::sendmail::SendSendmailMessage; #[cfg(feature = "smtp")] -use email::message::send::smtp::SendMessageSmtp; +use email::message::send::smtp::SendSmtpMessage; use log::info; use std::io::{self, BufRead, IsTerminal}; @@ -66,13 +66,14 @@ impl MessageSendCommand { match add_message_kind { #[cfg(feature = "imap")] Some(BackendKind::Imap) => { - builder - .set_add_message(|ctx| ctx.imap.as_ref().and_then(AddImapMessage::new)); + builder.set_add_message(|ctx| { + ctx.imap.as_ref().map(AddImapMessage::new_boxed) + }); } #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { builder.set_add_message(|ctx| { - ctx.maildir.as_ref().and_then(AddMaildirMessage::new) + ctx.maildir.as_ref().map(AddMaildirMessage::new_boxed) }); } #[cfg(feature = "account-sync")] @@ -80,7 +81,7 @@ impl MessageSendCommand { builder.set_add_message(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(AddMaildirMessage::new) + .map(AddMaildirMessage::new_boxed) }); } _ => (), @@ -89,13 +90,13 @@ impl MessageSendCommand { #[cfg(feature = "smtp")] Some(BackendKind::Smtp) => { builder.set_send_message(|ctx| { - ctx.smtp.as_ref().and_then(SendMessageSmtp::new) + ctx.smtp.as_ref().map(SendSmtpMessage::new_boxed) }); } #[cfg(feature = "sendmail")] Some(BackendKind::Sendmail) => { builder.set_send_message(|ctx| { - ctx.sendmail.as_ref().and_then(SendMessageSendmail::new) + ctx.sendmail.as_ref().map(SendSendmailMessage::new_boxed) }); } _ => (), diff --git a/src/email/message/command/write.rs b/src/email/message/command/write.rs index 18e4854..241a5e2 100644 --- a/src/email/message/command/write.rs +++ b/src/email/message/command/write.rs @@ -5,9 +5,9 @@ use email::message::add::imap::AddImapMessage; #[cfg(feature = "maildir")] use email::message::add::maildir::AddMaildirMessage; #[cfg(feature = "sendmail")] -use email::message::send::sendmail::SendMessageSendmail; +use email::message::send::sendmail::SendSendmailMessage; #[cfg(feature = "smtp")] -use email::message::send::smtp::SendMessageSmtp; +use email::message::send::smtp::SendSmtpMessage; use email::message::Message; use log::info; @@ -66,13 +66,14 @@ impl MessageWriteCommand { match add_message_kind { #[cfg(feature = "imap")] Some(BackendKind::Imap) => { - builder - .set_add_message(|ctx| ctx.imap.as_ref().and_then(AddImapMessage::new)); + builder.set_add_message(|ctx| { + ctx.imap.as_ref().map(AddImapMessage::new_boxed) + }); } #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { builder.set_add_message(|ctx| { - ctx.maildir.as_ref().and_then(AddMaildirMessage::new) + ctx.maildir.as_ref().map(AddMaildirMessage::new_boxed) }); } #[cfg(feature = "account-sync")] @@ -80,7 +81,7 @@ impl MessageWriteCommand { builder.set_add_message(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(AddMaildirMessage::new) + .map(AddMaildirMessage::new_boxed) }); } _ => (), @@ -90,13 +91,13 @@ impl MessageWriteCommand { #[cfg(feature = "smtp")] Some(BackendKind::Smtp) => { builder.set_send_message(|ctx| { - ctx.smtp.as_ref().and_then(SendMessageSmtp::new) + ctx.smtp.as_ref().map(SendSmtpMessage::new_boxed) }); } #[cfg(feature = "sendmail")] Some(BackendKind::Sendmail) => { builder.set_send_message(|ctx| { - ctx.sendmail.as_ref().and_then(SendMessageSendmail::new) + ctx.sendmail.as_ref().map(SendSendmailMessage::new_boxed) }); } _ => (), diff --git a/src/email/message/template/command/forward.rs b/src/email/message/template/command/forward.rs index 76ab2e0..109b771 100644 --- a/src/email/message/template/command/forward.rs +++ b/src/email/message/template/command/forward.rs @@ -1,9 +1,9 @@ use anyhow::{anyhow, Result}; use clap::Parser; #[cfg(feature = "imap")] -use email::message::get::imap::GetMessagesImap; +use email::message::get::imap::GetImapMessages; #[cfg(feature = "maildir")] -use email::{flag::add::maildir::AddFlagsMaildir, message::peek::maildir::PeekMessagesMaildir}; +use email::{flag::add::maildir::AddMaildirFlags, message::peek::maildir::PeekMaildirMessages}; use log::info; #[cfg(feature = "account-sync")] @@ -68,25 +68,27 @@ impl TemplateForwardCommand { #[cfg(feature = "imap")] Some(BackendKind::Imap) => { builder - .set_get_messages(|ctx| ctx.imap.as_ref().and_then(GetMessagesImap::new)); + .set_get_messages(|ctx| ctx.imap.as_ref().map(GetImapMessages::new_boxed)); } #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { builder.set_peek_messages(|ctx| { - ctx.maildir.as_ref().and_then(PeekMessagesMaildir::new) + ctx.maildir.as_ref().map(PeekMaildirMessages::new_boxed) }); builder - .set_add_flags(|ctx| ctx.maildir.as_ref().and_then(AddFlagsMaildir::new)); + .set_add_flags(|ctx| ctx.maildir.as_ref().map(AddMaildirFlags::new_boxed)); } #[cfg(feature = "account-sync")] Some(BackendKind::MaildirForSync) => { builder.set_peek_messages(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(PeekMessagesMaildir::new) + .map(PeekMaildirMessages::new_boxed) }); builder.set_add_flags(|ctx| { - ctx.maildir_for_sync.as_ref().and_then(AddFlagsMaildir::new) + ctx.maildir_for_sync + .as_ref() + .map(AddMaildirFlags::new_boxed) }); } _ => (), diff --git a/src/email/message/template/command/reply.rs b/src/email/message/template/command/reply.rs index 1add3bc..d905a57 100644 --- a/src/email/message/template/command/reply.rs +++ b/src/email/message/template/command/reply.rs @@ -1,9 +1,9 @@ use anyhow::{anyhow, Result}; use clap::Parser; #[cfg(feature = "imap")] -use email::message::get::imap::GetMessagesImap; +use email::message::get::imap::GetImapMessages; #[cfg(feature = "maildir")] -use email::{flag::add::maildir::AddFlagsMaildir, message::peek::maildir::PeekMessagesMaildir}; +use email::{flag::add::maildir::AddMaildirFlags, message::peek::maildir::PeekMaildirMessages}; use log::info; #[cfg(feature = "account-sync")] @@ -73,25 +73,27 @@ impl TemplateReplyCommand { #[cfg(feature = "imap")] Some(BackendKind::Imap) => { builder - .set_get_messages(|ctx| ctx.imap.as_ref().and_then(GetMessagesImap::new)); + .set_get_messages(|ctx| ctx.imap.as_ref().map(GetImapMessages::new_boxed)); } #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { builder.set_peek_messages(|ctx| { - ctx.maildir.as_ref().and_then(PeekMessagesMaildir::new) + ctx.maildir.as_ref().map(PeekMaildirMessages::new_boxed) }); builder - .set_add_flags(|ctx| ctx.maildir.as_ref().and_then(AddFlagsMaildir::new)); + .set_add_flags(|ctx| ctx.maildir.as_ref().map(AddMaildirFlags::new_boxed)); } #[cfg(feature = "account-sync")] Some(BackendKind::MaildirForSync) => { builder.set_peek_messages(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(PeekMessagesMaildir::new) + .map(PeekMaildirMessages::new_boxed) }); builder.set_add_flags(|ctx| { - ctx.maildir_for_sync.as_ref().and_then(AddFlagsMaildir::new) + ctx.maildir_for_sync + .as_ref() + .map(AddMaildirFlags::new_boxed) }); } _ => (), diff --git a/src/email/message/template/command/save.rs b/src/email/message/template/command/save.rs index 37717b1..dbf92e5 100644 --- a/src/email/message/template/command/save.rs +++ b/src/email/message/template/command/save.rs @@ -63,12 +63,12 @@ impl TemplateSaveCommand { |#[allow(unused)] builder| match add_message_kind { #[cfg(feature = "imap")] Some(BackendKind::Imap) => { - builder.set_add_message(|ctx| ctx.imap.as_ref().and_then(AddImapMessage::new)); + builder.set_add_message(|ctx| ctx.imap.as_ref().map(AddImapMessage::new_boxed)); } #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { builder.set_add_message(|ctx| { - ctx.maildir.as_ref().and_then(AddMaildirMessage::new) + ctx.maildir.as_ref().map(AddMaildirMessage::new_boxed) }); } #[cfg(feature = "account-sync")] @@ -76,7 +76,7 @@ impl TemplateSaveCommand { builder.set_add_message(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(AddMaildirMessage::new) + .map(AddMaildirMessage::new_boxed) }); } _ => (), diff --git a/src/email/message/template/command/send.rs b/src/email/message/template/command/send.rs index 3b798eb..8b6e3e3 100644 --- a/src/email/message/template/command/send.rs +++ b/src/email/message/template/command/send.rs @@ -5,9 +5,9 @@ use email::message::add::imap::AddImapMessage; #[cfg(feature = "maildir")] use email::message::add::maildir::AddMaildirMessage; #[cfg(feature = "sendmail")] -use email::message::send::sendmail::SendMessageSendmail; +use email::message::send::sendmail::SendSendmailMessage; #[cfg(feature = "smtp")] -use email::message::send::smtp::SendMessageSmtp; +use email::message::send::smtp::SendSmtpMessage; use log::info; use mml::MmlCompilerBuilder; use std::io::{self, BufRead, IsTerminal}; @@ -69,13 +69,14 @@ impl TemplateSendCommand { match add_message_kind { #[cfg(feature = "imap")] Some(BackendKind::Imap) => { - builder - .set_add_message(|ctx| ctx.imap.as_ref().and_then(AddImapMessage::new)); + builder.set_add_message(|ctx| { + ctx.imap.as_ref().map(AddImapMessage::new_boxed) + }); } #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { builder.set_add_message(|ctx| { - ctx.maildir.as_ref().and_then(AddMaildirMessage::new) + ctx.maildir.as_ref().map(AddMaildirMessage::new_boxed) }); } #[cfg(feature = "account-sync")] @@ -83,7 +84,7 @@ impl TemplateSendCommand { builder.set_add_message(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(AddMaildirMessage::new) + .map(AddMaildirMessage::new_boxed) }); } _ => (), @@ -92,13 +93,13 @@ impl TemplateSendCommand { #[cfg(feature = "smtp")] Some(BackendKind::Smtp) => { builder.set_send_message(|ctx| { - ctx.smtp.as_ref().and_then(SendMessageSmtp::new) + ctx.smtp.as_ref().map(SendSmtpMessage::new_boxed) }); } #[cfg(feature = "sendmail")] Some(BackendKind::Sendmail) => { builder.set_send_message(|ctx| { - ctx.sendmail.as_ref().and_then(SendMessageSendmail::new) + ctx.sendmail.as_ref().map(SendSendmailMessage::new_boxed) }); } _ => (), diff --git a/src/folder/command/create.rs b/src/folder/command/add.rs similarity index 76% rename from src/folder/command/create.rs rename to src/folder/command/add.rs index 5b84f80..751a1fa 100644 --- a/src/folder/command/create.rs +++ b/src/folder/command/add.rs @@ -1,9 +1,11 @@ use anyhow::Result; use clap::Parser; #[cfg(feature = "imap")] -use email::folder::add::imap::AddFolderImap; +use email::folder::add::imap::AddImapFolder; #[cfg(feature = "maildir")] -use email::folder::add::maildir::AddFolderMaildir; +use email::folder::add::maildir::AddMaildirFolder; +#[cfg(feature = "notmuch")] +use email::folder::add::notmuch::AddNotmuchFolder; use log::info; #[cfg(any(feature = "imap", feature = "maildir", feature = "account-sync"))] @@ -52,19 +54,26 @@ impl AddFolderCommand { |builder| match add_folder_kind { #[cfg(feature = "imap")] Some(BackendKind::Imap) => { - builder.set_add_folder(|ctx| ctx.imap.as_ref().and_then(AddFolderImap::new)); + builder.set_add_folder(|ctx| ctx.imap.as_ref().map(AddImapFolder::new_boxed)); } #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { - builder - .set_add_folder(|ctx| ctx.maildir.as_ref().and_then(AddFolderMaildir::new)); + builder.set_add_folder(|ctx| { + ctx.maildir.as_ref().map(AddMaildirFolder::new_boxed) + }); } #[cfg(feature = "account-sync")] Some(BackendKind::MaildirForSync) => { builder.set_add_folder(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(AddFolderMaildir::new) + .map(AddMaildirFolder::new_boxed) + }); + } + #[cfg(feature = "notmuch")] + Some(BackendKind::Notmuch) => { + builder.set_add_folder(|ctx| { + ctx.notmuch.as_ref().map(AddNotmuchFolder::new_boxed) }); } _ => (), diff --git a/src/folder/command/delete.rs b/src/folder/command/delete.rs index af7c47e..c52e73a 100644 --- a/src/folder/command/delete.rs +++ b/src/folder/command/delete.rs @@ -2,9 +2,11 @@ use anyhow::Result; use clap::Parser; use dialoguer::Confirm; #[cfg(feature = "imap")] -use email::folder::delete::imap::DeleteFolderImap; +use email::folder::delete::imap::DeleteImapFolder; #[cfg(feature = "maildir")] -use email::folder::delete::maildir::DeleteFolderMaildir; +use email::folder::delete::maildir::DeleteMaildirFolder; +// #[cfg(feature = "notmuch")] +// use email::folder::delete::notmuch::DeleteNotmuchFolder; use log::info; use std::process; @@ -65,13 +67,14 @@ impl FolderDeleteCommand { |builder| match delete_folder_kind { #[cfg(feature = "imap")] Some(BackendKind::Imap) => { - builder - .set_delete_folder(|ctx| ctx.imap.as_ref().and_then(DeleteFolderImap::new)); + builder.set_delete_folder(|ctx| { + ctx.imap.as_ref().map(DeleteImapFolder::new_boxed) + }); } #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { builder.set_delete_folder(|ctx| { - ctx.maildir.as_ref().and_then(DeleteFolderMaildir::new) + ctx.maildir.as_ref().map(DeleteMaildirFolder::new_boxed) }); } #[cfg(feature = "account-sync")] @@ -79,9 +82,16 @@ impl FolderDeleteCommand { builder.set_delete_folder(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(DeleteFolderMaildir::new) + .map(DeleteMaildirFolder::new_boxed) }); } + #[cfg(feature = "notmuch")] + Some(BackendKind::Notmuch) => { + // TODO + // builder.set_delete_folder(|ctx| { + // ctx.notmuch.as_ref().map(DeleteNotmuchFolder::new_boxed) + // }); + } _ => (), }, ) diff --git a/src/folder/command/expunge.rs b/src/folder/command/expunge.rs index d0eae0c..cc0087e 100644 --- a/src/folder/command/expunge.rs +++ b/src/folder/command/expunge.rs @@ -1,9 +1,11 @@ use anyhow::Result; use clap::Parser; #[cfg(feature = "imap")] -use email::folder::expunge::imap::ExpungeFolderImap; +use email::folder::expunge::imap::ExpungeImapFolder; #[cfg(feature = "maildir")] -use email::folder::expunge::maildir::ExpungeFolderMaildir; +use email::folder::expunge::maildir::ExpungeMaildirFolder; +// #[cfg(feature = "notmuch")] +// use email::folder::expunge::notmuch::ExpungeNotmuchFolder; use log::info; #[cfg(any(feature = "imap", feature = "maildir", feature = "account-sync"))] @@ -54,13 +56,13 @@ impl FolderExpungeCommand { #[cfg(feature = "imap")] Some(BackendKind::Imap) => { builder.set_expunge_folder(|ctx| { - ctx.imap.as_ref().and_then(ExpungeFolderImap::new) + ctx.imap.as_ref().map(ExpungeImapFolder::new_boxed) }); } #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { builder.set_expunge_folder(|ctx| { - ctx.maildir.as_ref().and_then(ExpungeFolderMaildir::new) + ctx.maildir.as_ref().map(ExpungeMaildirFolder::new_boxed) }); } #[cfg(feature = "account-sync")] @@ -68,9 +70,16 @@ impl FolderExpungeCommand { builder.set_expunge_folder(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(ExpungeFolderMaildir::new) + .map(ExpungeMaildirFolder::new_boxed) }); } + #[cfg(feature = "notmuch")] + Some(BackendKind::Notmuch) => { + // TODO + // builder.set_expunge_folder(|ctx| { + // ctx.notmuch.as_ref().map(ExpungeNotmuchFolder::new_boxed) + // }); + } _ => (), }, ) diff --git a/src/folder/command/list.rs b/src/folder/command/list.rs index b535d45..b120168 100644 --- a/src/folder/command/list.rs +++ b/src/folder/command/list.rs @@ -1,9 +1,11 @@ use anyhow::Result; use clap::Parser; #[cfg(feature = "imap")] -use email::folder::list::imap::ListFoldersImap; +use email::folder::list::imap::ListImapFolders; #[cfg(feature = "maildir")] -use email::folder::list::maildir::ListFoldersMaildir; +use email::folder::list::maildir::ListMaildirFolders; +#[cfg(feature = "notmuch")] +use email::folder::list::notmuch::ListNotmuchFolders; use log::info; #[cfg(any(feature = "imap", feature = "maildir", feature = "account-sync"))] @@ -55,12 +57,12 @@ impl FolderListCommand { #[cfg(feature = "imap")] Some(BackendKind::Imap) => { builder - .set_list_folders(|ctx| ctx.imap.as_ref().and_then(ListFoldersImap::new)); + .set_list_folders(|ctx| ctx.imap.as_ref().map(ListImapFolders::new_boxed)); } #[cfg(feature = "maildir")] Some(BackendKind::Maildir) => { builder.set_list_folders(|ctx| { - ctx.maildir.as_ref().and_then(ListFoldersMaildir::new) + ctx.maildir.as_ref().map(ListMaildirFolders::new_boxed) }); } #[cfg(feature = "account-sync")] @@ -68,9 +70,16 @@ impl FolderListCommand { builder.set_list_folders(|ctx| { ctx.maildir_for_sync .as_ref() - .and_then(ListFoldersMaildir::new) + .map(ListMaildirFolders::new_boxed) }); } + #[cfg(feature = "notmuch")] + Some(BackendKind::Notmuch) => { + builder.set_list_folders(|ctx| { + ctx.notmuch.as_ref().map(ListNotmuchFolders::new_boxed) + }); + } + _ => (), }, ) diff --git a/src/folder/command/mod.rs b/src/folder/command/mod.rs index a8df793..91ae20b 100644 --- a/src/folder/command/mod.rs +++ b/src/folder/command/mod.rs @@ -1,5 +1,5 @@ #[cfg(feature = "folder-add")] -mod create; +mod add; #[cfg(feature = "folder-delete")] mod delete; #[cfg(feature = "folder-expunge")] @@ -15,7 +15,7 @@ use clap::Subcommand; use crate::{config::TomlConfig, printer::Printer}; #[cfg(feature = "folder-add")] -use self::create::AddFolderCommand; +use self::add::AddFolderCommand; #[cfg(feature = "folder-delete")] use self::delete::FolderDeleteCommand; #[cfg(feature = "folder-expunge")] diff --git a/src/folder/command/purge.rs b/src/folder/command/purge.rs index 8395059..97a8156 100644 --- a/src/folder/command/purge.rs +++ b/src/folder/command/purge.rs @@ -2,7 +2,11 @@ use anyhow::Result; use clap::Parser; use dialoguer::Confirm; #[cfg(feature = "imap")] -use email::folder::purge::imap::PurgeFolderImap; +use email::folder::purge::imap::PurgeImapFolder; +// #[cfg(feature = "maildir")] +// use email::folder::purge::maildir::PurgeMaildirFolder; +// #[cfg(feature = "notmuch")] +// use email::folder::purge::notmuch::PurgeNotmuchFolder; use log::info; use std::process; @@ -64,23 +68,31 @@ impl FolderPurgeCommand { #[cfg(feature = "imap")] Some(BackendKind::Imap) => { builder - .set_purge_folder(|ctx| ctx.imap.as_ref().and_then(PurgeFolderImap::new)); + .set_purge_folder(|ctx| ctx.imap.as_ref().map(PurgeImapFolder::new_boxed)); + } + #[cfg(feature = "maildir")] + Some(BackendKind::Maildir) => { + // TODO + // builder.set_purge_folder(|ctx| { + // ctx.maildir.as_ref().map(PurgeMaildirFolder::new_boxed) + // }); + } + #[cfg(feature = "account-sync")] + Some(BackendKind::MaildirForSync) => { + // TODO + // builder.set_purge_folder(|ctx| { + // ctx.maildir_for_sync + // .as_ref() + // .map(PurgeMaildirFolder::new_boxed) + // }); + } + #[cfg(feature = "notmuch")] + Some(BackendKind::Notmuch) => { + // TODO + // builder.set_purge_folder(|ctx| { + // ctx.notmuch.as_ref().map(PurgeNotmuchFolder::new_boxed) + // }); } - // TODO - // #[cfg(feature = "maildir")] - // Some(BackendKind::Maildir) => { - // builder.set_purge_folder(|ctx| { - // ctx.maildir.as_ref().and_then(PurgeFolderMaildir::new) - // }); - // } - // #[cfg(feature = "account-sync")] - // Some(BackendKind::MaildirForSync) => { - // builder.set_purge_folder(|ctx| { - // ctx.maildir_for_sync - // .as_ref() - // .and_then(PurgeFolderMaildir::new) - // }); - // } _ => (), }, ) diff --git a/src/notmuch/wizard.rs b/src/notmuch/wizard.rs index 8eb87e9..4f7d2aa 100644 --- a/src/notmuch/wizard.rs +++ b/src/notmuch/wizard.rs @@ -1,20 +1,24 @@ use anyhow::Result; use dialoguer::Input; -use email::backend::{BackendConfig, NotmuchBackend, NotmuchConfig}; +use email::notmuch::config::NotmuchConfig; -use crate::config::wizard::THEME; +use crate::{backend::config::BackendConfig, ui::THEME}; pub(crate) fn configure() -> Result { let mut config = NotmuchConfig::default(); - config.db_path = if let Ok(db_path) = NotmuchBackend::get_default_db_path() { - db_path - } else { - let db_path: String = Input::with_theme(&*THEME) + let default_database_path = NotmuchConfig::get_default_database_path() + .unwrap_or_default() + .to_string_lossy() + .to_string(); + + config.database_path = Some( + Input::with_theme(&*THEME) .with_prompt("Notmuch database path") - .interact_text()?; - db_path.into() - }; + .default(default_database_path) + .interact_text()? + .into(), + ); Ok(BackendConfig::Notmuch(config)) }