mirror of
https://github.com/pimalaya/himalaya.git
synced 2026-06-17 13:17:55 +08:00
improve msg arg/handlers + tpl + flag
This commit is contained in:
+77
-19
@@ -2,6 +2,7 @@ use anyhow::Result;
|
||||
use clap;
|
||||
use env_logger;
|
||||
use std::{convert::TryFrom, env};
|
||||
use url::Url;
|
||||
|
||||
use himalaya::{
|
||||
compl,
|
||||
@@ -14,7 +15,6 @@ use himalaya::{
|
||||
msg,
|
||||
smtp::service::SmtpService,
|
||||
},
|
||||
flag,
|
||||
output::{cli::output_args, service::OutputService},
|
||||
};
|
||||
|
||||
@@ -26,11 +26,10 @@ fn create_app<'a>() -> clap::App<'a, 'a> {
|
||||
.args(&output_args())
|
||||
.args(&config_args())
|
||||
.arg(mbox::arg::source_arg())
|
||||
.subcommands(flag::arg::subcmds())
|
||||
.subcommands(compl::arg::subcmds())
|
||||
.subcommands(imap::arg::subcmds())
|
||||
.subcommands(mbox::arg::subcmds())
|
||||
.subcommands(msg::arg::subcmds())
|
||||
.subcommands(compl::arg::subcmds())
|
||||
}
|
||||
|
||||
fn main() -> Result<()> {
|
||||
@@ -39,19 +38,18 @@ fn main() -> Result<()> {
|
||||
env_logger::Env::default().filter_or(env_logger::DEFAULT_FILTER_ENV, "off"),
|
||||
);
|
||||
|
||||
// TODO: put in a `mailto` module
|
||||
// let raw_args: Vec<String> = env::args().collect();
|
||||
// if raw_args.len() > 1 && raw_args[1].starts_with("mailto:") {
|
||||
// let config = Config::new(None)?;
|
||||
// let account = config.find_account_by_name(None)?.clone();
|
||||
// let output = Output::new("plain");
|
||||
// let mbox = "INBOX";
|
||||
// let arg_matches = ArgMatches::default();
|
||||
// let app = Ctx::new(config, output, mbox, arg_matches);
|
||||
// let url = Url::parse(&raw_args[1])?;
|
||||
// let smtp = domain::smtp::service::SMTPService::new(&app.account);
|
||||
// return Ok(msg_matches_mailto(&app, &url, smtp)?);
|
||||
// }
|
||||
// Check mailto match BEFORE app initialization.
|
||||
let raw_args: Vec<String> = env::args().collect();
|
||||
if raw_args.len() > 1 && raw_args[1].starts_with("mailto:") {
|
||||
let mbox = Mbox::from("INBOX");
|
||||
let config = Config::try_from(None)?;
|
||||
let account = Account::try_from((&config, None))?;
|
||||
let output = OutputService::from("plain");
|
||||
let url = Url::parse(&raw_args[1])?;
|
||||
let mut imap = ImapService::from((&account, &mbox));
|
||||
let mut smtp = SmtpService::from(&account);
|
||||
return msg::handler::mailto(&url, &account, &output, &mut imap, &mut smtp);
|
||||
}
|
||||
|
||||
let app = create_app();
|
||||
let m = app.get_matches();
|
||||
@@ -91,9 +89,69 @@ fn main() -> Result<()> {
|
||||
_ => (),
|
||||
}
|
||||
|
||||
// TODO: use same system as compl
|
||||
let _matched = flag::arg::matches(&m, &mut imap)?
|
||||
|| msg::arg::matches(&m, &mbox, &account, &output, &mut imap, &mut smtp)?;
|
||||
// Check message matches.
|
||||
match msg::arg::matches(&m)? {
|
||||
Some(msg::arg::Match::Attachments(uid)) => {
|
||||
return msg::handler::attachments(uid, &account, &output, &mut imap);
|
||||
}
|
||||
Some(msg::arg::Match::Copy(uid, mbox)) => {
|
||||
return msg::handler::copy(uid, mbox, &output, &mut imap);
|
||||
}
|
||||
Some(msg::arg::Match::Delete(uid)) => {
|
||||
return msg::handler::delete(uid, &output, &mut imap);
|
||||
}
|
||||
Some(msg::arg::Match::Forward(uid, paths)) => {
|
||||
return msg::handler::forward(uid, paths, &account, &output, &mut imap, &mut smtp);
|
||||
}
|
||||
Some(msg::arg::Match::List(page_size, page)) => {
|
||||
return msg::handler::list(page_size, page, &account, &output, &mut imap);
|
||||
}
|
||||
Some(msg::arg::Match::Move(uid, mbox)) => {
|
||||
return msg::handler::move_(uid, mbox, &output, &mut imap);
|
||||
}
|
||||
Some(msg::arg::Match::Read(uid, mime, raw)) => {
|
||||
return msg::handler::read(uid, mime, raw, &output, &mut imap);
|
||||
}
|
||||
Some(msg::arg::Match::Reply(uid, all, paths)) => {
|
||||
return msg::handler::reply(uid, all, paths, &account, &output, &mut imap, &mut smtp);
|
||||
}
|
||||
Some(msg::arg::Match::Save(mbox, msg)) => {
|
||||
return msg::handler::save(mbox, msg, &mut imap);
|
||||
}
|
||||
Some(msg::arg::Match::Search(query, page_size, page)) => {
|
||||
return msg::handler::search(page_size, page, query, &account, &output, &mut imap);
|
||||
}
|
||||
Some(msg::arg::Match::Send(msg)) => {
|
||||
return msg::handler::send(msg, &output, &mut imap, &mut smtp);
|
||||
}
|
||||
Some(msg::arg::Match::Write(paths)) => {
|
||||
return msg::handler::write(paths, &account, &output, &mut imap, &mut smtp);
|
||||
}
|
||||
|
||||
Some(msg::arg::Match::Flag(m)) => match m {
|
||||
msg::flag::arg::Match::Set(uid, flags) => {
|
||||
return msg::flag::handler::set(uid, flags, &mut imap);
|
||||
}
|
||||
msg::flag::arg::Match::Add(uid, flags) => {
|
||||
return msg::flag::handler::add(uid, flags, &mut imap);
|
||||
}
|
||||
msg::flag::arg::Match::Remove(uid, flags) => {
|
||||
return msg::flag::handler::remove(uid, flags, &mut imap);
|
||||
}
|
||||
},
|
||||
Some(msg::arg::Match::Tpl(m)) => match m {
|
||||
msg::tpl::arg::Match::New => {
|
||||
return msg::tpl::handler::new(&account, &output, &mut imap);
|
||||
}
|
||||
msg::tpl::arg::Match::Reply(uid, all) => {
|
||||
return msg::tpl::handler::reply(uid, all, &account, &output, &mut imap);
|
||||
}
|
||||
msg::tpl::arg::Match::Forward(uid) => {
|
||||
return msg::tpl::handler::forward(uid, &account, &output, &mut imap);
|
||||
}
|
||||
},
|
||||
_ => (),
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user