TowyTowy e557c0cd5e 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>
2026-07-11 15:58:39 +02:00
2021-12-14 00:25:31 +01:00
2021-12-14 00:25:31 +01:00
2022-07-02 23:03:19 +02:00
2026-04-02 23:43:35 +02:00
2022-07-02 23:03:19 +02:00
2025-03-14 21:32:38 +01:00
2025-04-23 21:50:59 +02:00
2024-08-27 17:04:15 +02:00
2025-06-29 00:47:26 -06:00
2026-01-05 07:28:24 +01:00
2026-07-07 07:23:17 +02:00

Radicale

Test Coverage Status

Radicale is a small but powerful CalDAV (calendars, to-do lists) and CardDAV (contacts) server, that:

  • Shares calendars and contact lists through CalDAV, CardDAV and HTTP.
  • Supports events, todos, journal entries and business cards.
  • Works out-of-the-box, no complicated setup or configuration required.
  • Can limit access by authentication.
  • Can secure connections with TLS.
  • Works with many CalDAV and CardDAV clients
  • Stores all data on the file system in a simple folder structure.
  • Can be extended with plugins.
  • Is GPLv3-licensed free software.

For the complete documentation, please visit Radicale master Documentation.

Additional hints can be found

Before reporting an issue, please check

Description
No description provided
Readme 5.9 MiB
Languages
Python 87.4%
JavaScript 9.8%
HTML 1.1%
CSS 0.9%
Perl 0.8%