mirror of
https://github.com/soywod/himalaya.git
synced 2024-11-25 04:20:22 +00:00
add account check-up command
This commit is contained in:
parent
79da9404f3
commit
0e35a0cd64
2 changed files with 129 additions and 1 deletions
121
src/account/command/check_up.rs
Normal file
121
src/account/command/check_up.rs
Normal file
|
@ -0,0 +1,121 @@
|
||||||
|
use anyhow::Result;
|
||||||
|
use clap::Parser;
|
||||||
|
use email::backend::context::BackendContextBuilder;
|
||||||
|
use log::info;
|
||||||
|
|
||||||
|
use crate::{
|
||||||
|
account::arg::name::OptionalAccountNameArg, backend, config::TomlConfig, printer::Printer,
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Check up the given account.
|
||||||
|
///
|
||||||
|
/// This command performs a checkup of the given account. It checks if
|
||||||
|
/// the configuration is valid, if backend can be created and if
|
||||||
|
/// sessions work.
|
||||||
|
#[derive(Debug, Parser)]
|
||||||
|
pub struct AccountCheckUpCommand {
|
||||||
|
#[command(flatten)]
|
||||||
|
pub account: OptionalAccountNameArg,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl AccountCheckUpCommand {
|
||||||
|
pub async fn execute(self, printer: &mut impl Printer, config: &TomlConfig) -> Result<()> {
|
||||||
|
info!("executing check up account command");
|
||||||
|
|
||||||
|
let account = self.account.name.as_ref().map(String::as_str);
|
||||||
|
|
||||||
|
printer.print_log("Checking configuration integrity…")?;
|
||||||
|
|
||||||
|
let (toml_account_config, account_config) =
|
||||||
|
config.clone().into_account_configs(account, true)?;
|
||||||
|
let used_backends = toml_account_config.get_used_backends();
|
||||||
|
|
||||||
|
printer.print_log("Checking backend context integrity…")?;
|
||||||
|
|
||||||
|
let ctx_builder = backend::BackendContextBuilder::new(
|
||||||
|
toml_account_config.clone(),
|
||||||
|
account_config,
|
||||||
|
Vec::from_iter(used_backends),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
let ctx = ctx_builder.clone().build().await?;
|
||||||
|
|
||||||
|
#[cfg(feature = "maildir")]
|
||||||
|
{
|
||||||
|
printer.print_log("Checking Maildir integrity…")?;
|
||||||
|
|
||||||
|
let maildir = ctx_builder
|
||||||
|
.maildir
|
||||||
|
.as_ref()
|
||||||
|
.and_then(|maildir| maildir.check_up())
|
||||||
|
.and_then(|f| ctx.maildir.as_ref().and_then(|ctx| f(ctx)));
|
||||||
|
|
||||||
|
if let Some(maildir) = maildir.as_ref() {
|
||||||
|
maildir.check_up().await?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "imap")]
|
||||||
|
{
|
||||||
|
printer.print_log("Checking IMAP integrity…")?;
|
||||||
|
|
||||||
|
let imap = ctx_builder
|
||||||
|
.imap
|
||||||
|
.as_ref()
|
||||||
|
.and_then(|imap| imap.check_up())
|
||||||
|
.and_then(|f| ctx.imap.as_ref().and_then(|ctx| f(ctx)));
|
||||||
|
|
||||||
|
if let Some(imap) = imap.as_ref() {
|
||||||
|
imap.check_up().await?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "notmuch")]
|
||||||
|
{
|
||||||
|
printer.print_log("Checking Notmuch integrity…")?;
|
||||||
|
|
||||||
|
let notmuch = ctx_builder
|
||||||
|
.notmuch
|
||||||
|
.as_ref()
|
||||||
|
.and_then(|notmuch| notmuch.check_up())
|
||||||
|
.and_then(|f| ctx.notmuch.as_ref().and_then(|ctx| f(ctx)));
|
||||||
|
|
||||||
|
if let Some(notmuch) = notmuch.as_ref() {
|
||||||
|
notmuch.check_up().await?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "smtp")]
|
||||||
|
{
|
||||||
|
printer.print_log("Checking SMTP integrity…")?;
|
||||||
|
|
||||||
|
let smtp = ctx_builder
|
||||||
|
.smtp
|
||||||
|
.as_ref()
|
||||||
|
.and_then(|smtp| smtp.check_up())
|
||||||
|
.and_then(|f| ctx.smtp.as_ref().and_then(|ctx| f(ctx)));
|
||||||
|
|
||||||
|
if let Some(smtp) = smtp.as_ref() {
|
||||||
|
smtp.check_up().await?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "sendmail")]
|
||||||
|
{
|
||||||
|
printer.print_log("Checking Sendmail integrity…")?;
|
||||||
|
|
||||||
|
let sendmail = ctx_builder
|
||||||
|
.sendmail
|
||||||
|
.as_ref()
|
||||||
|
.and_then(|sendmail| sendmail.check_up())
|
||||||
|
.and_then(|f| ctx.sendmail.as_ref().and_then(|ctx| f(ctx)));
|
||||||
|
|
||||||
|
if let Some(sendmail) = sendmail.as_ref() {
|
||||||
|
sendmail.check_up().await?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
printer.print("Checkup successfully completed!")
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,3 +1,4 @@
|
||||||
|
mod check_up;
|
||||||
mod configure;
|
mod configure;
|
||||||
mod list;
|
mod list;
|
||||||
#[cfg(feature = "account-sync")]
|
#[cfg(feature = "account-sync")]
|
||||||
|
@ -10,7 +11,9 @@ use crate::{config::TomlConfig, printer::Printer};
|
||||||
|
|
||||||
#[cfg(feature = "account-sync")]
|
#[cfg(feature = "account-sync")]
|
||||||
use self::sync::AccountSyncCommand;
|
use self::sync::AccountSyncCommand;
|
||||||
use self::{configure::AccountConfigureCommand, list::AccountListCommand};
|
use self::{
|
||||||
|
check_up::AccountCheckUpCommand, configure::AccountConfigureCommand, list::AccountListCommand,
|
||||||
|
};
|
||||||
|
|
||||||
/// Manage accounts.
|
/// Manage accounts.
|
||||||
///
|
///
|
||||||
|
@ -19,6 +22,9 @@ use self::{configure::AccountConfigureCommand, list::AccountListCommand};
|
||||||
/// file. This subcommand allows you to manage them.
|
/// file. This subcommand allows you to manage them.
|
||||||
#[derive(Debug, Subcommand)]
|
#[derive(Debug, Subcommand)]
|
||||||
pub enum AccountSubcommand {
|
pub enum AccountSubcommand {
|
||||||
|
#[command(alias = "checkup")]
|
||||||
|
CheckUp(AccountCheckUpCommand),
|
||||||
|
|
||||||
#[command(alias = "cfg")]
|
#[command(alias = "cfg")]
|
||||||
Configure(AccountConfigureCommand),
|
Configure(AccountConfigureCommand),
|
||||||
|
|
||||||
|
@ -34,6 +40,7 @@ impl AccountSubcommand {
|
||||||
#[allow(unused)]
|
#[allow(unused)]
|
||||||
pub async fn execute(self, printer: &mut impl Printer, config: &TomlConfig) -> Result<()> {
|
pub async fn execute(self, printer: &mut impl Printer, config: &TomlConfig) -> Result<()> {
|
||||||
match self {
|
match self {
|
||||||
|
Self::CheckUp(cmd) => cmd.execute(printer, config).await,
|
||||||
Self::Configure(cmd) => cmd.execute(printer, config).await,
|
Self::Configure(cmd) => cmd.execute(printer, config).await,
|
||||||
Self::List(cmd) => cmd.execute(printer, config).await,
|
Self::List(cmd) => cmd.execute(printer, config).await,
|
||||||
#[cfg(feature = "account-sync")]
|
#[cfg(feature = "account-sync")]
|
||||||
|
|
Loading…
Reference in a new issue