From 6d154abcb5f48a4591b71672006783f037885233 Mon Sep 17 00:00:00 2001 From: ugla Date: Sat, 16 Apr 2022 13:50:49 +0200 Subject: [PATCH] add `tpl_args` for `write` subcommand (#361) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Clément DOUIN --- cli/src/main.rs | 3 ++- cli/src/msg/msg_args.rs | 6 ++++-- cli/src/msg/msg_entity.rs | 11 ++++++----- cli/src/msg/msg_handlers.rs | 29 +++++++++++++++++++++++++---- cli/src/msg/tpl_args.rs | 2 +- 5 files changed, 38 insertions(+), 13 deletions(-) diff --git a/cli/src/main.rs b/cli/src/main.rs index 66f3900..ab2a944 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -277,8 +277,9 @@ fn main() -> Result<()> { Some(msg_args::Cmd::Send(raw_msg)) => { return msg_handlers::send(raw_msg, &account_config, &mut printer, backend, &mut smtp); } - Some(msg_args::Cmd::Write(atts, encrypt)) => { + Some(msg_args::Cmd::Write(tpl, atts, encrypt)) => { return msg_handlers::write( + tpl, atts, encrypt, &account_config, diff --git a/cli/src/msg/msg_args.rs b/cli/src/msg/msg_args.rs index 32e02b6..169b05a 100644 --- a/cli/src/msg/msg_args.rs +++ b/cli/src/msg/msg_args.rs @@ -42,7 +42,7 @@ pub enum Cmd<'a> { Search(Query, MaxTableWidth, Option, Page), Sort(Criteria, Query, MaxTableWidth, Option, Page), Send(RawMsg<'a>), - Write(AttachmentPaths<'a>, Encrypt), + Write(tpl_args::TplOverride<'a>, AttachmentPaths<'a>, Encrypt), Flag(Option>), Tpl(Option>), @@ -261,7 +261,8 @@ pub fn matches<'a>(m: &'a ArgMatches) -> Result>> { debug!("attachments paths: {:?}", attachment_paths); let encrypt = m.is_present("encrypt"); debug!("encrypt: {}", encrypt); - return Ok(Some(Cmd::Write(attachment_paths, encrypt))); + let tpl = tpl_args::TplOverride::from(m); + return Ok(Some(Cmd::Write(tpl, attachment_paths, encrypt))); } if let Some(m) = m.subcommand_matches("template") { @@ -412,6 +413,7 @@ pub fn subcmds<'a>() -> Vec> { ), SubCommand::with_name("write") .about("Writes a new message") + .args(&tpl_args::tpl_args()) .arg(attachments_arg()) .arg(encrypt_arg()), SubCommand::with_name("send") diff --git a/cli/src/msg/msg_entity.rs b/cli/src/msg/msg_entity.rs index ffe87b6..9978d46 100644 --- a/cli/src/msg/msg_entity.rs +++ b/cli/src/msg/msg_entity.rs @@ -327,14 +327,15 @@ impl Msg { Ok(self) } - fn _edit_with_editor(&self, account: &AccountConfig) -> Result { - let tpl = self.to_tpl(TplOverride::default(), account)?; + fn _edit_with_editor(&self, tpl: TplOverride, account: &AccountConfig) -> Result { + let tpl = self.to_tpl(tpl, account)?; let tpl = editor::open_with_tpl(tpl)?; Self::from_tpl(&tpl) } pub fn edit_with_editor<'a, P: PrinterService, B: Backend<'a> + ?Sized, S: SmtpService>( mut self, + tpl: TplOverride, account: &AccountConfig, printer: &mut P, backend: Box<&'a mut B>, @@ -353,7 +354,7 @@ impl Msg { break; } PreEditChoice::Discard => { - self.merge_with(self._edit_with_editor(account)?); + self.merge_with(self._edit_with_editor(tpl.clone(), account)?); break; } PreEditChoice::Quit => return Ok(backend), @@ -365,7 +366,7 @@ impl Msg { } } } else { - self.merge_with(self._edit_with_editor(account)?); + self.merge_with(self._edit_with_editor(tpl.clone(), account)?); } loop { @@ -386,7 +387,7 @@ impl Msg { break; } Ok(PostEditChoice::Edit) => { - self.merge_with(self._edit_with_editor(account)?); + self.merge_with(self._edit_with_editor(tpl.clone(), account)?); continue; } Ok(PostEditChoice::LocalDraft) => { diff --git a/cli/src/msg/msg_handlers.rs b/cli/src/msg/msg_handlers.rs index 80520c5..57ce255 100644 --- a/cli/src/msg/msg_handlers.rs +++ b/cli/src/msg/msg_handlers.rs @@ -21,6 +21,8 @@ use crate::{ smtp::SmtpService, }; +use super::tpl_args; + /// Downloads all message attachments to the user account downloads directory. pub fn attachments<'a, P: PrinterService, B: Backend<'a> + ?Sized>( seq: &str, @@ -99,7 +101,13 @@ pub fn forward<'a, P: PrinterService, B: Backend<'a> + ?Sized, S: SmtpService>( .into_forward(config)? .add_attachments(attachments_paths)? .encrypt(encrypt) - .edit_with_editor(config, printer, backend, smtp)?; + .edit_with_editor( + tpl_args::TplOverride::default(), + config, + printer, + backend, + smtp, + )?; Ok(()) } @@ -183,7 +191,13 @@ pub fn mailto<'a, P: PrinterService, B: Backend<'a> + ?Sized, S: SmtpService>( }; trace!("message: {:?}", msg); - msg.edit_with_editor(config, printer, backend, smtp)?; + msg.edit_with_editor( + tpl_args::TplOverride::default(), + config, + printer, + backend, + smtp, + )?; Ok(()) } @@ -240,7 +254,13 @@ pub fn reply<'a, P: PrinterService, B: Backend<'a> + ?Sized, S: SmtpService>( .into_reply(all, config)? .add_attachments(attachments_paths)? .encrypt(encrypt) - .edit_with_editor(config, printer, backend, smtp)? + .edit_with_editor( + tpl_args::TplOverride::default(), + config, + printer, + backend, + smtp, + )? .add_flags(mbox, seq, "replied") } @@ -364,6 +384,7 @@ pub fn send<'a, P: PrinterService, B: Backend<'a> + ?Sized, S: SmtpService>( /// Compose a new message. pub fn write<'a, P: PrinterService, B: Backend<'a> + ?Sized, S: SmtpService>( + tpl: tpl_args::TplOverride, attachments_paths: Vec<&str>, encrypt: bool, config: &AccountConfig, @@ -374,6 +395,6 @@ pub fn write<'a, P: PrinterService, B: Backend<'a> + ?Sized, S: SmtpService>( Msg::default() .add_attachments(attachments_paths)? .encrypt(encrypt) - .edit_with_editor(config, printer, backend, smtp)?; + .edit_with_editor(tpl, config, printer, backend, smtp)?; Ok(()) } diff --git a/cli/src/msg/tpl_args.rs b/cli/src/msg/tpl_args.rs index e3254ff..90a9356 100644 --- a/cli/src/msg/tpl_args.rs +++ b/cli/src/msg/tpl_args.rs @@ -13,7 +13,7 @@ type ReplyAll = bool; type AttachmentPaths<'a> = Vec<&'a str>; type Tpl<'a> = &'a str; -#[derive(Debug, Default, PartialEq, Eq)] +#[derive(Debug, Default, PartialEq, Eq, Clone)] pub struct TplOverride<'a> { pub subject: Option<&'a str>, pub from: Option>,