I have just noticed that events are being corrupted when syncing from
Exchange.
The problem is that when an event changes, EAS can send a "change"
notification, with only the fields that have changed, not the whole new
event. activesyncd then creates a partial (and invalid!) VEVENT with
only the changed fields.
Syncevolution then replaces the event with just the information from the
partial VEVENT, losing all the rest of the information.
To make it clearer, here is an extract from the EAS protocol message
sent when one attendee's status has to be updated for an existing event:
<Change>
<ServerId>1:2170</ServerId>
<ApplicationData>
<Attendees xmlns="Calendar:">
<Attendee>
<Attendee_Email>aaaa(a)example.com</Attendee_Email>
<Attendee_Name>aaaa(a)example.com</Attendee_Name>
<Attendee_Status>4</Attendee_Status>
<Attendee_Type>1</Attendee_Type>
</Attendee>
</Attendees>
</ApplicationData>
</Change>
activesyncd generates:
1:2170
BEGIN:VCALENDAR
PRODID:-//Meego//ActiveSyncD 1.0//EN
VERSION:2.0
METHOD:PUBLISH
BEGIN:VEVENT
ATTENDEE;CN=aaaa(a)example.com;PARTSTAT=DECLINED;ROLE=REQ-PARTICIPANT:
aaaa(a)example.com
END:VEVENT
END:VCALENDAR
And syncevolution ends up replacing the whole event with:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Synthesis AG//NONSGML SyncML Engine V3.4.0.47//EN
BEGIN:VEVENT
LAST-MODIFIED:20150710T132346Z
DTSTAMP:20150710T132346Z
UID:syuid320541.212303337826681
SUMMARY:unnamed
ATTENDEE;CN="aaaa(a)example.com";PARTSTAT=DECLINED;ROLE=REQ-
PARTICIPANT:mailto:aaaa@example.com
END:VEVENT
END:VCALENDAR
The question is, what do I do about this? Is there any way for
syncevolution to process updates and merge them with the existing
object? If not, does activesyncd have to go and refetch the entire
updated object from Exchange?
Graham