mirror of
https://github.com/soywod/himalaya.git
synced 2024-07-08 18:45:13 +00:00
61 lines
2 KiB
Rust
61 lines
2 KiB
Rust
use anyhow::Result;
|
|
use clap::Parser;
|
|
use env_logger::{Builder as LoggerBuilder, Env, DEFAULT_FILTER_ENV};
|
|
#[cfg(any(feature = "envelope-list", feature = "message-mailto"))]
|
|
use himalaya::config::TomlConfig;
|
|
#[cfg(feature = "envelope-list")]
|
|
use himalaya::envelope::command::list::ListEnvelopesCommand;
|
|
#[cfg(feature = "message-mailto")]
|
|
use himalaya::message::command::mailto::MessageMailtoCommand;
|
|
use himalaya::{cli::Cli, printer::StdoutPrinter};
|
|
use log::{debug, warn};
|
|
|
|
#[tokio::main]
|
|
async fn main() -> Result<()> {
|
|
#[cfg(not(target_os = "windows"))]
|
|
if let Err((_, err)) = coredump::register_panic_handler() {
|
|
warn!("cannot register coredump panic handler: {err}");
|
|
debug!("{err:?}");
|
|
}
|
|
|
|
LoggerBuilder::new()
|
|
.parse_env(Env::new().filter_or(DEFAULT_FILTER_ENV, "warn"))
|
|
.format_timestamp(None)
|
|
.init();
|
|
|
|
#[cfg(feature = "message-mailto")]
|
|
// if the first argument starts by "mailto:", execute straight the
|
|
// mailto message command
|
|
if let Some(ref url) = std::env::args()
|
|
.nth(1)
|
|
.filter(|arg| arg.starts_with("mailto:"))
|
|
{
|
|
let mut printer = StdoutPrinter::default();
|
|
let config = TomlConfig::from_default_paths().await?;
|
|
|
|
return MessageMailtoCommand::new(url)?
|
|
.execute(&mut printer, &config)
|
|
.await;
|
|
}
|
|
|
|
let cli = Cli::parse();
|
|
let mut printer = StdoutPrinter::new(cli.output, cli.color);
|
|
|
|
#[cfg(feature = "envelope-list")]
|
|
match cli.command {
|
|
Some(cmd) => return cmd.execute(&mut printer, cli.config_path.as_ref()).await,
|
|
None => {
|
|
let config = TomlConfig::from_some_path_or_default(cli.config_path.as_ref()).await?;
|
|
return ListEnvelopesCommand::default()
|
|
.execute(&mut printer, &config)
|
|
.await;
|
|
}
|
|
}
|
|
|
|
#[cfg(not(feature = "envelope-list"))]
|
|
return cli
|
|
.command
|
|
.execute(&mut printer, cli.config_path.as_ref())
|
|
.await;
|
|
}
|