0e15021c11c6539776011f8f21b380ca18f76617
visit_time_ranges() reuses a single "original_duration" variable for two unrelated purposes: the DTSTART->DUE span and the CREATED->COMPLETED span. When a VTODO carries all four properties (a completed task, which most clients write with CREATED and COMPLETED), the second assignment clobbers the first, and the DTSTART/DUE branch of the rfc4791-9.9 table then reconstructs DUE as DTSTART + (COMPLETED - CREATED). The elif chain already implements the RFC table correctly (DTSTART/DUE take precedence over CREATED/COMPLETED), so the CREATED/COMPLETED value is never wanted there. Keep it in its own variable. Effect: such a VTODO is filtered against a bogus interval, both in calendar-query REPORT and in item.find_time_range() (the enclosing range cached for the storage prefilter), so completed tasks go missing from - or wrongly appear in - client results. Co-Authored-By: Claude <noreply@anthropic.com>
Radicale
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
Languages
Python
87.4%
JavaScript
9.8%
HTML
1.1%
CSS
0.9%
Perl
0.8%