From cc994df4e5ef863b824a7b3aed5bda709266eb44 Mon Sep 17 00:00:00 2001 From: Bill Thiede Date: Tue, 19 Aug 2025 11:09:30 -0700 Subject: [PATCH] server: only render text/calendar summary table on calendar invites --- server/src/email_extract.rs | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/server/src/email_extract.rs b/server/src/email_extract.rs index ef868aa..b77a0dc 100644 --- a/server/src/email_extract.rs +++ b/server/src/email_extract.rs @@ -328,12 +328,6 @@ pub fn extract_alternative( return extract_related(sp, part_addr); } } - for sp in &m.subparts { - if sp.ctype.mimetype.as_str() == TEXT_HTML { - let body = sp.get_body()?; - return Ok(Body::html(body)); - } - } for sp in &m.subparts { if sp.ctype.mimetype.as_str() == TEXT_CALENDAR { let body = sp.get_body()?; @@ -341,6 +335,12 @@ pub fn extract_alternative( return Ok(Body::html(summary)); } } + for sp in &m.subparts { + if sp.ctype.mimetype.as_str() == TEXT_HTML { + let body = sp.get_body()?; + return Ok(Body::html(body)); + } + } for sp in &m.subparts { if sp.ctype.mimetype.as_str() == TEXT_PLAIN { let body = sp.get_body()?; @@ -1299,7 +1299,7 @@ pub fn render_ical_summary(ical_data: &str) -> Result { } } } - }, + } _ => {} } } @@ -1324,10 +1324,10 @@ pub fn render_ical_summary(ical_data: &str) -> Result { } fn parse_ical_datetime(dt: &str) -> Option { - use chrono::{NaiveDateTime, DateTime, Utc}; + use chrono::{DateTime, NaiveDateTime, Utc}; let dt = dt.split(':').last().unwrap_or(dt); if let Ok(ndt) = NaiveDateTime::parse_from_str(dt, "%Y%m%dT%H%M%SZ") { - let dt_utc: DateTime = DateTime::from_utc(ndt, Utc); + let dt_utc: DateTime = TimeZone::from_utc_datetime(&Utc, &ndt); return Some(dt_utc.format("%Y-%m-%dT%H:%M:%SZ").to_string()); } if let Ok(ndt) = NaiveDateTime::parse_from_str(dt, "%Y%m%dT%H%M%S") { @@ -1372,12 +1372,12 @@ mod tests { #[test] fn test_ical_render_2() { - let ical = fs::read_to_string("testdata/ical-example-2.ics").unwrap(); - let html = render_ical_summary(&ical).unwrap(); - println!("HTML OUTPUT: {}", html); - assert!(html.contains("Summary: [tenative] dinner w/ amatute
")); - assert!(html.contains("Start: 2025-08-13T01:00:00Z
")); - assert!(html.contains("End: 2025-08-13T03:00:00Z
")); - assert!(html.contains("Organizer: Family
")); + let ical = fs::read_to_string("testdata/ical-example-2.ics").unwrap(); + let html = render_ical_summary(&ical).unwrap(); + println!("HTML OUTPUT: {}", html); + assert!(html.contains("Summary: [tenative] dinner w/ amatute
")); + assert!(html.contains("Start: 2025-08-13T01:00:00Z
")); + assert!(html.contains("End: 2025-08-13T03:00:00Z
")); + assert!(html.contains("Organizer: Family
")); } }