diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2020-05-02 13:36:39 +0200 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2020-06-01 14:02:08 +0200 |
commit | 9e3bfc5421ed454cdbb623ec7f12ec1f1b901126 (patch) | |
tree | 4fc27e68cf12ea07aa15e6298bc100e7598c5c02 | |
parent | 7896348d4bdf29db88ef10ce8dcd5d72b5b9be46 (diff) |
Do not use helper but parse things into variables
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r-- | bin/domain/imag-mail/src/new.rs | 51 |
1 files changed, 18 insertions, 33 deletions
diff --git a/bin/domain/imag-mail/src/new.rs b/bin/domain/imag-mail/src/new.rs index 7dcd2fae..4c769a1d 100644 --- a/bin/domain/imag-mail/src/new.rs +++ b/bin/domain/imag-mail/src/new.rs @@ -19,7 +19,6 @@ use std::path::PathBuf; use std::collections::BTreeMap; -use std::result::Result as RResult; use failure::Fallible as Result; use failure::err_msg; @@ -33,13 +32,6 @@ use chrono::Local; use email_format::Email; use email_format::rfc5322::Parsable; use handlebars::Handlebars; -use handlebars::RenderContext; -use handlebars::RenderError; -use handlebars::Context; -use handlebars::Helper; -use handlebars::HelperDef; -use handlebars::Output; -use handlebars::JsonRender; use failure::Error; use libimagmail::mail::Mail; @@ -157,13 +149,27 @@ fn mk_processed_template(rt: &Runtime, scmd: &ArgMatches, config: &MailConfig) - }) })); - hb_data.insert(String::from("to"), HandlebarsData::Str({ - scmd.value_of("to") + { // parse "to" data, whether it is StoreId or String, also set to_name and has_to_name if there is a name present for the "to" data + let to = scmd + .value_of("to") .map(String::from) .ok_or_else(|| { err_msg("Missing value for field field: 'to'") - })? - })); + })?; + + // Assume it is string for now + // TODO: Check whether `to` is a StoreId (here) + + let (addr, _) = email_format::rfc5322::types::NameAddr::parse(to.as_bytes())?; + if let Some(display_name) = addr.display_name { + hb_data.insert(String::from("to_name"), HandlebarsData::Str(format!("{}", display_name))); + hb_data.insert(String::from("has_to_name"), HandlebarsData::Bool(true)); + } else { + hb_data.insert(String::from("has_to_name"), HandlebarsData::Bool(false)); + } + + hb_data.insert(String::from("to"), HandlebarsData::Str(to)); + } if let Some(in_reply_to) = scmd.value_of("in-reply-to").map(String::from) { hb_data.insert(String::from("is_in_reply_to") , HandlebarsData::Bool(true)); @@ -222,7 +228,6 @@ fn edit_message_validated(rt: &Runtime, mut msg: String) -> Result<String> { fn process_template(template: &str, data: &BTreeMap<String, HandlebarsData>) -> Result<String> { let mut hb = Handlebars::new(); - hb.register_helper("get_name", Box::new(GetNameHelper)); hb.register_template_string("format", template)?; hb.register_escape_fn(::handlebars::no_escape); @@ -241,23 +246,3 @@ fn generate_message_id(config: &MailConfig) -> Result<String> { config.get_from_address())) } -#[derive(Clone, Copy)] -pub struct GetNameHelper; -impl HelperDef for GetNameHelper { - fn call<'reg: 'rc, 'rc>(&self, - h: &Helper<'reg, 'rc>, - hb: &'reg Handlebars, - _ctx: &'rc Context, - _rc: &mut RenderContext<'reg>, - out: &mut dyn Output) - -> RResult<(), RenderError> - { - let p = h.param(0).ok_or_else(|| RenderError::new("Too few arguments"))?; - let p = p.value().render(); - let (addr, _) = email_format::rfc5322::types::NameAddr::parse(p.as_bytes()) - .map_err(|e| RenderError::new(format!("Failed to parse: {}", e)))?; - out.write(&format!("{}", addr.angle_addr))?; - Ok(()) - } -} - |