server: address lint

This commit is contained in:
Bill Thiede 2025-08-19 17:08:53 -07:00
parent 25839328ac
commit 3827f87111
2 changed files with 10 additions and 66 deletions

View File

@ -1687,7 +1687,7 @@ pub fn render_ical_summary(ical_data: &str) -> Result<String, ServerError> {
"DTSTART" => { "DTSTART" => {
dtstart = prop.value.as_deref(); dtstart = prop.value.as_deref();
if let Some(params) = &prop.params { if let Some(params) = &prop.params {
if let Some((k, values)) = params.iter().find(|(k, _)| k == "TZID") { if let Some((_, values)) = params.iter().find(|(k, _)| k == "TZID") {
if let Some(val) = values.get(0) { if let Some(val) = values.get(0) {
tzid = Some(val.clone()); tzid = Some(val.clone());
} }
@ -1716,8 +1716,13 @@ pub fn render_ical_summary(ical_data: &str) -> Result<String, ServerError> {
.unwrap_or("UTC") .unwrap_or("UTC")
.parse() .parse()
.unwrap_or(chrono_tz::UTC); .unwrap_or(chrono_tz::UTC);
let fallback = let fallback = chrono::DateTime::<chrono::Utc>::from_timestamp(0, 0)
tz.from_utc_datetime(&chrono::NaiveDateTime::from_timestamp_opt(0, 0).unwrap()); .map(|dt| dt.with_timezone(&tz))
.unwrap_or_else(|| {
tz.with_ymd_and_hms(1970, 1, 1, 0, 0, 0)
.single()
.unwrap_or_else(|| tz.timestamp_opt(0, 0).single().unwrap())
});
let start = parse_ical_datetime_tz(dtstart, tz).unwrap_or(fallback); let start = parse_ical_datetime_tz(dtstart, tz).unwrap_or(fallback);
let end = dtend let end = dtend
.and_then(|d| parse_ical_datetime_tz(d, tz)) .and_then(|d| parse_ical_datetime_tz(d, tz))
@ -1736,7 +1741,7 @@ pub fn render_ical_summary(ical_data: &str) -> Result<String, ServerError> {
local_end.format("%-I:%M %p %a %b %e, %Y").to_string() local_end.format("%-I:%M %p %a %b %e, %Y").to_string()
}; };
let mut days = vec![]; let mut days = vec![];
let mut d = start.date_naive(); let d = start.date_naive();
let mut end_d = end.date_naive(); let mut end_d = end.date_naive();
// Check for all-day event (DATE, not DATE-TIME) // Check for all-day event (DATE, not DATE-TIME)
let allday = dtstart.len() == 8 && (dtend.map(|s| s.len() == 8).unwrap_or(false)); let allday = dtstart.len() == 8 && (dtend.map(|s| s.len() == 8).unwrap_or(false));
@ -1833,67 +1838,6 @@ pub fn render_ical_summary(ical_data: &str) -> Result<String, ServerError> {
Ok(summary_parts.join("<hr>")) Ok(summary_parts.join("<hr>"))
} }
fn render_merged_calendar_table(event_days: &[NaiveDate]) -> String {
use chrono::Datelike;
let first_event = event_days.first().unwrap();
let last_event = event_days.last().unwrap();
let first_of_month =
NaiveDate::from_ymd_opt(first_event.year(), first_event.month(), 1).unwrap();
let last_of_month = {
let next_month = if last_event.month() == 12 {
NaiveDate::from_ymd_opt(last_event.year() + 1, 1, 1).unwrap()
} else {
NaiveDate::from_ymd_opt(last_event.year(), last_event.month() + 1, 1).unwrap()
};
next_month.pred_opt().unwrap()
};
let mut cal_start = first_of_month;
while cal_start.weekday() != chrono::Weekday::Sun {
cal_start = cal_start.pred_opt().unwrap();
}
let mut cal_end = last_of_month;
while cal_end.weekday() != chrono::Weekday::Sat {
cal_end = cal_end.succ_opt().unwrap();
}
let mut all_days = vec![];
let mut d = cal_start;
while d <= cal_end {
all_days.push(d);
d = d.succ_opt().unwrap();
}
let start_month = first_event.format("%B %Y");
let end_month = last_event.format("%B %Y");
let caption = if start_month.to_string() == end_month.to_string() {
start_month.to_string()
} else {
format!("{} {}", start_month, end_month)
};
let mut calendar_html = String::new();
calendar_html.push_str(&format!(
"<table class='ical-month' style='border-collapse:collapse; min-width:220px; background:#fff; box-shadow:0 2px 8px #bbb; font-size:14px; margin:0;'>"
));
calendar_html.push_str(&format!("<caption style='caption-side:top; text-align:center; font-weight:bold; font-size:16px; padding:8px 0;'>{}</caption>", caption));
calendar_html.push_str("<thead><tr>");
for wd in ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"] {
calendar_html.push_str(&format!("<th style='padding:4px 6px; border-bottom:1px solid #ccc; color:#666; font-weight:600; background:#f7f7f7'>{}</th>", wd));
}
calendar_html.push_str("</tr></thead><tbody>");
for week in all_days.chunks(7) {
calendar_html.push_str("<tr>");
for day in week {
let is_event = event_days.contains(day);
let style = if is_event {
"background:#ffd700; color:#222; font-weight:bold; border:1px solid #aaa; border-radius:4px; text-align:center;"
} else {
"border:1px solid #eee; text-align:center;background:#f7f7f7;color:#bbb;"
};
calendar_html.push_str(&format!("<td style='{}'>{}</td>", style, day.day()));
}
calendar_html.push_str("</tr>");
}
calendar_html.push_str("</tbody></table>");
calendar_html
}
fn parse_ical_datetime_tz(dt: &str, tz: Tz) -> Option<chrono::DateTime<Tz>> { fn parse_ical_datetime_tz(dt: &str, tz: Tz) -> Option<chrono::DateTime<Tz>> {
let dt = dt.split(':').last().unwrap_or(dt); let dt = dt.split(':').last().unwrap_or(dt);

View File

@ -812,6 +812,6 @@ mod tests {
#[test] #[test]
fn test_parse_tls_report_v1() { fn test_parse_tls_report_v1() {
let report: TlsRpt = serde_json::from_str(REPORT_V1).unwrap(); let _report: TlsRpt = serde_json::from_str(REPORT_V1).unwrap();
} }
} }