mirror of
https://github.com/soywod/himalaya.git
synced 2024-07-08 18:45:13 +00:00
check for absolute and relative maildir paths
This commit is contained in:
parent
d79c6c40a7
commit
1f01202262
|
@ -47,13 +47,16 @@ impl<'a> MaildirBackend<'a> {
|
||||||
self.validate_mdir_path(self.mdir.path().to_owned())
|
self.validate_mdir_path(self.mdir.path().to_owned())
|
||||||
.map(maildir::Maildir::from)
|
.map(maildir::Maildir::from)
|
||||||
} else {
|
} else {
|
||||||
// If the dir is a valid maildir path, creates a maildir instance from it.
|
// If the dir is a valid maildir path, creates a maildir
|
||||||
|
// instance from it. Checks for absolute path first,
|
||||||
self.validate_mdir_path(dir.into())
|
self.validate_mdir_path(dir.into())
|
||||||
|
// then for relative path,
|
||||||
|
.or_else(|_| self.validate_mdir_path(self.mdir.path().join(dir)))
|
||||||
.or_else(|_| {
|
.or_else(|_| {
|
||||||
// Otherwise creates a maildir instance from a
|
// otherwise creates a maildir instance from a
|
||||||
// maildir subdirectory by adding a "." in front
|
// maildir subdirectory by adding a "." in front
|
||||||
// of the name as described in the spec:
|
// of the name as described in the spec:
|
||||||
// https://cr.yp.to/proto/maildir.html
|
// https://cr.yp.to/proto/maildir.html.
|
||||||
let dir = self
|
let dir = self
|
||||||
.account_config
|
.account_config
|
||||||
.mailboxes
|
.mailboxes
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
use anyhow::{anyhow, Context, Error, Result};
|
use anyhow::{anyhow, Context, Error, Result};
|
||||||
use chrono::DateTime;
|
use chrono::DateTime;
|
||||||
use log::{debug, info, trace};
|
use log::trace;
|
||||||
use std::{
|
use std::{
|
||||||
convert::{TryFrom, TryInto},
|
convert::{TryFrom, TryInto},
|
||||||
ops::{Deref, DerefMut},
|
ops::{Deref, DerefMut},
|
||||||
|
@ -125,7 +125,7 @@ impl<'a> TryFrom<RawMaildirEnvelope> for MaildirEnvelope {
|
||||||
type Error = Error;
|
type Error = Error;
|
||||||
|
|
||||||
fn try_from(mut mail_entry: RawMaildirEnvelope) -> Result<Self, Self::Error> {
|
fn try_from(mut mail_entry: RawMaildirEnvelope) -> Result<Self, Self::Error> {
|
||||||
info!("begin: try building envelope from maildir parsed mail");
|
trace!(">> build envelope from maildir parsed mail");
|
||||||
|
|
||||||
let mut envelope = Self::default();
|
let mut envelope = Self::default();
|
||||||
|
|
||||||
|
@ -139,14 +139,14 @@ impl<'a> TryFrom<RawMaildirEnvelope> for MaildirEnvelope {
|
||||||
.parsed()
|
.parsed()
|
||||||
.context("cannot parse maildir mail entry")?;
|
.context("cannot parse maildir mail entry")?;
|
||||||
|
|
||||||
debug!("begin: parse headers");
|
trace!(">> parse headers");
|
||||||
for h in parsed_mail.get_headers() {
|
for h in parsed_mail.get_headers() {
|
||||||
let k = h.get_key();
|
let k = h.get_key();
|
||||||
debug!("header key: {:?}", k);
|
trace!("header key: {:?}", k);
|
||||||
|
|
||||||
let v = rfc2047_decoder::decode(h.get_value_raw())
|
let v = rfc2047_decoder::decode(h.get_value_raw())
|
||||||
.context(format!("cannot decode value from header {:?}", k))?;
|
.context(format!("cannot decode value from header {:?}", k))?;
|
||||||
debug!("header value: {:?}", v);
|
trace!("header value: {:?}", v);
|
||||||
|
|
||||||
match k.to_lowercase().as_str() {
|
match k.to_lowercase().as_str() {
|
||||||
"date" => {
|
"date" => {
|
||||||
|
@ -182,10 +182,10 @@ impl<'a> TryFrom<RawMaildirEnvelope> for MaildirEnvelope {
|
||||||
_ => (),
|
_ => (),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
debug!("end: parse headers");
|
trace!("<< parse headers");
|
||||||
|
|
||||||
trace!("envelope: {:?}", envelope);
|
trace!("envelope: {:?}", envelope);
|
||||||
info!("end: try building envelope from maildir parsed mail");
|
trace!("<< build envelope from maildir parsed mail");
|
||||||
Ok(envelope)
|
Ok(envelope)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue