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 @@ -599,7 +599,26 @@ } } + // 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; + } + ); + foreach ($this->_collections as $collectionData) { + if ($this->_logger instanceof Zend_Log) { + $this->_logger->debug(__METHOD__ . '::' . __LINE__ . " Processing {$collectionData->collectionId}..."); + } + $collectionChanges = 0; /**