ui: add "application/pgp-signature" content type
parent
4c88422d71
commit
a0b1a079b8
|
@ -80,6 +80,7 @@ pub enum MultipartType {
|
|||
Mixed,
|
||||
Alternative,
|
||||
Digest,
|
||||
Signed,
|
||||
}
|
||||
|
||||
impl Default for MultipartType {
|
||||
|
@ -94,6 +95,7 @@ impl Display for MultipartType {
|
|||
MultipartType::Mixed => write!(f, "multipart/mixed"),
|
||||
MultipartType::Alternative => write!(f, "multipart/alternative"),
|
||||
MultipartType::Digest => write!(f, "multipart/digest"),
|
||||
MultipartType::Signed => write!(f, "multipart/signed"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -110,6 +112,7 @@ pub enum ContentType {
|
|||
subattachments: Vec<Attachment>,
|
||||
},
|
||||
MessageRfc822,
|
||||
PGPSignature,
|
||||
Unsupported {
|
||||
tag: Vec<u8>,
|
||||
},
|
||||
|
@ -130,6 +133,7 @@ impl Display for ContentType {
|
|||
ContentType::Text { kind: t, .. } => t.fmt(f),
|
||||
ContentType::Multipart { kind: k, .. } => k.fmt(f),
|
||||
ContentType::Unsupported { tag: ref t } => write!(f, "{}", String::from_utf8_lossy(t)),
|
||||
ContentType::PGPSignature => write!(f, "application/pgp-signature"),
|
||||
ContentType::MessageRfc822 => write!(f, "message/rfc822"),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -95,6 +95,8 @@ impl AttachmentBuilder {
|
|||
MultipartType::Alternative
|
||||
} else if cst.eq_ignore_ascii_case(b"digest") {
|
||||
MultipartType::Digest
|
||||
} else if cst.eq_ignore_ascii_case(b"signed") {
|
||||
MultipartType::Signed
|
||||
} else {
|
||||
Default::default()
|
||||
},
|
||||
|
@ -134,6 +136,10 @@ impl AttachmentBuilder {
|
|||
} else if ct.eq_ignore_ascii_case(b"message") && cst.eq_ignore_ascii_case(b"rfc822")
|
||||
{
|
||||
self.content_type = ContentType::MessageRfc822;
|
||||
} else if ct.eq_ignore_ascii_case(b"application")
|
||||
&& cst.eq_ignore_ascii_case(b"pgp-signature")
|
||||
{
|
||||
self.content_type = ContentType::PGPSignature;
|
||||
} else {
|
||||
let mut tag: Vec<u8> = Vec::with_capacity(ct.len() + cst.len() + 1);
|
||||
tag.extend(ct);
|
||||
|
@ -260,6 +266,7 @@ impl fmt::Display for Attachment {
|
|||
),
|
||||
Err(e) => write!(f, "{}", e),
|
||||
},
|
||||
ContentType::PGPSignature => write!(f, "pgp signature {}", self.mime_type()),
|
||||
ContentType::Unsupported { .. } => {
|
||||
write!(f, "Data attachment of type {}", self.mime_type())
|
||||
}
|
||||
|
@ -387,6 +394,15 @@ impl Attachment {
|
|||
}
|
||||
return true;
|
||||
}
|
||||
ContentType::Multipart {
|
||||
kind: MultipartType::Signed,
|
||||
ref subattachments,
|
||||
..
|
||||
} => subattachments
|
||||
.iter()
|
||||
.find(|s| s.content_type != ContentType::PGPSignature)
|
||||
.map(|s| s.is_html())
|
||||
.unwrap_or(false),
|
||||
ContentType::Multipart {
|
||||
ref subattachments, ..
|
||||
} => subattachments
|
||||
|
@ -439,6 +455,7 @@ fn decode_rec_helper<'a>(a: &'a Attachment, filter: &mut Option<Filter<'a>>) ->
|
|||
let ret = match a.content_type {
|
||||
ContentType::Unsupported { .. } => Vec::new(),
|
||||
ContentType::Text { .. } => decode_helper(a, filter),
|
||||
ContentType::PGPSignature => a.content_type.to_string().into_bytes(),
|
||||
ContentType::MessageRfc822 => decode_rec(&decode_rfc822(&a.raw), None),
|
||||
ContentType::Multipart {
|
||||
ref kind,
|
||||
|
|
|
@ -200,13 +200,14 @@ impl MailView {
|
|||
match self.mode {
|
||||
ViewMode::Normal | ViewMode::Subview => {
|
||||
let mut t = body_text.to_string();
|
||||
t.push('\n');
|
||||
if body.count_attachments() > 1 {
|
||||
t = body
|
||||
.attachments()
|
||||
.iter()
|
||||
.enumerate()
|
||||
.fold(t, |mut s, (idx, a)| {
|
||||
s.push_str(&format!("[{}] {}\n\n", idx, a));
|
||||
s.push_str(&format!("\n[{}] {}\n", idx, a));
|
||||
s
|
||||
});
|
||||
}
|
||||
|
@ -660,6 +661,14 @@ impl Component for MailView {
|
|||
return true;
|
||||
}
|
||||
}
|
||||
ContentType::PGPSignature => {
|
||||
context.replies.push_back(UIEvent::StatusEvent(
|
||||
StatusEvent::DisplayMessage(
|
||||
"Signatures aren't supported yet".to_string(),
|
||||
),
|
||||
));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
context.replies.push_back(UIEvent::StatusEvent(
|
||||
|
|
|
@ -459,6 +459,14 @@ impl Component for EnvelopeView {
|
|||
return true;
|
||||
}
|
||||
}
|
||||
ContentType::PGPSignature => {
|
||||
context.replies.push_back(UIEvent::StatusEvent(
|
||||
StatusEvent::DisplayMessage(
|
||||
"Signatures aren't supported yet".to_string(),
|
||||
),
|
||||
));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
context.replies.push_back(UIEvent::StatusEvent(
|
||||
|
|
Loading…
Reference in New Issue