mirror of
https://github.com/soywod/himalaya.git
synced 2025-04-16 22:33:36 +00:00
improve folder alias management
This commit is contained in:
parent
bcef05a54c
commit
6942c59097
8 changed files with 37 additions and 33 deletions
2
Cargo.lock
generated
2
Cargo.lock
generated
|
@ -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",
|
||||
|
|
|
@ -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<String>,
|
||||
}
|
||||
|
||||
/// The account name flag parser.
|
||||
#[derive(Debug, Default, Parser)]
|
||||
pub struct AccountNameFlag {
|
||||
|
|
|
@ -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<ProgressStyle> = 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(())
|
||||
|
|
2
src/cache/mod.rs
vendored
2
src/cache/mod.rs
vendored
|
@ -36,7 +36,7 @@ impl IdMapper {
|
|||
}
|
||||
|
||||
pub fn new(account_config: &AccountConfig, folder: &str, db_path: PathBuf) -> Result<Self> {
|
||||
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:?}…");
|
||||
|
|
|
@ -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!")
|
||||
}
|
||||
|
|
|
@ -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!")
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
||||
|
|
|
@ -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<P: Printer>(
|
|||
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<P: Printer>(
|
|||
|
||||
backend
|
||||
.add_raw_message_with_flags(
|
||||
"drafts",
|
||||
DRAFTS,
|
||||
&email,
|
||||
&Flags::from_iter([Flag::Seen, Flag::Draft]),
|
||||
)
|
||||
|
|
Loading…
Add table
Reference in a new issue