$refresh * @return Collection */ public function execute(SyncDto $sync, Collection $refresh): Collection { $this->sync = $sync; return $this->hasCapability('addressbookMultiget') ? $this->refreshMultigetContacts($refresh) : $this->refreshSimpleGetContacts($refresh); } /** * Get contacts data with addressbook-multiget request. * * @param Collection $refresh * @return Collection */ private function refreshMultigetContacts(Collection $refresh): Collection { $updated = $refresh ->filter(function ($item): bool { return ! ($item instanceof ContactDeleteDto); }) ->pluck('uri')->toArray(); $deleted = $refresh ->filter(function ($item): bool { return $item instanceof ContactDeleteDto; }) ->pluck('uri')->toArray(); return collect([ new GetMultipleVCard($this->sync->subscription, $updated), new DeleteMultipleVCard($this->sync->subscription, $deleted), ]); } /** * Get contacts data with request. * * @param Collection $refresh * @return Collection */ private function refreshSimpleGetContacts(Collection $refresh): Collection { return $refresh ->map(function (ContactDto $contact) { if ($contact instanceof ContactDeleteDto) { return new DeleteVCard($this->sync->subscription, $contact->uri); } else { return new GetVCard($this->sync->subscription, $contact); } }); } }