ui: add "application/pgp-signature" content type

pull/234/head
Manos Pitsidianakis 5 years ago
parent 4c88422d71
commit a0b1a079b8
No known key found for this signature in database
GPG Key ID: 73627C2F690DF710

@ -80,6 +80,7 @@ pub enum MultipartType {
Mixed, Mixed,
Alternative, Alternative,
Digest, Digest,
Signed,
} }
impl Default for MultipartType { impl Default for MultipartType {
@ -94,6 +95,7 @@ impl Display for MultipartType {
MultipartType::Mixed => write!(f, "multipart/mixed"), MultipartType::Mixed => write!(f, "multipart/mixed"),
MultipartType::Alternative => write!(f, "multipart/alternative"), MultipartType::Alternative => write!(f, "multipart/alternative"),
MultipartType::Digest => write!(f, "multipart/digest"), MultipartType::Digest => write!(f, "multipart/digest"),
MultipartType::Signed => write!(f, "multipart/signed"),
} }
} }
} }
@ -110,6 +112,7 @@ pub enum ContentType {
subattachments: Vec<Attachment>, subattachments: Vec<Attachment>,
}, },
MessageRfc822, MessageRfc822,
PGPSignature,
Unsupported { Unsupported {
tag: Vec<u8>, tag: Vec<u8>,
}, },
@ -130,6 +133,7 @@ impl Display for ContentType {
ContentType::Text { kind: t, .. } => t.fmt(f), ContentType::Text { kind: t, .. } => t.fmt(f),
ContentType::Multipart { kind: k, .. } => k.fmt(f), ContentType::Multipart { kind: k, .. } => k.fmt(f),
ContentType::Unsupported { tag: ref t } => write!(f, "{}", String::from_utf8_lossy(t)), 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"), ContentType::MessageRfc822 => write!(f, "message/rfc822"),
} }
} }

@ -95,6 +95,8 @@ impl AttachmentBuilder {
MultipartType::Alternative MultipartType::Alternative
} else if cst.eq_ignore_ascii_case(b"digest") { } else if cst.eq_ignore_ascii_case(b"digest") {
MultipartType::Digest MultipartType::Digest
} else if cst.eq_ignore_ascii_case(b"signed") {
MultipartType::Signed
} else { } else {
Default::default() Default::default()
}, },
@ -134,6 +136,10 @@ impl AttachmentBuilder {
} else if ct.eq_ignore_ascii_case(b"message") && cst.eq_ignore_ascii_case(b"rfc822") } else if ct.eq_ignore_ascii_case(b"message") && cst.eq_ignore_ascii_case(b"rfc822")
{ {
self.content_type = ContentType::MessageRfc822; 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 { } else {
let mut tag: Vec<u8> = Vec::with_capacity(ct.len() + cst.len() + 1); let mut tag: Vec<u8> = Vec::with_capacity(ct.len() + cst.len() + 1);
tag.extend(ct); tag.extend(ct);
@ -260,6 +266,7 @@ impl fmt::Display for Attachment {
), ),
Err(e) => write!(f, "{}", e), Err(e) => write!(f, "{}", e),
}, },
ContentType::PGPSignature => write!(f, "pgp signature {}", self.mime_type()),
ContentType::Unsupported { .. } => { ContentType::Unsupported { .. } => {
write!(f, "Data attachment of type {}", self.mime_type()) write!(f, "Data attachment of type {}", self.mime_type())
} }
@ -387,6 +394,15 @@ impl Attachment {
} }
return true; 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 { ContentType::Multipart {
ref subattachments, .. ref subattachments, ..
} => 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 { let ret = match a.content_type {
ContentType::Unsupported { .. } => Vec::new(), ContentType::Unsupported { .. } => Vec::new(),
ContentType::Text { .. } => decode_helper(a, filter), 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::MessageRfc822 => decode_rec(&decode_rfc822(&a.raw), None),
ContentType::Multipart { ContentType::Multipart {
ref kind, ref kind,

@ -200,13 +200,14 @@ impl MailView {
match self.mode { match self.mode {
ViewMode::Normal | ViewMode::Subview => { ViewMode::Normal | ViewMode::Subview => {
let mut t = body_text.to_string(); let mut t = body_text.to_string();
t.push('\n');
if body.count_attachments() > 1 { if body.count_attachments() > 1 {
t = body t = body
.attachments() .attachments()
.iter() .iter()
.enumerate() .enumerate()
.fold(t, |mut s, (idx, a)| { .fold(t, |mut s, (idx, a)| {
s.push_str(&format!("[{}] {}\n\n", idx, a)); s.push_str(&format!("\n[{}] {}\n", idx, a));
s s
}); });
} }
@ -660,6 +661,14 @@ impl Component for MailView {
return true; return true;
} }
} }
ContentType::PGPSignature => {
context.replies.push_back(UIEvent::StatusEvent(
StatusEvent::DisplayMessage(
"Signatures aren't supported yet".to_string(),
),
));
return true;
}
} }
} else { } else {
context.replies.push_back(UIEvent::StatusEvent( context.replies.push_back(UIEvent::StatusEvent(

@ -459,6 +459,14 @@ impl Component for EnvelopeView {
return true; return true;
} }
} }
ContentType::PGPSignature => {
context.replies.push_back(UIEvent::StatusEvent(
StatusEvent::DisplayMessage(
"Signatures aren't supported yet".to_string(),
),
));
return true;
}
} }
} else { } else {
context.replies.push_back(UIEvent::StatusEvent( context.replies.push_back(UIEvent::StatusEvent(

Loading…
Cancel
Save