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]]
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",

View file

@ -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")]

View file

@ -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<ImapSessionBuilder>,
pub imap: Option<ImapContextBuilder>,
#[cfg(feature = "maildir")]
pub maildir: Option<MaildirSessionBuilder>,
pub maildir: Option<MaildirContextBuilder>,
#[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")]
pub smtp: Option<SmtpClientBuilder>,
pub smtp: Option<SmtpContextBuilder>,
#[cfg(feature = "sendmail")]
pub sendmail: Option<SendmailContext>,
}
@ -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<ImapSessionSync>,
pub imap: Option<ImapContextSync>,
#[cfg(feature = "maildir")]
pub maildir: Option<MaildirSessionSync>,
pub maildir: Option<MaildirContextSync>,
#[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")]
pub smtp: Option<SmtpClientSync>,
pub smtp: Option<SmtpContextSync>,
#[cfg(feature = "sendmail")]
pub sendmail: Option<SendmailContext>,
}
@ -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()?,
)?;
}
}

View file

@ -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)
});
}
_ => (),

View file

@ -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)
// });
}
_ => (),
},
)

View file

@ -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));
}
_ => (),
},
)

View file

@ -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)
});
}
_ => (),

View file

@ -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));
}
_ => (),
},
)

View file

@ -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)
});
}
_ => (),

View file

@ -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)
});
}
_ => (),

View file

@ -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)
});
}
_ => (),

View file

@ -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)
});
}
_ => (),

View file

@ -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)
});
}
_ => (),

View file

@ -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)
});
}
_ => (),

View file

@ -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)
});
}
_ => (),

View file

@ -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)
});
}
_ => (),

View file

@ -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)
});
}
_ => (),

View file

@ -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)
});
}
_ => (),

View file

@ -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)
});
}
_ => (),

View file

@ -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)
});
}
_ => (),

View file

@ -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)
});
}
_ => (),

View file

@ -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)
});
}
_ => (),

View file

@ -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)
});
}
_ => (),

View file

@ -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)
});
}
_ => (),

View file

@ -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)
// });
}
_ => (),
},
)

View file

@ -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)
// });
}
_ => (),
},
)

View file

@ -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)
});
}
_ => (),
},
)

View file

@ -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")]

View file

@ -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)
// });
// }
_ => (),
},
)

View file

@ -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<BackendConfig> {
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))
}