From 28812eab06ae6a4ab1b8e7b83b6ba72838695a9a Mon Sep 17 00:00:00 2001 From: Chawye Hsu Date: Mon, 19 Apr 2021 17:26:28 +0800 Subject: [PATCH] improve config compatibility on windows (#111) * fix: fix config loading compatibility on Windows Signed-off-by: Chawye Hsu * more strictly on matching crlf chars * use conditional assignment --- src/config/model.rs | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/config/model.rs b/src/config/model.rs index 65d8f58..7a4e686 100644 --- a/src/config/model.rs +++ b/src/config/model.rs @@ -47,7 +47,9 @@ impl Account { pub fn imap_passwd(&self) -> Result { let passwd = run_cmd(&self.imap_passwd_cmd).chain_err(|| "Cannot run IMAP passwd cmd")?; - let passwd = passwd.trim_end_matches("\n").to_owned(); + let passwd = passwd + .trim_end_matches(|c| c == '\r' || c == '\n') + .to_owned(); Ok(passwd) } @@ -68,7 +70,9 @@ impl Account { pub fn smtp_creds(&self) -> Result { let passwd = run_cmd(&self.smtp_passwd_cmd).chain_err(|| "Cannot run SMTP passwd cmd")?; - let passwd = passwd.trim_end_matches("\n").to_owned(); + let passwd = passwd + .trim_end_matches(|c| c == '\r' || c == '\n') + .to_owned(); Ok(SmtpCredentials::new(self.smtp_login.to_owned(), passwd)) } @@ -115,8 +119,14 @@ impl Config { } fn path_from_xdg_alt() -> Result { - let path = env::var("HOME").chain_err(|| "Cannot find `HOME` env var")?; - let mut path = PathBuf::from(path); + let home_var = if cfg!(target_family = "windows") { + "USERPROFILE" + } else { + "HOME" + }; + let mut path: PathBuf = env::var(home_var) + .chain_err(|| format!("Cannot find `{}` env var", home_var))? + .into(); path.push(".config"); path.push("himalaya"); path.push("config.toml"); @@ -125,8 +135,14 @@ impl Config { } fn path_from_home() -> Result { - let path = env::var("HOME").chain_err(|| "Cannot find `HOME` env var")?; - let mut path = PathBuf::from(path); + let home_var = if cfg!(target_family = "windows") { + "USERPROFILE" + } else { + "HOME" + }; + let mut path: PathBuf = env::var(home_var) + .chain_err(|| format!("Cannot find `{}` env var", home_var))? + .into(); path.push(".himalayarc"); Ok(path)