add back notmuch features (part 1)

This commit is contained in:
Clément DOUIN 2024-01-21 15:59:03 +01:00
parent a700f358fb
commit 3137e1e851
No known key found for this signature in database
GPG key ID: 353E4A18EE0FAB72
30 changed files with 456 additions and 309 deletions

2
Cargo.lock generated
View file

@ -1217,7 +1217,7 @@ dependencies = [
[[package]] [[package]]
name = "email-lib" name = "email-lib"
version = "0.20.1" version = "0.20.1"
source = "git+https://git.sr.ht/~soywod/pimalaya#aadfde30406f97b480ee673ec04f4d79b9e8d8b3" source = "git+https://git.sr.ht/~soywod/pimalaya#0454027ca9bfba17931e7414e4463dacf8c028f8"
dependencies = [ dependencies = [
"advisory-lock", "advisory-lock",
"anyhow", "anyhow",

View file

@ -11,6 +11,8 @@ use email::account::sync::config::SyncConfig;
use email::imap::config::ImapConfig; use email::imap::config::ImapConfig;
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
use email::maildir::config::MaildirConfig; use email::maildir::config::MaildirConfig;
#[cfg(feature = "notmuch")]
use email::notmuch::config::NotmuchConfig;
#[cfg(feature = "sendmail")] #[cfg(feature = "sendmail")]
use email::sendmail::config::SendmailConfig; use email::sendmail::config::SendmailConfig;
#[cfg(feature = "smtp")] #[cfg(feature = "smtp")]

View file

@ -8,79 +8,113 @@ use std::ops::Deref;
use email::account::config::AccountConfig; use email::account::config::AccountConfig;
#[cfg(all(feature = "envelope-get", feature = "imap"))] #[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"))] #[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"))] #[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"))] #[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"))] #[cfg(all(feature = "envelope-watch", feature = "imap"))]
use email::envelope::watch::imap::WatchImapEnvelopes; use email::envelope::watch::imap::WatchImapEnvelopes;
#[cfg(all(feature = "envelope-watch", feature = "maildir"))] #[cfg(all(feature = "envelope-watch", feature = "maildir"))]
use email::envelope::watch::maildir::WatchMaildirEnvelopes; use email::envelope::watch::maildir::WatchMaildirEnvelopes;
// #[cfg(all(feature = "envelope-watch", feature = "notmuch"))]
// use email::envelope::watch::notmuch::WatchNotmuchEnvelopes;
#[cfg(feature = "message-add")] #[cfg(feature = "message-add")]
use email::envelope::SingleId; use email::envelope::SingleId;
#[cfg(all(feature = "flag-add", feature = "imap"))] #[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"))] #[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"))] #[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"))] #[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"))] #[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"))] #[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"))] #[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"))] #[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"))] #[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"))] #[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"))] #[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"))] #[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"))] #[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"))] #[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"))] #[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")] #[cfg(feature = "imap")]
use email::imap::{ImapSessionBuilder, ImapSessionSync}; use email::imap::{ImapContextBuilder, ImapContextSync};
#[cfg(feature = "account-sync")] #[cfg(feature = "account-sync")]
use email::maildir::config::MaildirConfig; use email::maildir::config::MaildirConfig;
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
use email::maildir::{MaildirSessionBuilder, MaildirSessionSync}; use email::maildir::{MaildirContextBuilder, MaildirContextSync};
#[cfg(all(feature = "message-add", feature = "imap"))] #[cfg(all(feature = "message-add", feature = "imap"))]
use email::message::add::imap::AddImapMessage; use email::message::add::imap::AddImapMessage;
#[cfg(all(feature = "message-add", feature = "maildir"))] #[cfg(all(feature = "message-add", feature = "maildir"))]
use email::message::add::maildir::AddMaildirMessage; 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"))] #[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"))] #[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"))] #[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"))] #[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"))] #[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"))] #[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"))] #[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"))] #[cfg(any(feature = "message-peek", feature = "message-get"))]
use email::message::Messages; use email::message::Messages;
#[cfg(feature = "notmuch")]
use email::notmuch::{NotmuchContextBuilder, NotmuchContextSync};
#[cfg(feature = "sendmail")] #[cfg(feature = "sendmail")]
use email::sendmail::SendmailContext; use email::sendmail::SendmailContext;
#[cfg(feature = "smtp")] #[cfg(feature = "smtp")]
use email::smtp::{SmtpClientBuilder, SmtpClientSync}; use email::smtp::{SmtpContextBuilder, SmtpContextSync};
#[allow(unused)] #[allow(unused)]
use email::{ use email::{
@ -137,13 +171,15 @@ impl ToString for BackendKind {
#[derive(Clone, Default)] #[derive(Clone, Default)]
pub struct BackendContextBuilder { pub struct BackendContextBuilder {
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
pub imap: Option<ImapSessionBuilder>, pub imap: Option<ImapContextBuilder>,
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
pub maildir: Option<MaildirSessionBuilder>, pub maildir: Option<MaildirContextBuilder>,
#[cfg(feature = "account-sync")] #[cfg(feature = "account-sync")]
pub maildir_for_sync: Option<MaildirSessionBuilder>, pub maildir_for_sync: Option<MaildirContextBuilder>,
#[cfg(feature = "notmuch")]
pub notmuch: Option<NotmuchContextBuilder>,
#[cfg(feature = "smtp")] #[cfg(feature = "smtp")]
pub smtp: Option<SmtpClientBuilder>, pub smtp: Option<SmtpContextBuilder>,
#[cfg(feature = "sendmail")] #[cfg(feature = "sendmail")]
pub sendmail: Option<SendmailContext>, pub sendmail: Option<SendmailContext>,
} }
@ -163,7 +199,7 @@ impl BackendContextBuilder {
.as_ref() .as_ref()
.filter(|_| kinds.contains(&&BackendKind::Imap)) .filter(|_| kinds.contains(&&BackendKind::Imap))
.map(|imap_config| { .map(|imap_config| {
ImapSessionBuilder::new(account_config.clone(), imap_config.clone()) ImapContextBuilder::new(account_config.clone(), imap_config.clone())
.with_prebuilt_credentials() .with_prebuilt_credentials()
}); });
match ctx_builder { match ctx_builder {
@ -177,21 +213,21 @@ impl BackendContextBuilder {
.as_ref() .as_ref()
.filter(|_| kinds.contains(&&BackendKind::Maildir)) .filter(|_| kinds.contains(&&BackendKind::Maildir))
.map(|mdir_config| { .map(|mdir_config| {
MaildirSessionBuilder::new(account_config.clone(), mdir_config.clone()) MaildirContextBuilder::new(account_config.clone(), mdir_config.clone())
}), }),
#[cfg(feature = "account-sync")] #[cfg(feature = "account-sync")]
maildir_for_sync: Some(MaildirConfig { maildir_for_sync: Some(MaildirConfig {
root_dir: account_config.get_sync_dir()?, root_dir: account_config.get_sync_dir()?,
}) })
.filter(|_| kinds.contains(&&BackendKind::MaildirForSync)) .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")] #[cfg(feature = "notmuch")]
notmuch: toml_account_config notmuch: toml_account_config
.notmuch .notmuch
.as_ref() .as_ref()
.filter(|_| kinds.contains(&&BackendKind::Notmuch)) .filter(|_| kinds.contains(&&BackendKind::Notmuch))
.map(|notmuch_config| { .map(|notmuch_config| {
NotmuchSessionBuilder::new(account_config.clone(), notmuch_config.clone()) NotmuchContextBuilder::new(account_config.clone(), notmuch_config.clone())
}), }),
#[cfg(feature = "smtp")] #[cfg(feature = "smtp")]
smtp: toml_account_config smtp: toml_account_config
@ -199,7 +235,7 @@ impl BackendContextBuilder {
.as_ref() .as_ref()
.filter(|_| kinds.contains(&&BackendKind::Smtp)) .filter(|_| kinds.contains(&&BackendKind::Smtp))
.map(|smtp_config| { .map(|smtp_config| {
SmtpClientBuilder::new(account_config.clone(), smtp_config.clone()) SmtpContextBuilder::new(account_config.clone(), smtp_config.clone())
}), }),
#[cfg(feature = "sendmail")] #[cfg(feature = "sendmail")]
sendmail: toml_account_config sendmail: toml_account_config
@ -258,13 +294,15 @@ impl email::backend::BackendContextBuilder for BackendContextBuilder {
#[derive(Default)] #[derive(Default)]
pub struct BackendContext { pub struct BackendContext {
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
pub imap: Option<ImapSessionSync>, pub imap: Option<ImapContextSync>,
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
pub maildir: Option<MaildirSessionSync>, pub maildir: Option<MaildirContextSync>,
#[cfg(feature = "account-sync")] #[cfg(feature = "account-sync")]
pub maildir_for_sync: Option<MaildirSessionSync>, pub maildir_for_sync: Option<MaildirContextSync>,
#[cfg(feature = "notmuch")]
pub notmuch: Option<NotmuchContextSync>,
#[cfg(feature = "smtp")] #[cfg(feature = "smtp")]
pub smtp: Option<SmtpClientSync>, pub smtp: Option<SmtpContextSync>,
#[cfg(feature = "sendmail")] #[cfg(feature = "sendmail")]
pub sendmail: Option<SendmailContext>, pub sendmail: Option<SendmailContext>,
} }
@ -297,7 +335,7 @@ impl BackendBuilder {
.as_ref() .as_ref()
.filter(|_| is_imap_used) .filter(|_| is_imap_used)
.map(|imap_config| { .map(|imap_config| {
ImapSessionBuilder::new(account_config.clone(), imap_config.clone()) ImapContextBuilder::new(account_config.clone(), imap_config.clone())
.with_prebuilt_credentials() .with_prebuilt_credentials()
}); });
@ -312,14 +350,14 @@ impl BackendBuilder {
.as_ref() .as_ref()
.filter(|_| is_maildir_used) .filter(|_| is_maildir_used)
.map(|mdir_config| { .map(|mdir_config| {
MaildirSessionBuilder::new(account_config.clone(), mdir_config.clone()) MaildirContextBuilder::new(account_config.clone(), mdir_config.clone())
}), }),
#[cfg(feature = "account-sync")] #[cfg(feature = "account-sync")]
maildir_for_sync: Some(MaildirConfig { maildir_for_sync: Some(MaildirConfig {
root_dir: account_config.get_sync_dir()?, root_dir: account_config.get_sync_dir()?,
}) })
.filter(|_| is_maildir_for_sync_used) .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() ..Default::default()
}; };
@ -332,25 +370,25 @@ impl BackendBuilder {
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
backend_builder = backend_builder 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")] #[cfg(feature = "account-sync")]
Some(BackendKind::MaildirForSync) => { Some(BackendKind::MaildirForSync) => {
backend_builder = backend_builder.with_add_folder(|ctx| { backend_builder = backend_builder.with_add_folder(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .as_ref()
.and_then(AddFolderMaildir::new) .map(AddMaildirFolder::new_boxed)
}); });
} }
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
backend_builder = backend_builder 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")] #[cfg(feature = "notmuch")]
Some(BackendKind::Notmuch) => { Some(BackendKind::Notmuch) => {
backend_builder = backend_builder 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")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
backend_builder = backend_builder.with_list_folders(|ctx| { 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")] #[cfg(feature = "account-sync")]
@ -368,18 +406,18 @@ impl BackendBuilder {
backend_builder = backend_builder.with_list_folders(|ctx| { backend_builder = backend_builder.with_list_folders(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .as_ref()
.and_then(ListFoldersMaildir::new) .map(ListMaildirFolders::new_boxed)
}); });
} }
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
backend_builder = backend_builder 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")] #[cfg(feature = "notmuch")]
Some(BackendKind::Notmuch) => { Some(BackendKind::Notmuch) => {
backend_builder = backend_builder.with_list_folders(|ctx| { 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")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
backend_builder = backend_builder.with_expunge_folder(|ctx| { 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")] #[cfg(feature = "account-sync")]
@ -398,19 +436,20 @@ impl BackendBuilder {
backend_builder = backend_builder.with_expunge_folder(|ctx| { backend_builder = backend_builder.with_expunge_folder(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .as_ref()
.and_then(ExpungeFolderMaildir::new) .map(ExpungeMaildirFolder::new_boxed)
}); });
} }
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
backend_builder = backend_builder 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")] #[cfg(feature = "notmuch")]
Some(BackendKind::Notmuch) => { Some(BackendKind::Notmuch) => {
backend_builder = backend_builder.with_expunge_folder(|ctx| { // TODO
ctx.notmuch.as_ref().and_then(ExpungeFolderNotmuch::new) // 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")] // #[cfg(feature = "maildir")]
// Some(BackendKind::Maildir) => { // Some(BackendKind::Maildir) => {
// backend_builder = backend_builder // 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 // TODO
// #[cfg(feature = "account-sync")] // #[cfg(feature = "account-sync")]
// Some(BackendKind::MaildirForSync) => { // Some(BackendKind::MaildirForSync) => {
// backend_builder = backend_builder // 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")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
backend_builder = backend_builder 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")] #[cfg(feature = "notmuch")]
Some(BackendKind::Notmuch) => { Some(BackendKind::Notmuch) => {
backend_builder = backend_builder.with_purge_folder(|ctx| { // TODO
ctx.notmuch.as_ref().and_then(PurgeFolderNotmuch::new) // 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")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
backend_builder = backend_builder.with_delete_folder(|ctx| { 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")] #[cfg(feature = "account-sync")]
@ -456,19 +496,20 @@ impl BackendBuilder {
backend_builder = backend_builder.with_delete_folder(|ctx| { backend_builder = backend_builder.with_delete_folder(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .as_ref()
.and_then(DeleteFolderMaildir::new) .map(DeleteMaildirFolder::new_boxed)
}); });
} }
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
backend_builder = backend_builder 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")] #[cfg(feature = "notmuch")]
Some(BackendKind::Notmuch) => { Some(BackendKind::Notmuch) => {
backend_builder = backend_builder.with_delete_folder(|ctx| { // TODO
ctx.notmuch.as_ref().and_then(DeleteFolderNotmuch::new) // 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")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
backend_builder = backend_builder.with_list_envelopes(|ctx| { 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")] #[cfg(feature = "account-sync")]
@ -486,18 +527,18 @@ impl BackendBuilder {
backend_builder = backend_builder.with_list_envelopes(|ctx| { backend_builder = backend_builder.with_list_envelopes(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .as_ref()
.and_then(ListEnvelopesMaildir::new) .map(ListMaildirEnvelopes::new_boxed)
}); });
} }
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
backend_builder = backend_builder 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")] #[cfg(feature = "notmuch")]
Some(BackendKind::Notmuch) => { Some(BackendKind::Notmuch) => {
backend_builder = backend_builder.with_list_envelopes(|ctx| { 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")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
backend_builder = backend_builder.with_watch_envelopes(|ctx| { 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")] #[cfg(feature = "account-sync")]
@ -516,20 +557,21 @@ impl BackendBuilder {
backend_builder = backend_builder.with_watch_envelopes(|ctx| { backend_builder = backend_builder.with_watch_envelopes(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .as_ref()
.and_then(WatchMaildirEnvelopes::new) .map(WatchMaildirEnvelopes::new_boxed)
}); });
} }
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
backend_builder = backend_builder.with_watch_envelopes(|ctx| { 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")] #[cfg(feature = "notmuch")]
Some(BackendKind::Notmuch) => { Some(BackendKind::Notmuch) => {
backend_builder = backend_builder.with_watch_envelopes(|ctx| { // TODO
ctx.notmuch.as_ref().and_then(WatchNotmuchEnvelopes::new) // 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")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
backend_builder = backend_builder.with_get_envelope(|ctx| { 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")] #[cfg(feature = "account-sync")]
@ -547,18 +589,18 @@ impl BackendBuilder {
backend_builder = backend_builder.with_get_envelope(|ctx| { backend_builder = backend_builder.with_get_envelope(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .as_ref()
.and_then(GetEnvelopeMaildir::new) .map(GetMaildirEnvelope::new_boxed)
}); });
} }
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
backend_builder = backend_builder 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")] #[cfg(feature = "notmuch")]
Some(BackendKind::Notmuch) => { Some(BackendKind::Notmuch) => {
backend_builder = backend_builder.with_get_envelope(|ctx| { 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")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
backend_builder = backend_builder 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")] #[cfg(feature = "account-sync")]
Some(BackendKind::MaildirForSync) => { Some(BackendKind::MaildirForSync) => {
backend_builder = backend_builder.with_add_flags(|ctx| { 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")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
backend_builder = backend_builder 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")] #[cfg(feature = "notmuch")]
Some(BackendKind::Notmuch) => { Some(BackendKind::Notmuch) => {
backend_builder = backend_builder 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")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
backend_builder = backend_builder 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")] #[cfg(feature = "account-sync")]
Some(BackendKind::MaildirForSync) => { Some(BackendKind::MaildirForSync) => {
backend_builder = backend_builder.with_set_flags(|ctx| { 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")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
backend_builder = backend_builder 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")] #[cfg(feature = "notmuch")]
Some(BackendKind::Notmuch) => { Some(BackendKind::Notmuch) => {
backend_builder = backend_builder 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")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
backend_builder = backend_builder.with_remove_flags(|ctx| { 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")] #[cfg(feature = "account-sync")]
@ -629,18 +675,18 @@ impl BackendBuilder {
backend_builder = backend_builder.with_remove_flags(|ctx| { backend_builder = backend_builder.with_remove_flags(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .as_ref()
.and_then(RemoveFlagsMaildir::new) .map(RemoveMaildirFlags::new_boxed)
}); });
} }
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
backend_builder = backend_builder 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")] #[cfg(feature = "notmuch")]
Some(BackendKind::Notmuch) => { Some(BackendKind::Notmuch) => {
backend_builder = backend_builder.with_remove_flags(|ctx| { 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")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
backend_builder = backend_builder backend_builder = backend_builder
.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().and_then(AddImapMessage::new)); .with_add_message(|ctx| ctx.imap.as_ref().map(AddImapMessage::new_boxed));
} }
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
backend_builder = backend_builder 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")] #[cfg(feature = "account-sync")]
Some(BackendKind::MaildirForSync) => { Some(BackendKind::MaildirForSync) => {
backend_builder = backend_builder.with_add_message(|ctx| { backend_builder = backend_builder.with_add_message(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .as_ref()
.and_then(AddMaildirMessage::new) .map(AddMaildirMessage::new_boxed)
}); });
} }
#[cfg(feature = "notmuch")] #[cfg(feature = "notmuch")]
Some(BackendKind::Notmuch) => { Some(BackendKind::Notmuch) => {
backend_builder = backend_builder.with_add_raw_message(|ctx| { backend_builder = backend_builder
ctx.notmuch.as_ref().and_then(AddRawMessageNotmuch::new) .with_add_message(|ctx| ctx.notmuch.as_ref().map(AddNotmuchMessage::new_boxed));
});
} }
_ => (), _ => (),
} }
@ -681,7 +726,7 @@ impl BackendBuilder {
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
backend_builder = backend_builder.with_peek_messages(|ctx| { 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")] #[cfg(feature = "account-sync")]
@ -689,18 +734,18 @@ impl BackendBuilder {
backend_builder = backend_builder.with_peek_messages(|ctx| { backend_builder = backend_builder.with_peek_messages(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .as_ref()
.and_then(PeekMessagesMaildir::new) .map(PeekMaildirMessages::new_boxed)
}); });
} }
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
backend_builder = backend_builder 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")] #[cfg(feature = "notmuch")]
Some(BackendKind::Notmuch) => { Some(BackendKind::Notmuch) => {
backend_builder = backend_builder.with_peek_messages(|ctx| { 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")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
backend_builder = backend_builder backend_builder = backend_builder
.with_get_messages(|ctx| ctx.imap.as_ref().and_then(GetMessagesImap::new)); .with_get_messages(|ctx| ctx.imap.as_ref().map(GetImapMessages::new_boxed));
}
#[cfg(feature = "notmuch")]
Some(BackendKind::Notmuch) => {
backend_builder = backend_builder.with_get_messages(|ctx| {
ctx.notmuch.as_ref().and_then(GetMessagesNotmuch::new)
});
} }
_ => (), _ => (),
} }
@ -727,7 +766,7 @@ impl BackendBuilder {
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
backend_builder = backend_builder.with_copy_messages(|ctx| { 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")] #[cfg(feature = "account-sync")]
@ -735,18 +774,18 @@ impl BackendBuilder {
backend_builder = backend_builder.with_copy_messages(|ctx| { backend_builder = backend_builder.with_copy_messages(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .as_ref()
.and_then(CopyMessagesMaildir::new) .map(CopyMaildirMessages::new_boxed)
}); });
} }
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
backend_builder = backend_builder 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")] #[cfg(feature = "notmuch")]
Some(BackendKind::Notmuch) => { Some(BackendKind::Notmuch) => {
backend_builder = backend_builder.with_copy_messages(|ctx| { 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")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
backend_builder = backend_builder.with_move_messages(|ctx| { 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")] #[cfg(feature = "account-sync")]
@ -765,18 +804,18 @@ impl BackendBuilder {
backend_builder = backend_builder.with_move_messages(|ctx| { backend_builder = backend_builder.with_move_messages(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .as_ref()
.and_then(MoveMessagesMaildir::new) .map(MoveMaildirMessages::new_boxed)
}); });
} }
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
backend_builder = backend_builder 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")] #[cfg(feature = "notmuch")]
Some(BackendKind::Notmuch) => { Some(BackendKind::Notmuch) => {
backend_builder = backend_builder.with_move_messages(|ctx| { 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( id_mapper = IdMapper::new(
&self.backend.account_config, &self.backend.account_config,
folder, folder,
mdir_config.root_dir.clone(), notmuch_config.get_maildir_path()?,
)?; )?;
} }
} }

View file

@ -1,11 +1,11 @@
use anyhow::Result; use anyhow::Result;
use clap::Parser; use clap::Parser;
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
use email::envelope::list::imap::ListEnvelopesImap; use email::envelope::list::imap::ListImapEnvelopes;
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
use email::envelope::list::maildir::ListEnvelopesMaildir; use email::envelope::list::maildir::ListMaildirEnvelopes;
#[cfg(feature = "notmuch")] #[cfg(feature = "notmuch")]
use email::envelope::list::notmuch::ListEnvelopesNotmuch; use email::envelope::list::notmuch::ListNotmuchEnvelopes;
use log::info; use log::info;
#[cfg(feature = "account-sync")] #[cfg(feature = "account-sync")]
@ -92,13 +92,13 @@ impl ListEnvelopesCommand {
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
builder.set_list_envelopes(|ctx| { builder.set_list_envelopes(|ctx| {
ctx.imap.as_ref().and_then(ListEnvelopesImap::new) ctx.imap.as_ref().map(ListImapEnvelopes::new_boxed)
}); });
} }
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
builder.set_list_envelopes(|ctx| { 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")] #[cfg(feature = "account-sync")]
@ -106,7 +106,13 @@ impl ListEnvelopesCommand {
builder.set_list_envelopes(|ctx| { builder.set_list_envelopes(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .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)
}); });
} }
_ => (), _ => (),

View file

@ -4,8 +4,8 @@ use clap::Parser;
use email::envelope::watch::imap::WatchImapEnvelopes; use email::envelope::watch::imap::WatchImapEnvelopes;
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
use email::envelope::watch::maildir::WatchMaildirEnvelopes; use email::envelope::watch::maildir::WatchMaildirEnvelopes;
#[cfg(feature = "notmuch")] // #[cfg(feature = "notmuch")]
use email::envelope::watch::notmuch::WatchNotmuchEnvelopes; // use email::envelope::watch::notmuch::WatchNotmuchEnvelopes;
use log::info; use log::info;
#[cfg(feature = "account-sync")] #[cfg(feature = "account-sync")]
@ -56,13 +56,13 @@ impl WatchEnvelopesCommand {
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
builder.set_watch_envelopes(|ctx| { builder.set_watch_envelopes(|ctx| {
ctx.imap.as_ref().and_then(WatchImapEnvelopes::new) ctx.imap.as_ref().map(WatchImapEnvelopes::new_boxed)
}); });
} }
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
builder.set_watch_envelopes(|ctx| { 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")] #[cfg(feature = "account-sync")]
@ -70,9 +70,16 @@ impl WatchEnvelopesCommand {
builder.set_watch_envelopes(|ctx| { builder.set_watch_envelopes(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .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)
// });
}
_ => (), _ => (),
}, },
) )

View file

@ -1,11 +1,11 @@
use anyhow::Result; use anyhow::Result;
use clap::Parser; use clap::Parser;
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
use email::flag::add::imap::AddFlagsImap; use email::flag::add::imap::AddImapFlags;
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
use email::flag::add::maildir::AddFlagsMaildir; use email::flag::add::maildir::AddMaildirFlags;
#[cfg(feature = "notmuch")] #[cfg(feature = "notmuch")]
use email::flag::add::notmuch::AddFlagsNotmuch; use email::flag::add::notmuch::AddNotmuchFlags;
use log::info; use log::info;
#[cfg(feature = "account-sync")] #[cfg(feature = "account-sync")]
@ -60,19 +60,26 @@ impl FlagAddCommand {
|builder| match add_flags_kind { |builder| match add_flags_kind {
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::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")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
builder 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")] #[cfg(feature = "account-sync")]
Some(BackendKind::MaildirForSync) => { Some(BackendKind::MaildirForSync) => {
builder.set_add_flags(|ctx| { 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));
}
_ => (), _ => (),
}, },
) )

View file

@ -1,11 +1,11 @@
use anyhow::Result; use anyhow::Result;
use clap::Parser; use clap::Parser;
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
use email::flag::remove::imap::RemoveFlagsImap; use email::flag::remove::imap::RemoveImapFlags;
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
use email::flag::remove::maildir::RemoveFlagsMaildir; use email::flag::remove::maildir::RemoveMaildirFlags;
#[cfg(feature = "notmuch")] #[cfg(feature = "notmuch")]
use email::flag::remove::notmuch::RemoveFlagsNotmuch; use email::flag::remove::notmuch::RemoveNotmuchFlags;
use log::info; use log::info;
#[cfg(feature = "account-sync")] #[cfg(feature = "account-sync")]
@ -61,12 +61,12 @@ impl FlagRemoveCommand {
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
builder 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")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
builder.set_remove_flags(|ctx| { 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")] #[cfg(feature = "account-sync")]
@ -74,7 +74,13 @@ impl FlagRemoveCommand {
builder.set_remove_flags(|ctx| { builder.set_remove_flags(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .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)
}); });
} }
_ => (), _ => (),

View file

@ -1,11 +1,11 @@
use anyhow::Result; use anyhow::Result;
use clap::Parser; use clap::Parser;
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
use email::flag::set::imap::SetFlagsImap; use email::flag::set::imap::SetImapFlags;
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
use email::flag::set::maildir::SetFlagsMaildir; use email::flag::set::maildir::SetMaildirFlags;
#[cfg(feature = "notmuch")] #[cfg(feature = "notmuch")]
use email::flag::set::notmuch::SetFlagsNotmuch; use email::flag::set::notmuch::SetNotmuchFlags;
use log::info; use log::info;
#[cfg(feature = "account-sync")] #[cfg(feature = "account-sync")]
@ -60,19 +60,26 @@ impl FlagSetCommand {
|builder| match set_flags_kind { |builder| match set_flags_kind {
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::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")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
builder 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")] #[cfg(feature = "account-sync")]
Some(BackendKind::MaildirForSync) => { Some(BackendKind::MaildirForSync) => {
builder.set_set_flags(|ctx| { 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));
}
_ => (), _ => (),
}, },
) )

View file

@ -1,9 +1,9 @@
use anyhow::{Context, Result}; use anyhow::{Context, Result};
use clap::Parser; use clap::Parser;
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
use email::message::get::imap::GetMessagesImap; use email::message::get::imap::GetImapMessages;
#[cfg(feature = "maildir")] #[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 log::info;
use std::{fs, path::PathBuf}; use std::{fs, path::PathBuf};
use uuid::Uuid; use uuid::Uuid;
@ -62,25 +62,27 @@ impl AttachmentDownloadCommand {
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
builder 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")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
builder.set_peek_messages(|ctx| { builder.set_peek_messages(|ctx| {
ctx.maildir.as_ref().and_then(PeekMessagesMaildir::new) ctx.maildir.as_ref().map(PeekMaildirMessages::new_boxed)
}); });
builder 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")] #[cfg(feature = "account-sync")]
Some(BackendKind::MaildirForSync) => { Some(BackendKind::MaildirForSync) => {
builder.set_peek_messages(|ctx| { builder.set_peek_messages(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .as_ref()
.and_then(PeekMessagesMaildir::new) .map(PeekMaildirMessages::new_boxed)
}); });
builder.set_add_flags(|ctx| { 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)
}); });
} }
_ => (), _ => (),

View file

@ -1,9 +1,9 @@
use anyhow::Result; use anyhow::Result;
use clap::Parser; use clap::Parser;
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
use email::message::copy::imap::CopyMessagesImap; use email::message::copy::imap::CopyImapMessages;
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
use email::message::copy::maildir::CopyMessagesMaildir; use email::message::copy::maildir::CopyMaildirMessages;
use log::info; use log::info;
#[cfg(feature = "account-sync")] #[cfg(feature = "account-sync")]
@ -61,13 +61,14 @@ impl MessageCopyCommand {
|#[allow(unused)] builder| match copy_messages_kind { |#[allow(unused)] builder| match copy_messages_kind {
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
builder builder.set_copy_messages(|ctx| {
.set_copy_messages(|ctx| ctx.imap.as_ref().and_then(CopyMessagesImap::new)); ctx.imap.as_ref().map(CopyImapMessages::new_boxed)
});
} }
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
builder.set_copy_messages(|ctx| { 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")] #[cfg(feature = "account-sync")]
@ -75,7 +76,7 @@ impl MessageCopyCommand {
builder.set_copy_messages(|ctx| { builder.set_copy_messages(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .as_ref()
.and_then(CopyMessagesMaildir::new) .map(CopyMaildirMessages::new_boxed)
}); });
} }
_ => (), _ => (),

View file

@ -1,9 +1,9 @@
use anyhow::Result; use anyhow::Result;
use clap::Parser; use clap::Parser;
#[cfg(feature = "imap")] #[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")] #[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; use log::info;
#[cfg(feature = "account-sync")] #[cfg(feature = "account-sync")]
@ -62,27 +62,30 @@ impl MessageDeleteCommand {
|#[allow(unused)] builder| match delete_messages_kind { |#[allow(unused)] builder| match delete_messages_kind {
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
builder builder.set_move_messages(|ctx| {
.set_move_messages(|ctx| ctx.imap.as_ref().and_then(MoveMessagesImap::new)); ctx.imap.as_ref().map(MoveImapMessages::new_boxed)
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")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
builder.set_move_messages(|ctx| { builder.set_move_messages(|ctx| {
ctx.maildir.as_ref().and_then(MoveMessagesMaildir::new) ctx.maildir.as_ref().map(MoveMaildirMessages::new_boxed)
}); });
builder 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")] #[cfg(feature = "account-sync")]
Some(BackendKind::MaildirForSync) => { Some(BackendKind::MaildirForSync) => {
builder.set_move_messages(|ctx| { builder.set_move_messages(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .as_ref()
.and_then(MoveMessagesMaildir::new) .map(MoveMaildirMessages::new_boxed)
}); });
builder.set_add_flags(|ctx| { 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)
}); });
} }
_ => (), _ => (),

View file

@ -5,9 +5,9 @@ use email::message::add::imap::AddImapMessage;
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
use email::message::add::maildir::AddMaildirMessage; use email::message::add::maildir::AddMaildirMessage;
#[cfg(feature = "sendmail")] #[cfg(feature = "sendmail")]
use email::message::send::sendmail::SendMessageSendmail; use email::message::send::sendmail::SendSendmailMessage;
#[cfg(feature = "smtp")] #[cfg(feature = "smtp")]
use email::message::send::smtp::SendMessageSmtp; use email::message::send::smtp::SendSmtpMessage;
use log::info; use log::info;
#[cfg(feature = "account-sync")] #[cfg(feature = "account-sync")]
@ -75,13 +75,14 @@ impl MessageForwardCommand {
match add_message_kind { match add_message_kind {
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
builder builder.set_add_message(|ctx| {
.set_add_message(|ctx| ctx.imap.as_ref().and_then(AddImapMessage::new)); ctx.imap.as_ref().map(AddImapMessage::new_boxed)
});
} }
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
builder.set_add_message(|ctx| { 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")] #[cfg(feature = "account-sync")]
@ -89,7 +90,7 @@ impl MessageForwardCommand {
builder.set_add_message(|ctx| { builder.set_add_message(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .as_ref()
.and_then(AddMaildirMessage::new) .map(AddMaildirMessage::new_boxed)
}); });
} }
_ => (), _ => (),
@ -99,13 +100,13 @@ impl MessageForwardCommand {
#[cfg(feature = "smtp")] #[cfg(feature = "smtp")]
Some(BackendKind::Smtp) => { Some(BackendKind::Smtp) => {
builder.set_send_message(|ctx| { builder.set_send_message(|ctx| {
ctx.smtp.as_ref().and_then(SendMessageSmtp::new) ctx.smtp.as_ref().map(SendSmtpMessage::new_boxed)
}); });
} }
#[cfg(feature = "sendmail")] #[cfg(feature = "sendmail")]
Some(BackendKind::Sendmail) => { Some(BackendKind::Sendmail) => {
builder.set_send_message(|ctx| { builder.set_send_message(|ctx| {
ctx.sendmail.as_ref().and_then(SendMessageSendmail::new) ctx.sendmail.as_ref().map(SendSendmailMessage::new_boxed)
}); });
} }
_ => (), _ => (),

View file

@ -5,9 +5,9 @@ use email::message::add::imap::AddImapMessage;
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
use email::message::add::maildir::AddMaildirMessage; use email::message::add::maildir::AddMaildirMessage;
#[cfg(feature = "sendmail")] #[cfg(feature = "sendmail")]
use email::message::send::sendmail::SendMessageSendmail; use email::message::send::sendmail::SendSendmailMessage;
#[cfg(feature = "smtp")] #[cfg(feature = "smtp")]
use email::message::send::smtp::SendMessageSmtp; use email::message::send::smtp::SendSmtpMessage;
use log::{debug, info}; use log::{debug, info};
use mail_builder::MessageBuilder; use mail_builder::MessageBuilder;
use url::Url; use url::Url;
@ -72,13 +72,14 @@ impl MessageMailtoCommand {
match add_message_kind { match add_message_kind {
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
builder builder.set_add_message(|ctx| {
.set_add_message(|ctx| ctx.imap.as_ref().and_then(AddImapMessage::new)); ctx.imap.as_ref().map(AddImapMessage::new_boxed)
});
} }
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
builder.set_add_message(|ctx| { 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")] #[cfg(feature = "account-sync")]
@ -86,7 +87,7 @@ impl MessageMailtoCommand {
builder.set_add_message(|ctx| { builder.set_add_message(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .as_ref()
.and_then(AddMaildirMessage::new) .map(AddMaildirMessage::new_boxed)
}); });
} }
_ => (), _ => (),
@ -96,13 +97,13 @@ impl MessageMailtoCommand {
#[cfg(feature = "smtp")] #[cfg(feature = "smtp")]
Some(BackendKind::Smtp) => { Some(BackendKind::Smtp) => {
builder.set_send_message(|ctx| { builder.set_send_message(|ctx| {
ctx.smtp.as_ref().and_then(SendMessageSmtp::new) ctx.smtp.as_ref().map(SendSmtpMessage::new_boxed)
}); });
} }
#[cfg(feature = "sendmail")] #[cfg(feature = "sendmail")]
Some(BackendKind::Sendmail) => { Some(BackendKind::Sendmail) => {
builder.set_send_message(|ctx| { builder.set_send_message(|ctx| {
ctx.sendmail.as_ref().and_then(SendMessageSendmail::new) ctx.sendmail.as_ref().map(SendSendmailMessage::new_boxed)
}); });
} }
_ => (), _ => (),

View file

@ -1,9 +1,9 @@
use anyhow::Result; use anyhow::Result;
use clap::Parser; use clap::Parser;
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
use email::message::move_::imap::MoveMessagesImap; use email::message::move_::imap::MoveImapMessages;
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
use email::message::move_::maildir::MoveMessagesMaildir; use email::message::move_::maildir::MoveMaildirMessages;
use log::info; use log::info;
#[cfg(feature = "account-sync")] #[cfg(feature = "account-sync")]
@ -61,13 +61,14 @@ impl MessageMoveCommand {
|#[allow(unused)] builder| match move_messages_kind { |#[allow(unused)] builder| match move_messages_kind {
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
builder builder.set_move_messages(|ctx| {
.set_move_messages(|ctx| ctx.imap.as_ref().and_then(MoveMessagesImap::new)); ctx.imap.as_ref().map(MoveImapMessages::new_boxed)
});
} }
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
builder.set_move_messages(|ctx| { 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")] #[cfg(feature = "account-sync")]
@ -75,7 +76,7 @@ impl MessageMoveCommand {
builder.set_move_messages(|ctx| { builder.set_move_messages(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .as_ref()
.and_then(MoveMessagesMaildir::new) .map(MoveMaildirMessages::new_boxed)
}); });
} }
_ => (), _ => (),

View file

@ -1,9 +1,9 @@
use anyhow::Result; use anyhow::Result;
use clap::Parser; use clap::Parser;
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
use email::message::{get::imap::GetMessagesImap, peek::imap::PeekMessagesImap}; use email::message::{get::imap::GetImapMessages, peek::imap::PeekImapMessages};
#[cfg(feature = "maildir")] #[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 log::info;
use mml::message::FilterParts; use mml::message::FilterParts;
@ -106,28 +106,31 @@ impl MessageReadCommand {
|#[allow(unused)] builder| match get_messages_kind { |#[allow(unused)] builder| match get_messages_kind {
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
builder.set_peek_messages(|ctx| {
ctx.imap.as_ref().map(PeekImapMessages::new_boxed)
});
builder builder
.set_peek_messages(|ctx| ctx.imap.as_ref().and_then(PeekMessagesImap::new)); .set_get_messages(|ctx| ctx.imap.as_ref().map(GetImapMessages::new_boxed));
builder
.set_get_messages(|ctx| ctx.imap.as_ref().and_then(GetMessagesImap::new));
} }
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
builder.set_peek_messages(|ctx| { builder.set_peek_messages(|ctx| {
ctx.maildir.as_ref().and_then(PeekMessagesMaildir::new) ctx.maildir.as_ref().map(PeekMaildirMessages::new_boxed)
}); });
builder 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")] #[cfg(feature = "account-sync")]
Some(BackendKind::MaildirForSync) => { Some(BackendKind::MaildirForSync) => {
builder.set_peek_messages(|ctx| { builder.set_peek_messages(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .as_ref()
.and_then(PeekMessagesMaildir::new) .map(PeekMaildirMessages::new_boxed)
}); });
builder.set_add_flags(|ctx| { 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)
}); });
} }
_ => (), _ => (),

View file

@ -5,9 +5,9 @@ use email::message::add::imap::AddImapMessage;
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
use email::message::add::maildir::AddMaildirMessage; use email::message::add::maildir::AddMaildirMessage;
#[cfg(feature = "sendmail")] #[cfg(feature = "sendmail")]
use email::message::send::sendmail::SendMessageSendmail; use email::message::send::sendmail::SendSendmailMessage;
#[cfg(feature = "smtp")] #[cfg(feature = "smtp")]
use email::message::send::smtp::SendMessageSmtp; use email::message::send::smtp::SendSmtpMessage;
use log::info; use log::info;
#[cfg(feature = "account-sync")] #[cfg(feature = "account-sync")]
@ -77,13 +77,14 @@ impl MessageReplyCommand {
match add_message_kind { match add_message_kind {
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
builder builder.set_add_message(|ctx| {
.set_add_message(|ctx| ctx.imap.as_ref().and_then(AddImapMessage::new)); ctx.imap.as_ref().map(AddImapMessage::new_boxed)
});
} }
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
builder.set_add_message(|ctx| { 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")] #[cfg(feature = "account-sync")]
@ -91,7 +92,7 @@ impl MessageReplyCommand {
builder.set_add_message(|ctx| { builder.set_add_message(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .as_ref()
.and_then(AddMaildirMessage::new) .map(AddMaildirMessage::new_boxed)
}); });
} }
_ => (), _ => (),
@ -101,13 +102,13 @@ impl MessageReplyCommand {
#[cfg(feature = "smtp")] #[cfg(feature = "smtp")]
Some(BackendKind::Smtp) => { Some(BackendKind::Smtp) => {
builder.set_send_message(|ctx| { builder.set_send_message(|ctx| {
ctx.smtp.as_ref().and_then(SendMessageSmtp::new) ctx.smtp.as_ref().map(SendSmtpMessage::new_boxed)
}); });
} }
#[cfg(feature = "sendmail")] #[cfg(feature = "sendmail")]
Some(BackendKind::Sendmail) => { Some(BackendKind::Sendmail) => {
builder.set_send_message(|ctx| { builder.set_send_message(|ctx| {
ctx.sendmail.as_ref().and_then(SendMessageSendmail::new) ctx.sendmail.as_ref().map(SendSendmailMessage::new_boxed)
}); });
} }
_ => (), _ => (),

View file

@ -59,12 +59,12 @@ impl MessageSaveCommand {
|#[allow(unused)] builder| match add_message_kind { |#[allow(unused)] builder| match add_message_kind {
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::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")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
builder.set_add_message(|ctx| { 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")] #[cfg(feature = "account-sync")]
@ -72,7 +72,7 @@ impl MessageSaveCommand {
builder.set_add_message(|ctx| { builder.set_add_message(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .as_ref()
.and_then(AddMaildirMessage::new) .map(AddMaildirMessage::new_boxed)
}); });
} }
_ => (), _ => (),

View file

@ -5,9 +5,9 @@ use email::message::add::imap::AddImapMessage;
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
use email::message::add::maildir::AddMaildirMessage; use email::message::add::maildir::AddMaildirMessage;
#[cfg(feature = "sendmail")] #[cfg(feature = "sendmail")]
use email::message::send::sendmail::SendMessageSendmail; use email::message::send::sendmail::SendSendmailMessage;
#[cfg(feature = "smtp")] #[cfg(feature = "smtp")]
use email::message::send::smtp::SendMessageSmtp; use email::message::send::smtp::SendSmtpMessage;
use log::info; use log::info;
use std::io::{self, BufRead, IsTerminal}; use std::io::{self, BufRead, IsTerminal};
@ -66,13 +66,14 @@ impl MessageSendCommand {
match add_message_kind { match add_message_kind {
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
builder builder.set_add_message(|ctx| {
.set_add_message(|ctx| ctx.imap.as_ref().and_then(AddImapMessage::new)); ctx.imap.as_ref().map(AddImapMessage::new_boxed)
});
} }
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
builder.set_add_message(|ctx| { 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")] #[cfg(feature = "account-sync")]
@ -80,7 +81,7 @@ impl MessageSendCommand {
builder.set_add_message(|ctx| { builder.set_add_message(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .as_ref()
.and_then(AddMaildirMessage::new) .map(AddMaildirMessage::new_boxed)
}); });
} }
_ => (), _ => (),
@ -89,13 +90,13 @@ impl MessageSendCommand {
#[cfg(feature = "smtp")] #[cfg(feature = "smtp")]
Some(BackendKind::Smtp) => { Some(BackendKind::Smtp) => {
builder.set_send_message(|ctx| { builder.set_send_message(|ctx| {
ctx.smtp.as_ref().and_then(SendMessageSmtp::new) ctx.smtp.as_ref().map(SendSmtpMessage::new_boxed)
}); });
} }
#[cfg(feature = "sendmail")] #[cfg(feature = "sendmail")]
Some(BackendKind::Sendmail) => { Some(BackendKind::Sendmail) => {
builder.set_send_message(|ctx| { builder.set_send_message(|ctx| {
ctx.sendmail.as_ref().and_then(SendMessageSendmail::new) ctx.sendmail.as_ref().map(SendSendmailMessage::new_boxed)
}); });
} }
_ => (), _ => (),

View file

@ -5,9 +5,9 @@ use email::message::add::imap::AddImapMessage;
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
use email::message::add::maildir::AddMaildirMessage; use email::message::add::maildir::AddMaildirMessage;
#[cfg(feature = "sendmail")] #[cfg(feature = "sendmail")]
use email::message::send::sendmail::SendMessageSendmail; use email::message::send::sendmail::SendSendmailMessage;
#[cfg(feature = "smtp")] #[cfg(feature = "smtp")]
use email::message::send::smtp::SendMessageSmtp; use email::message::send::smtp::SendSmtpMessage;
use email::message::Message; use email::message::Message;
use log::info; use log::info;
@ -66,13 +66,14 @@ impl MessageWriteCommand {
match add_message_kind { match add_message_kind {
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
builder builder.set_add_message(|ctx| {
.set_add_message(|ctx| ctx.imap.as_ref().and_then(AddImapMessage::new)); ctx.imap.as_ref().map(AddImapMessage::new_boxed)
});
} }
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
builder.set_add_message(|ctx| { 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")] #[cfg(feature = "account-sync")]
@ -80,7 +81,7 @@ impl MessageWriteCommand {
builder.set_add_message(|ctx| { builder.set_add_message(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .as_ref()
.and_then(AddMaildirMessage::new) .map(AddMaildirMessage::new_boxed)
}); });
} }
_ => (), _ => (),
@ -90,13 +91,13 @@ impl MessageWriteCommand {
#[cfg(feature = "smtp")] #[cfg(feature = "smtp")]
Some(BackendKind::Smtp) => { Some(BackendKind::Smtp) => {
builder.set_send_message(|ctx| { builder.set_send_message(|ctx| {
ctx.smtp.as_ref().and_then(SendMessageSmtp::new) ctx.smtp.as_ref().map(SendSmtpMessage::new_boxed)
}); });
} }
#[cfg(feature = "sendmail")] #[cfg(feature = "sendmail")]
Some(BackendKind::Sendmail) => { Some(BackendKind::Sendmail) => {
builder.set_send_message(|ctx| { builder.set_send_message(|ctx| {
ctx.sendmail.as_ref().and_then(SendMessageSendmail::new) ctx.sendmail.as_ref().map(SendSendmailMessage::new_boxed)
}); });
} }
_ => (), _ => (),

View file

@ -1,9 +1,9 @@
use anyhow::{anyhow, Result}; use anyhow::{anyhow, Result};
use clap::Parser; use clap::Parser;
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
use email::message::get::imap::GetMessagesImap; use email::message::get::imap::GetImapMessages;
#[cfg(feature = "maildir")] #[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 log::info;
#[cfg(feature = "account-sync")] #[cfg(feature = "account-sync")]
@ -68,25 +68,27 @@ impl TemplateForwardCommand {
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
builder 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")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
builder.set_peek_messages(|ctx| { builder.set_peek_messages(|ctx| {
ctx.maildir.as_ref().and_then(PeekMessagesMaildir::new) ctx.maildir.as_ref().map(PeekMaildirMessages::new_boxed)
}); });
builder 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")] #[cfg(feature = "account-sync")]
Some(BackendKind::MaildirForSync) => { Some(BackendKind::MaildirForSync) => {
builder.set_peek_messages(|ctx| { builder.set_peek_messages(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .as_ref()
.and_then(PeekMessagesMaildir::new) .map(PeekMaildirMessages::new_boxed)
}); });
builder.set_add_flags(|ctx| { 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)
}); });
} }
_ => (), _ => (),

View file

@ -1,9 +1,9 @@
use anyhow::{anyhow, Result}; use anyhow::{anyhow, Result};
use clap::Parser; use clap::Parser;
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
use email::message::get::imap::GetMessagesImap; use email::message::get::imap::GetImapMessages;
#[cfg(feature = "maildir")] #[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 log::info;
#[cfg(feature = "account-sync")] #[cfg(feature = "account-sync")]
@ -73,25 +73,27 @@ impl TemplateReplyCommand {
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
builder 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")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
builder.set_peek_messages(|ctx| { builder.set_peek_messages(|ctx| {
ctx.maildir.as_ref().and_then(PeekMessagesMaildir::new) ctx.maildir.as_ref().map(PeekMaildirMessages::new_boxed)
}); });
builder 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")] #[cfg(feature = "account-sync")]
Some(BackendKind::MaildirForSync) => { Some(BackendKind::MaildirForSync) => {
builder.set_peek_messages(|ctx| { builder.set_peek_messages(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .as_ref()
.and_then(PeekMessagesMaildir::new) .map(PeekMaildirMessages::new_boxed)
}); });
builder.set_add_flags(|ctx| { 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)
}); });
} }
_ => (), _ => (),

View file

@ -63,12 +63,12 @@ impl TemplateSaveCommand {
|#[allow(unused)] builder| match add_message_kind { |#[allow(unused)] builder| match add_message_kind {
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::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")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
builder.set_add_message(|ctx| { 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")] #[cfg(feature = "account-sync")]
@ -76,7 +76,7 @@ impl TemplateSaveCommand {
builder.set_add_message(|ctx| { builder.set_add_message(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .as_ref()
.and_then(AddMaildirMessage::new) .map(AddMaildirMessage::new_boxed)
}); });
} }
_ => (), _ => (),

View file

@ -5,9 +5,9 @@ use email::message::add::imap::AddImapMessage;
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
use email::message::add::maildir::AddMaildirMessage; use email::message::add::maildir::AddMaildirMessage;
#[cfg(feature = "sendmail")] #[cfg(feature = "sendmail")]
use email::message::send::sendmail::SendMessageSendmail; use email::message::send::sendmail::SendSendmailMessage;
#[cfg(feature = "smtp")] #[cfg(feature = "smtp")]
use email::message::send::smtp::SendMessageSmtp; use email::message::send::smtp::SendSmtpMessage;
use log::info; use log::info;
use mml::MmlCompilerBuilder; use mml::MmlCompilerBuilder;
use std::io::{self, BufRead, IsTerminal}; use std::io::{self, BufRead, IsTerminal};
@ -69,13 +69,14 @@ impl TemplateSendCommand {
match add_message_kind { match add_message_kind {
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
builder builder.set_add_message(|ctx| {
.set_add_message(|ctx| ctx.imap.as_ref().and_then(AddImapMessage::new)); ctx.imap.as_ref().map(AddImapMessage::new_boxed)
});
} }
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
builder.set_add_message(|ctx| { 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")] #[cfg(feature = "account-sync")]
@ -83,7 +84,7 @@ impl TemplateSendCommand {
builder.set_add_message(|ctx| { builder.set_add_message(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .as_ref()
.and_then(AddMaildirMessage::new) .map(AddMaildirMessage::new_boxed)
}); });
} }
_ => (), _ => (),
@ -92,13 +93,13 @@ impl TemplateSendCommand {
#[cfg(feature = "smtp")] #[cfg(feature = "smtp")]
Some(BackendKind::Smtp) => { Some(BackendKind::Smtp) => {
builder.set_send_message(|ctx| { builder.set_send_message(|ctx| {
ctx.smtp.as_ref().and_then(SendMessageSmtp::new) ctx.smtp.as_ref().map(SendSmtpMessage::new_boxed)
}); });
} }
#[cfg(feature = "sendmail")] #[cfg(feature = "sendmail")]
Some(BackendKind::Sendmail) => { Some(BackendKind::Sendmail) => {
builder.set_send_message(|ctx| { builder.set_send_message(|ctx| {
ctx.sendmail.as_ref().and_then(SendMessageSendmail::new) ctx.sendmail.as_ref().map(SendSendmailMessage::new_boxed)
}); });
} }
_ => (), _ => (),

View file

@ -1,9 +1,11 @@
use anyhow::Result; use anyhow::Result;
use clap::Parser; use clap::Parser;
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
use email::folder::add::imap::AddFolderImap; use email::folder::add::imap::AddImapFolder;
#[cfg(feature = "maildir")] #[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; use log::info;
#[cfg(any(feature = "imap", feature = "maildir", feature = "account-sync"))] #[cfg(any(feature = "imap", feature = "maildir", feature = "account-sync"))]
@ -52,19 +54,26 @@ impl AddFolderCommand {
|builder| match add_folder_kind { |builder| match add_folder_kind {
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::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")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
builder builder.set_add_folder(|ctx| {
.set_add_folder(|ctx| ctx.maildir.as_ref().and_then(AddFolderMaildir::new)); ctx.maildir.as_ref().map(AddMaildirFolder::new_boxed)
});
} }
#[cfg(feature = "account-sync")] #[cfg(feature = "account-sync")]
Some(BackendKind::MaildirForSync) => { Some(BackendKind::MaildirForSync) => {
builder.set_add_folder(|ctx| { builder.set_add_folder(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .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)
}); });
} }
_ => (), _ => (),

View file

@ -2,9 +2,11 @@ use anyhow::Result;
use clap::Parser; use clap::Parser;
use dialoguer::Confirm; use dialoguer::Confirm;
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
use email::folder::delete::imap::DeleteFolderImap; use email::folder::delete::imap::DeleteImapFolder;
#[cfg(feature = "maildir")] #[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 log::info;
use std::process; use std::process;
@ -65,13 +67,14 @@ impl FolderDeleteCommand {
|builder| match delete_folder_kind { |builder| match delete_folder_kind {
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
builder builder.set_delete_folder(|ctx| {
.set_delete_folder(|ctx| ctx.imap.as_ref().and_then(DeleteFolderImap::new)); ctx.imap.as_ref().map(DeleteImapFolder::new_boxed)
});
} }
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
builder.set_delete_folder(|ctx| { 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")] #[cfg(feature = "account-sync")]
@ -79,9 +82,16 @@ impl FolderDeleteCommand {
builder.set_delete_folder(|ctx| { builder.set_delete_folder(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .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)
// });
}
_ => (), _ => (),
}, },
) )

View file

@ -1,9 +1,11 @@
use anyhow::Result; use anyhow::Result;
use clap::Parser; use clap::Parser;
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
use email::folder::expunge::imap::ExpungeFolderImap; use email::folder::expunge::imap::ExpungeImapFolder;
#[cfg(feature = "maildir")] #[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; use log::info;
#[cfg(any(feature = "imap", feature = "maildir", feature = "account-sync"))] #[cfg(any(feature = "imap", feature = "maildir", feature = "account-sync"))]
@ -54,13 +56,13 @@ impl FolderExpungeCommand {
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
builder.set_expunge_folder(|ctx| { builder.set_expunge_folder(|ctx| {
ctx.imap.as_ref().and_then(ExpungeFolderImap::new) ctx.imap.as_ref().map(ExpungeImapFolder::new_boxed)
}); });
} }
#[cfg(feature = "maildir")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
builder.set_expunge_folder(|ctx| { 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")] #[cfg(feature = "account-sync")]
@ -68,9 +70,16 @@ impl FolderExpungeCommand {
builder.set_expunge_folder(|ctx| { builder.set_expunge_folder(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .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)
// });
}
_ => (), _ => (),
}, },
) )

View file

@ -1,9 +1,11 @@
use anyhow::Result; use anyhow::Result;
use clap::Parser; use clap::Parser;
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
use email::folder::list::imap::ListFoldersImap; use email::folder::list::imap::ListImapFolders;
#[cfg(feature = "maildir")] #[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; use log::info;
#[cfg(any(feature = "imap", feature = "maildir", feature = "account-sync"))] #[cfg(any(feature = "imap", feature = "maildir", feature = "account-sync"))]
@ -55,12 +57,12 @@ impl FolderListCommand {
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
builder 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")] #[cfg(feature = "maildir")]
Some(BackendKind::Maildir) => { Some(BackendKind::Maildir) => {
builder.set_list_folders(|ctx| { 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")] #[cfg(feature = "account-sync")]
@ -68,9 +70,16 @@ impl FolderListCommand {
builder.set_list_folders(|ctx| { builder.set_list_folders(|ctx| {
ctx.maildir_for_sync ctx.maildir_for_sync
.as_ref() .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)
});
}
_ => (), _ => (),
}, },
) )

View file

@ -1,5 +1,5 @@
#[cfg(feature = "folder-add")] #[cfg(feature = "folder-add")]
mod create; mod add;
#[cfg(feature = "folder-delete")] #[cfg(feature = "folder-delete")]
mod delete; mod delete;
#[cfg(feature = "folder-expunge")] #[cfg(feature = "folder-expunge")]
@ -15,7 +15,7 @@ use clap::Subcommand;
use crate::{config::TomlConfig, printer::Printer}; use crate::{config::TomlConfig, printer::Printer};
#[cfg(feature = "folder-add")] #[cfg(feature = "folder-add")]
use self::create::AddFolderCommand; use self::add::AddFolderCommand;
#[cfg(feature = "folder-delete")] #[cfg(feature = "folder-delete")]
use self::delete::FolderDeleteCommand; use self::delete::FolderDeleteCommand;
#[cfg(feature = "folder-expunge")] #[cfg(feature = "folder-expunge")]

View file

@ -2,7 +2,11 @@ use anyhow::Result;
use clap::Parser; use clap::Parser;
use dialoguer::Confirm; use dialoguer::Confirm;
#[cfg(feature = "imap")] #[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 log::info;
use std::process; use std::process;
@ -64,23 +68,31 @@ impl FolderPurgeCommand {
#[cfg(feature = "imap")] #[cfg(feature = "imap")]
Some(BackendKind::Imap) => { Some(BackendKind::Imap) => {
builder 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)
// });
// }
_ => (), _ => (),
}, },
) )

View file

@ -1,20 +1,24 @@
use anyhow::Result; use anyhow::Result;
use dialoguer::Input; 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<BackendConfig> { pub(crate) fn configure() -> Result<BackendConfig> {
let mut config = NotmuchConfig::default(); let mut config = NotmuchConfig::default();
config.db_path = if let Ok(db_path) = NotmuchBackend::get_default_db_path() { let default_database_path = NotmuchConfig::get_default_database_path()
db_path .unwrap_or_default()
} else { .to_string_lossy()
let db_path: String = Input::with_theme(&*THEME) .to_string();
config.database_path = Some(
Input::with_theme(&*THEME)
.with_prompt("Notmuch database path") .with_prompt("Notmuch database path")
.interact_text()?; .default(default_database_path)
db_path.into() .interact_text()?
}; .into(),
);
Ok(BackendConfig::Notmuch(config)) Ok(BackendConfig::Notmuch(config))
} }