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,16 @@ $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) { + return $a->folder && $a->folder->class == Syncroton_Data_Factory::CLASS_CALENDAR ? -1 : 0; + } + ); } /**