From 8de7d33007ce45bdac4d753152792fc59b916d8c Mon Sep 17 00:00:00 2001 From: Gabriel Kaszewski Date: Sun, 12 Jul 2026 15:24:50 +0200 Subject: [PATCH] fix: iCal duration parser tracks seconds, rounds up to minutes --- crates/domain/src/services/ical.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/crates/domain/src/services/ical.rs b/crates/domain/src/services/ical.rs index 60ff60a..c7c3b7f 100644 --- a/crates/domain/src/services/ical.rs +++ b/crates/domain/src/services/ical.rs @@ -305,7 +305,7 @@ fn parse_duration(s: &str) -> DomainResult { ))); } let body = &s[2..]; - let mut total_mins: u32 = 0; + let mut total_secs: u32 = 0; let mut num_buf = String::new(); for c in body.chars() { @@ -317,9 +317,9 @@ fn parse_duration(s: &str) -> DomainResult { })?; num_buf.clear(); match c { - 'H' => total_mins += n * 60, - 'M' => total_mins += n, - 'S' => total_mins += n / 60, + 'H' => total_secs += n * 3600, + 'M' => total_secs += n * 60, + 'S' => total_secs += n, _ => { return Err(crate::DomainError::validation(format!( "unknown DURATION unit '{c}' in: {s}" @@ -328,6 +328,7 @@ fn parse_duration(s: &str) -> DomainResult { } } } + let total_mins = (total_secs + 59) / 60; if total_mins == 0 { return Err(crate::DomainError::validation(format!( "zero DURATION: {s}"