diff options
author | Manos Pitsidianakis <el13635@mail.ntua.gr> | 2019-04-06 08:57:00 +0300 |
---|---|---|
committer | Manos Pitsidianakis <el13635@mail.ntua.gr> | 2019-06-10 19:40:43 +0300 |
commit | a29e39f5ef6f033b9ecf49006713d5964950b602 (patch) | |
tree | 5b268e2f380535ed5d6c76f5e1d6e04e7ce92bda | |
parent | d9a3b03e2b9c18c91dfbd0154fdbd7009a32cf82 (diff) |
ui: fix `editing messages duplicates headers`
closes #94
-rw-r--r-- | melib/src/mailbox/email/compose.rs | 13 |
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, } |