On Fri, 2011-09-30 at 15:13 +0200, Ove Kåven wrote:
Den 29. sep. 2011 13:17, skrev Patrick Ohly:
> Here's a possible solution which is perhaps not too hideous:
> 1. introduce a new RECURRENCE-IDS field: an array of time stamps,
> similar to EXDATE
> 2. map it to an iCalendar 2.0 X-SYNCEVOLUTION-RECURRENCE-ID
> property which is only used internally
> 3. the CalDAV backends and ActiveSync backends create such
> properties in the parent VEVENT
> 4. the Synthesis engine passes it through to the Maemo 5 backend
> (thanks to points 1 and 2)
> 5. the Maemo 5 backend treats it like EXDATE when storing
>
> Retrieving an updated parent event from the Maemo 5 backend then will
> add normal EXDATEs to the CalDAV server, which is redundant, but not
> wrong.
>
> How does that sound?
Hmm. I suppose that'd work (though I'd have to learn what APIs to use to
make the backend convert these properties).
Your backend gets an iCalendar VEVENT specifically formatted for it by
the engine. It will be possible to tell the engine that RECURRENCE-IDS
field entries are to be mapped to the regular EXDATE when formatting for
your backend.
Your backend needs to set SynthesisInfo::m_backendRule to a unique
string (MAEMO?) in a specialized version of getSynthesisInfo() and the
iCalendar 2.0 profile needs to take that into account.
It'd perhaps be better if
the added EXDATEs could be automatically stripped later, but if you
don't think they're going to hurt...
Hmm, the inverse operation could strip out redundant EXDATEs again, but
I am not sure whether it is worth the effort.
I've gotten another problem with recurrences, though; after
changing
some stuff around in Google Calendar, including rescheduling a single
instance of a recurrent weekly appointment to a different day, I get the
fatal error "new CalDAV item does not have right RECURRENCE-ID". I
suppose that might also be related to Maemo 5 not storing RECURRENCE-IDs?
Yes, that should be it.
The code is in CalDAVSource::insertSubItem() in CalDAVSource.cpp:
if (subid != knownSubID) {
SE_THROW("new CalDAV item does not have right
RECURRENCE-ID");
}
I bet subid is empty here. Instead of bailing out, the CalDAV source
could attempt to silently restore the right icalproperty. It's a bit
tricky because the knownSubID is the date-time value without the
corresponding time zone (like EDS does it). One would have to find the
dtstart of the parent event and use its time zone + TZID.
--
Best Regards, Patrick Ohly
The content of this message is my personal opinion only and although
I am an employee of Intel, the statements I make here in no way
represent Intel's position on the issue, nor am I authorized to speak
on behalf of Intel on this matter.