diff --git a/server/src/email_extract.rs b/server/src/email_extract.rs index 65d23bc..ba3fe02 100644 --- a/server/src/email_extract.rs +++ b/server/src/email_extract.rs @@ -209,15 +209,29 @@ pub fn extract_calendar_metadata_from_mail( use chrono::NaiveDate; let summary_val = summary.as_deref().unwrap_or(""); let organizer_val = organizer.as_deref().unwrap_or(""); + let allday = start_date.as_ref().map(|s| s.len() == 8).unwrap_or(false) + && end_date.as_ref().map(|s| s.len() == 8).unwrap_or(false); let local_fmt_start = start_date .as_ref() .and_then(|d| NaiveDate::parse_from_str(d, "%Y%m%d").ok()) - .map(|d| d.format("%a %b %e, %Y").to_string()) + .map(|d| { + if allday { + d.format("%a %b %e, %Y").to_string() + } else { + d.format("%-I:%M %p %a %b %e, %Y").to_string() + } + }) .unwrap_or_default(); let local_fmt_end = end_date .as_ref() .and_then(|d| NaiveDate::parse_from_str(d, "%Y%m%d").ok()) - .map(|d| d.format("%a %b %e, %Y").to_string()) + .map(|d| { + if allday { + d.format("%a %b %e, %Y").to_string() + } else { + d.format("%-I:%M %p %a %b %e, %Y").to_string() + } + }) .unwrap_or_default(); let mut event_days = vec![]; if let (Some(start), Some(end)) = (start_date.as_ref(), end_date.as_ref()) { @@ -1710,8 +1724,17 @@ pub fn render_ical_summary(ical_data: &str) -> Result { .unwrap_or(start); let local_start = start.with_timezone(&Local); let local_end = end.with_timezone(&Local); - let fmt_start = local_start.format("%c").to_string(); - let fmt_end = local_end.format("%c").to_string(); + let allday = dtstart.len() == 8 && (dtend.map(|s| s.len() == 8).unwrap_or(false)); + let fmt_start = if allday { + local_start.format("%a %b %e, %Y").to_string() + } else { + local_start.format("%-I:%M %p %a %b %e, %Y").to_string() + }; + let fmt_end = if allday { + local_end.format("%a %b %e, %Y").to_string() + } else { + local_end.format("%-I:%M %p %a %b %e, %Y").to_string() + }; let mut days = vec![]; let mut d = start.date_naive(); let mut end_d = end.date_naive();