summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2020-05-02 13:36:39 +0200
committerMatthias Beyer <mail@beyermatthias.de>2020-06-01 14:02:08 +0200
commit9e3bfc5421ed454cdbb623ec7f12ec1f1b901126 (patch)
tree4fc27e68cf12ea07aa15e6298bc100e7598c5c02
parent7896348d4bdf29db88ef10ce8dcd5d72b5b9be46 (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.rs51
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(())
- }
-}
-