server: render calendar summary before any pre-existing text
This commit is contained in:
@@ -12,6 +12,7 @@ version.workspace = true
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
html2text = "0.6"
|
||||
ammonia = "4.1.0"
|
||||
anyhow = "1.0.98"
|
||||
askama = { version = "0.14.0", features = ["derive"] }
|
||||
|
||||
@@ -328,25 +328,43 @@ pub fn extract_alternative(
|
||||
return extract_related(sp, part_addr);
|
||||
}
|
||||
}
|
||||
let mut ical_summary: Option<String> = None;
|
||||
for sp in &m.subparts {
|
||||
if sp.ctype.mimetype.as_str() == TEXT_CALENDAR {
|
||||
let body = sp.get_body()?;
|
||||
let summary = render_ical_summary(&body)?;
|
||||
return Ok(Body::html(summary));
|
||||
ical_summary = Some(summary);
|
||||
break;
|
||||
}
|
||||
}
|
||||
for sp in &m.subparts {
|
||||
if sp.ctype.mimetype.as_str() == TEXT_HTML {
|
||||
let body = sp.get_body()?;
|
||||
return Ok(Body::html(body));
|
||||
if let Some(ref summary) = ical_summary {
|
||||
// Prepend summary to HTML body
|
||||
let combined = format!("{}<hr>{}", summary, body);
|
||||
return Ok(Body::html(combined));
|
||||
} else {
|
||||
return Ok(Body::html(body));
|
||||
}
|
||||
}
|
||||
}
|
||||
for sp in &m.subparts {
|
||||
if sp.ctype.mimetype.as_str() == TEXT_PLAIN {
|
||||
let body = sp.get_body()?;
|
||||
return Ok(Body::text(body));
|
||||
if let Some(ref summary) = ical_summary {
|
||||
// Prepend summary to plain text body (strip HTML tags)
|
||||
let summary_text = html2text::from_read(summary.as_bytes(), 80);
|
||||
let combined = format!("{}\n\n{}", summary_text.trim(), body);
|
||||
return Ok(Body::text(combined));
|
||||
} else {
|
||||
return Ok(Body::text(body));
|
||||
}
|
||||
}
|
||||
}
|
||||
if let Some(summary) = ical_summary {
|
||||
return Ok(Body::html(summary));
|
||||
}
|
||||
Err(ServerError::StringError(format!(
|
||||
"extract_alternative failed to find suitable subpart, searched: {:?}",
|
||||
handled_types
|
||||
|
||||
Reference in New Issue
Block a user