Fix: time-range filter matches VEVENT with whole-day DURATION
A calendar-query REPORT with a time-range filter failed to return a VEVENT that has a whole-day DURATION (e.g. DURATION:P1D or P2D) whenever the queried range fell inside the event but after DTSTART. The VEVENT time-range logic in radicale/item/filter.py gated the "non-zero duration" branch (rfc4791-9.9 line 2) on timedelta.seconds instead of timedelta.total_seconds(). For a duration that is an exact multiple of 24h, timedelta.seconds is 0 (the days component holds the value), so the event was treated as zero-length (line 3) and only matched a one-second window at its start. An identical event expressed with DTEND matched correctly, confirming the defect is isolated to the DURATION path. Use total_seconds() so multi-day durations are handled correctly. Adds a regression test (event11, DURATION:P2D) covering both an inside-range match and an outside-range non-match. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
11
radicale/tests/static/event11.ics
Normal file
11
radicale/tests/static/event11.ics
Normal file
@@ -0,0 +1,11 @@
|
||||
BEGIN:VCALENDAR
|
||||
VERSION:2.0
|
||||
PRODID:-//Radicale//NONSGML Radicale Server//EN
|
||||
BEGIN:VEVENT
|
||||
DTSTAMP:20130901T000000Z
|
||||
UID:event11
|
||||
SUMMARY:event11
|
||||
DTSTART:20130901T000000Z
|
||||
DURATION:P2D
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
Reference in New Issue
Block a user