fix panic when downloads-dir does not exist (#100)

This commit is contained in:
Clément DOUIN 2021-04-16 00:00:00 +02:00
parent 33185dba86
commit 2f018889e0
No known key found for this signature in database
GPG key ID: 69C9B9CFFDEE2DEF
3 changed files with 16 additions and 14 deletions

View file

@ -10,6 +10,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed
- Save msg upon error [#59]
- Answered flag not set [#50]
- Panic when downloads-dir does not exist [#100]
### Changed
@ -154,6 +156,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
[#39]: https://github.com/soywod/himalaya/issues/39
[#40]: https://github.com/soywod/himalaya/issues/40
[#41]: https://github.com/soywod/himalaya/issues/41
[#50]: https://github.com/soywod/himalaya/issues/50
[#58]: https://github.com/soywod/himalaya/issues/58
[#59]: https://github.com/soywod/himalaya/issues/59
[#61]: https://github.com/soywod/himalaya/issues/61
@ -164,3 +167,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
[#83]: https://github.com/soywod/himalaya/issues/83
[#87]: https://github.com/soywod/himalaya/issues/87
[#89]: https://github.com/soywod/himalaya/issues/89
[#100]: https://github.com/soywod/himalaya/issues/100

View file

@ -160,15 +160,12 @@ impl Config {
}
pub fn downloads_filepath(&self, account: &Account, filename: &str) -> PathBuf {
let temp_dir = env::temp_dir();
let mut full_path = account
account
.downloads_dir
.as_ref()
.unwrap_or(self.downloads_dir.as_ref().unwrap_or(&temp_dir))
.to_owned();
full_path.push(filename);
full_path
.unwrap_or(self.downloads_dir.as_ref().unwrap_or(&env::temp_dir()))
.to_owned()
.join(filename)
}
pub fn address(&self, account: &Account) -> String {

View file

@ -258,24 +258,25 @@ pub fn msg_matches(matches: &ArgMatches) -> Result<()> {
}
if let Some(matches) = matches.subcommand_matches("attachments") {
debug!("Subcommand matched: attachments");
debug!("[msg::cli] subcommand matched: attachments");
let mut imap_conn = ImapConnector::new(&account)?;
let uid = matches.value_of("uid").unwrap();
debug!("UID: {}", &uid);
debug!("[msg::cli] uid: {}", &uid);
let msg = imap_conn.read_msg(&mbox, &uid)?;
let attachments = Attachments::from_bytes(&msg)?;
debug!(
"{} attachment(s) found for message {}",
"[msg::cli] {} attachment(s) found for message {}",
&attachments.0.len(),
&uid
);
attachments.0.iter().for_each(|attachment| {
for attachment in attachments.0.iter() {
let filepath = config.downloads_filepath(&account, &attachment.filename);
debug!("Downloading {}…", &attachment.filename);
fs::write(filepath, &attachment.raw).unwrap()
});
debug!("[msg::cli] downloading {}…", &attachment.filename);
fs::write(&filepath, &attachment.raw)
.chain_err(|| format!("Could not save attachment {:?}", filepath))?;
}
info!(&format!(
"{} attachment(s) successfully downloaded",
&attachments.0.len()