summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManos Pitsidianakis <el13635@mail.ntua.gr>2019-04-06 08:57:00 +0300
committerManos Pitsidianakis <el13635@mail.ntua.gr>2019-06-10 19:40:43 +0300
commita29e39f5ef6f033b9ecf49006713d5964950b602 (patch)
tree5b268e2f380535ed5d6c76f5e1d6e04e7ce92bda
parentd9a3b03e2b9c18c91dfbd0154fdbd7009a32cf82 (diff)
ui: fix `editing messages duplicates headers`
closes #94
-rw-r--r--melib/src/mailbox/email/compose.rs13
1 files changed, 8 insertions, 5 deletions
diff --git a/melib/src/mailbox/email/compose.rs b/melib/src/mailbox/email/compose.rs
index f24f27d3..2c5aa632 100644
--- a/melib/src/mailbox/email/compose.rs
+++ b/melib/src/mailbox/email/compose.rs
@@ -14,8 +14,6 @@ use fnv::FnvHashMap;
#[derive(Debug, PartialEq, Clone)]
pub struct Draft {
- // FIXME: Preserve header order
- // FIXME: Validate headers, allow custom ones
headers: FnvHashMap<String, String>,
header_order: Vec<String>,
body: String,
@@ -97,9 +95,13 @@ impl Draft {
//TODO: Inform user if error
{
let bytes = op.as_bytes().unwrap_or(&[]);
- for (h, v) in envelope.headers(bytes).unwrap_or_else(|_| Vec::new()) {
- ret.header_order.push(h.into());
- ret.headers_mut().insert(h.into(), v.into());
+ for (k, v) in envelope.headers(bytes).unwrap_or_else(|_| Vec::new()) {
+ if ignore_header(k.as_bytes()) {
+ continue;
+ }
+ if ret.headers.insert(k.into(), v.into()).is_none() {
+ ret.header_order.push(k.into());
+ }
}
}
@@ -226,6 +228,7 @@ fn ignore_header(header: &[u8]) -> bool {
b"Bcc" => false,
b"In-Reply-To" => false,
b"References" => false,
+ b"MIME-Version" => true,
h if h.starts_with(b"X-") => false,
_ => true,
}