diff --git a/Cargo.lock b/Cargo.lock index c714999..da0b640 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1246,7 +1246,7 @@ dependencies = [ [[package]] name = "email-lib" version = "0.17.1" -source = "git+https://git.sr.ht/~soywod/pimalaya#9b69f07b6278550d74b8ba5afd2618a57c6225af" +source = "git+https://git.sr.ht/~soywod/pimalaya#da6c3e9834c5e2071a66a6b7e3e71a8eddc73766" dependencies = [ "advisory-lock", "anyhow", diff --git a/src/account/arg/name.rs b/src/account/arg/name.rs index b1fe3a2..57ff2a1 100644 --- a/src/account/arg/name.rs +++ b/src/account/arg/name.rs @@ -11,6 +11,19 @@ pub struct AccountNameArg { pub name: String, } +/// The optional account name argument parser. +#[derive(Debug, Parser)] +pub struct OptionalAccountNameArg { + /// The name of the account. + /// + /// An account name corresponds to an entry in the table at the + /// root level of your TOML configuration file. + /// + /// If omitted, the account marked as default will be used. + #[arg(name = "account_name", value_name = "ACCOUNT")] + pub name: Option, +} + /// The account name flag parser. #[derive(Debug, Default, Parser)] pub struct AccountNameFlag { diff --git a/src/account/command/sync.rs b/src/account/command/sync.rs index cf136ac..5888263 100644 --- a/src/account/command/sync.rs +++ b/src/account/command/sync.rs @@ -13,7 +13,7 @@ use std::{ }; use crate::{ - account::arg::name::AccountNameArg, backend::BackendBuilder, config::TomlConfig, + account::arg::name::OptionalAccountNameArg, backend::BackendBuilder, config::TomlConfig, printer::Printer, }; @@ -40,7 +40,7 @@ const SUB_PROGRESS_DONE_STYLE: Lazy = Lazy::new(|| { #[derive(Debug, Parser)] pub struct AccountSyncCommand { #[command(flatten)] - pub account: AccountNameArg, + pub account: OptionalAccountNameArg, /// Run the synchronization without applying any changes. /// @@ -95,9 +95,10 @@ impl AccountSyncCommand { None }; - let (toml_account_config, account_config) = config - .clone() - .into_account_configs(Some(self.account.name.as_str()), true)?; + let account = self.account.name.as_ref().map(String::as_str); + let (toml_account_config, account_config) = + config.clone().into_account_configs(account, true)?; + let account_name = account_config.name.as_str(); let backend_builder = BackendBuilder::new(toml_account_config, account_config.clone(), false).await?; @@ -128,15 +129,11 @@ impl AccountSyncCommand { } printer.print(format!( - "Estimated patch length for account {} to be synchronized: {hunks_count}", - self.account.name + "Estimated patch length for account {account_name} to be synchronized: {hunks_count}" ))?; } else if printer.is_json() { sync_builder.sync().await?; - printer.print(format!( - "Account {} successfully synchronized!", - self.account.name - ))?; + printer.print(format!("Account {account_name} successfully synchronized!"))?; } else { let multi = MultiProgress::new(); let sub_progresses = Mutex::new(HashMap::new()); @@ -247,10 +244,7 @@ impl AccountSyncCommand { ))?; } - printer.print(format!( - "Account {} successfully synchronized!", - self.account.name - ))?; + printer.print(format!("Account {account_name} successfully synchronized!"))?; } Ok(()) diff --git a/src/cache/mod.rs b/src/cache/mod.rs index ed6d4ad..0a4e67e 100644 --- a/src/cache/mod.rs +++ b/src/cache/mod.rs @@ -36,7 +36,7 @@ impl IdMapper { } pub fn new(account_config: &AccountConfig, folder: &str, db_path: PathBuf) -> Result { - let folder = account_config.get_folder_alias(folder)?; + let folder = account_config.get_folder_alias(folder); let digest = md5::compute(account_config.name.clone() + &folder); let table = format!("id_mapper_{digest:x}"); debug!("creating id mapper table {table} at {db_path:?}…"); diff --git a/src/email/message/command/send.rs b/src/email/message/command/send.rs index 1efceca..0bde172 100644 --- a/src/email/message/command/send.rs +++ b/src/email/message/command/send.rs @@ -1,6 +1,6 @@ use anyhow::Result; use clap::Parser; -use email::flag::Flag; +use email::{flag::Flag, folder::SENT}; use log::info; use std::io::{self, BufRead, IsTerminal}; @@ -35,7 +35,6 @@ impl MessageSendCommand { let (toml_account_config, account_config) = config.clone().into_account_configs(account, cache)?; let backend = Backend::new(toml_account_config, account_config.clone(), true).await?; - let folder = account_config.get_sent_folder_alias()?; let is_tty = io::stdin().is_terminal(); let is_json = printer.is_json(); @@ -54,10 +53,9 @@ impl MessageSendCommand { if account_config.should_save_copy_sent_message() { backend - .add_raw_message_with_flag(&folder, msg.as_bytes(), Flag::Seen) + .add_raw_message_with_flag(SENT, msg.as_bytes(), Flag::Seen) .await?; - - printer.print(format!("Message successfully sent and saved to {folder}!")) + printer.print("Message successfully sent and saved to the Sent folder!") } else { printer.print("Message successfully sent!") } diff --git a/src/email/message/template/command/send.rs b/src/email/message/template/command/send.rs index f732212..dfa6a4d 100644 --- a/src/email/message/template/command/send.rs +++ b/src/email/message/template/command/send.rs @@ -1,6 +1,6 @@ use anyhow::Result; use clap::Parser; -use email::flag::Flag; +use email::{flag::Flag, folder::SENT}; use log::info; use mml::MmlCompilerBuilder; use std::io::{self, BufRead, IsTerminal}; @@ -38,7 +38,6 @@ impl TemplateSendCommand { let (toml_account_config, account_config) = config.clone().into_account_configs(account, cache)?; let backend = Backend::new(toml_account_config, account_config.clone(), true).await?; - let folder = account_config.get_sent_folder_alias()?; let is_tty = io::stdin().is_terminal(); let is_json = printer.is_json(); @@ -65,10 +64,10 @@ impl TemplateSendCommand { if account_config.should_save_copy_sent_message() { backend - .add_raw_message_with_flag(&folder, &msg, Flag::Seen) + .add_raw_message_with_flag(SENT, &msg, Flag::Seen) .await?; - printer.print(format!("Template successfully sent and saved to {folder}!")) + printer.print("Template successfully sent and saved to the Sent folder!") } else { printer.print("Template successfully sent!") } diff --git a/src/folder/arg/name.rs b/src/folder/arg/name.rs index 8b6c515..225c5ac 100644 --- a/src/folder/arg/name.rs +++ b/src/folder/arg/name.rs @@ -1,12 +1,12 @@ use clap::Parser; -use email::account::config::DEFAULT_INBOX_FOLDER; +use email::folder::INBOX; /// The optional folder name flag parser. #[derive(Debug, Parser)] pub struct FolderNameOptionalFlag { /// The name of the folder. #[arg(long = "folder", short = 'f')] - #[arg(name = "folder_name", value_name = "NAME", default_value = DEFAULT_INBOX_FOLDER)] + #[arg(name = "folder_name", value_name = "NAME", default_value = INBOX)] pub name: String, } @@ -14,7 +14,7 @@ pub struct FolderNameOptionalFlag { #[derive(Debug, Parser)] pub struct FolderNameOptionalArg { /// The name of the folder. - #[arg(name = "folder_name", value_name = "FOLDER", default_value = DEFAULT_INBOX_FOLDER)] + #[arg(name = "folder_name", value_name = "FOLDER", default_value = INBOX)] pub name: String, } diff --git a/src/ui/editor.rs b/src/ui/editor.rs index 0df0615..5e3d4e2 100644 --- a/src/ui/editor.rs +++ b/src/ui/editor.rs @@ -3,6 +3,7 @@ use email::{ account::config::AccountConfig, email::utils::{local_draft_path, remove_local_draft}, flag::{Flag, Flags}, + folder::{DRAFTS, SENT}, }; use log::debug; use mml::MmlCompilerBuilder; @@ -90,10 +91,9 @@ pub async fn edit_tpl_with_editor( backend.send_raw_message(&email).await?; if config.should_save_copy_sent_message() { - let sent_folder = config.get_sent_folder_alias()?; - printer.print_log(format!("Adding email to the {} folder…", sent_folder))?; + printer.print_log("Adding email to the Sent folder…")?; backend - .add_raw_message_with_flag(&sent_folder, &email, Flag::Seen) + .add_raw_message_with_flag(SENT, &email, Flag::Seen) .await?; } @@ -120,7 +120,7 @@ pub async fn edit_tpl_with_editor( backend .add_raw_message_with_flags( - "drafts", + DRAFTS, &email, &Flags::from_iter([Flag::Seen, Flag::Draft]), )