melib: Add parameters field in ContentType::Text
Intending to add the option to set the parameter format=flowed in the next commitsmaster
parent
62f3d12253
commit
953c3aa9d0
|
@ -140,6 +140,7 @@ impl From<&[u8]> for MultipartType {
|
|||
pub enum ContentType {
|
||||
Text {
|
||||
kind: Text,
|
||||
parameters: Vec<(Vec<u8>, Vec<u8>)>,
|
||||
charset: Charset,
|
||||
},
|
||||
Multipart {
|
||||
|
@ -162,6 +163,7 @@ impl Default for ContentType {
|
|||
fn default() -> Self {
|
||||
ContentType::Text {
|
||||
kind: Text::Plain,
|
||||
parameters: Vec::new(),
|
||||
charset: Charset::UTF8,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -131,10 +131,7 @@ impl AttachmentBuilder {
|
|||
parts,
|
||||
};
|
||||
} else if ct.eq_ignore_ascii_case(b"text") {
|
||||
self.content_type = ContentType::Text {
|
||||
kind: Text::Plain,
|
||||
charset: Charset::UTF8,
|
||||
};
|
||||
self.content_type = ContentType::default();
|
||||
for (n, v) in params {
|
||||
if n.eq_ignore_ascii_case(b"charset") {
|
||||
if let ContentType::Text {
|
||||
|
@ -143,7 +140,13 @@ impl AttachmentBuilder {
|
|||
{
|
||||
*c = Charset::from(v);
|
||||
}
|
||||
break;
|
||||
}
|
||||
if let ContentType::Text {
|
||||
parameters: ref mut p,
|
||||
..
|
||||
} = self.content_type
|
||||
{
|
||||
p.push((n.to_vec(), v.to_vec()));
|
||||
}
|
||||
}
|
||||
if cst.eq_ignore_ascii_case(b"html") {
|
||||
|
@ -587,11 +590,28 @@ impl Attachment {
|
|||
.chars(),
|
||||
);
|
||||
match &a.content_type {
|
||||
ContentType::Text { kind: _, charset } => {
|
||||
ContentType::Text {
|
||||
kind: _,
|
||||
parameters,
|
||||
charset,
|
||||
} => {
|
||||
ret.extend(
|
||||
format!("Content-Type: {}; charset={}\n\n", a.content_type, charset)
|
||||
.chars(),
|
||||
format!("Content-Type: {}; charset={}", a.content_type, charset).chars(),
|
||||
);
|
||||
for (n, v) in parameters {
|
||||
ret.push_str("; ");
|
||||
ret.extend(String::from_utf8_lossy(n).chars());
|
||||
ret.push_str("=");
|
||||
if v.contains(&b' ') {
|
||||
ret.push_str("\"");
|
||||
}
|
||||
ret.extend(String::from_utf8_lossy(v).chars());
|
||||
if v.contains(&b' ') {
|
||||
ret.push_str("\"");
|
||||
}
|
||||
}
|
||||
|
||||
ret.push_str("\n\n");
|
||||
ret.extend(String::from_utf8_lossy(a.body()).chars());
|
||||
}
|
||||
ContentType::Multipart {
|
||||
|
|
|
@ -329,18 +329,14 @@ fn build_multipart(ret: &mut String, kind: MultipartType, parts: Vec<AttachmentB
|
|||
ContentType::Text {
|
||||
kind: crate::email::attachment_types::Text::Plain,
|
||||
charset: Charset::UTF8,
|
||||
} => {
|
||||
parameters: ref v,
|
||||
} if v.is_empty() => {
|
||||
ret.push('\n');
|
||||
ret.push_str(&String::from_utf8_lossy(sub.raw()));
|
||||
ret.push('\n');
|
||||
}
|
||||
Text {
|
||||
ref kind,
|
||||
charset: _,
|
||||
} => {
|
||||
ret.extend(format!("Content-Type: {}; charset=\"utf-8\"\n", kind).chars());
|
||||
ret.push('\n');
|
||||
ret.push_str(&String::from_utf8_lossy(sub.raw()));
|
||||
Text { .. } => {
|
||||
ret.extend(sub.build().into_raw().chars());
|
||||
ret.push('\n');
|
||||
}
|
||||
Multipart {
|
||||
|
|
Loading…
Reference in New Issue