diff --git a/lib/ext/Syncroton/Command/Sync.php b/lib/ext/Syncroton/Command/Sync.php --- a/lib/ext/Syncroton/Command/Sync.php +++ b/lib/ext/Syncroton/Command/Sync.php @@ -465,6 +465,21 @@ $this->_collections[$collectionData->collectionId] = $collectionData; $this->_modifications[$collectionData->collectionId] = $clientModifications; } + + // Handle Calendar folders first. + // Outlook can't match MeetingRequest with an event that wasn't synced yet, which + // leads to duplicated events in Outlook's calendar. + uasort( + $this->_collections, + function ($a, $b) { + $ac = $a->folder && $a->folder->class == Syncroton_Data_Factory::CLASS_CALENDAR; + $bc = $b->folder && $b->folder->class == Syncroton_Data_Factory::CLASS_CALENDAR; + if ($ac) { + return $bc ? 0 : -1; + } + return $bc ? 1 : 0; + } + ); } /**