. * */ namespace Friendica\Worker; use Friendica\Core\Logger; use Friendica\DI; use Friendica\Model\Contact; class PullDirectory { /** * Pull contacts from a directory server */ public static function execute() { if (!DI::config()->get('system', 'synchronize_directory')) { Logger::info('Synchronization deactivated'); return; } $directory = DI::config()->get('system', 'directory'); if (empty($directory)) { Logger::info('No directory configured'); return; } $now = (int)DI::config()->get('system', 'last-directory-sync', 0); Logger::info('Synchronization started.', ['now' => $now, 'directory' => $directory]); $result = DI::httpClient()->fetch($directory . '/sync/pull/since/' . $now); if (empty($result)) { Logger::info('Directory server return empty result.', ['directory' => $directory]); return; } $contacts = json_decode($result, true); if (empty($contacts['results'])) { Logger::info('No results fetched.', ['directory' => $directory]); return; } $result = Contact::addByUrls($contacts['results']); $now = $contacts['now'] ?? 0; DI::config()->set('system', 'last-directory-sync', $now); Logger::info('Synchronization ended', ['now' => $now, 'count' => $result['count'], 'added' => $result['added'], 'updated' => $result['updated'], 'unchanged' => $result['unchanged'], 'directory' => $directory]); } }