todoman
todoman copied to clipboard
Cannot handle recurring events managed elsewhere
Whenever someone in our team uses e.g. Thunderbird to mark the current iteration of a recurrent task as "done", todoman won't any longer be able to do anything to this taskitem:
Todo is in read-only mode because there are multiple todos in /home/madduck/.var/vdirsyncer/kiddiecal/calendar.ics/[email protected].
This is because the way recurrent TODOs seem to work is that there's a master event, and then Thunderbird adds additional VTODO stanzas with STATUS:COMPLETED to the same file/recordset.
Does Thunderbird operate on the same local files directly, or are you using CalDAV and then downloading the calendars locally?
As far as I understand, vdirsyncer should not download multiple todos into a single file.
If thunderbird is operating on the same directory as todoman, there may be a conflict; vdirs must contain one entry per file, and supporting multiple ones per file on our end is something that would kinda break compat with vdirsyncer.
Recurrent vtodos and vevents are in one file because they have the same uid. This is a given by caldav
To be clear, those additional vtodos represent exceptions to the recurrence. For example, all recurrent todos may be incomplete by default and the exceptions are marked completed
Huh, I was unaware that recurring events were handled that way. It makes sense for recurring TODOS to be handled similarly (as Thunderbird does).
I'll have to do some careful thinking as to how we handle that. Thanks for the pointers.
Recurring events in iCalendar files can be handled either of two ways: add additional VEVENT components with the same UID and a RECURRENCE-ID indicating which recurrence you’re talking about, and that VEVENT can then change the properties for that recurrence; or edit the original VEVENT block by adding EXDATE and RDATE properties. Of course the latter can’t do everything (e.g. it can’t change the duration or description, only cancel instances or add new start times).
I don’t know how tasks are handled by other applications (I’ve only really done much iCalendar stuff with events, not todos), but just creating a new task with no connection to the original, as todoman does right now, doesn’t seem ideal. RFC 5545 states that the recurid production is allowed in a todo component, so this seems like a reasonable way to change a property (namely the STATUS and PERCENT-COMPLETE properties) of a specific recurrence of a recurring task.