syncService = \OC::$server->query('CardDAVSyncService'); $this->dbHandler = $dbHandler; } protected function configure() { $this ->setName('federation:sync-addressbooks') ->setDescription('Synchronizes addressbooks of all federated clouds'); } /** * @param InputInterface $input * @param OutputInterface $output */ protected function execute(InputInterface $input, OutputInterface $output) { $progress = new ProgressBar($output); $progress->start(); $trustedServers = $this->dbHandler->getAllServer(); foreach ($trustedServers as $trustedServer) { $progress->advance(); $url = $trustedServer['url']; $sharedSecret = $trustedServer['shared_secret']; $syncToken = $trustedServer['sync_token']; if (is_null($sharedSecret)) { continue; } $targetBookId = sha1($url); $targetPrincipal = "principals/system/system"; $targetBookProperties = [ '{DAV:}displayname' => $url ]; try { $newToken = $this->syncService->syncRemoteAddressBook($url, 'system', $sharedSecret, $syncToken, $targetPrincipal, $targetBookId, $targetBookProperties); if ($newToken !== $syncToken) { $this->dbHandler->setServerStatus($url, TrustedServers::STATUS_OK, $newToken); } } catch (\Exception $ex) { $output->writeln("Error while syncing $url : " . $ex->getMessage()); } } $progress->finish(); $output->writeln(''); } }