From 5fee84f2e24fb2bb461ff2e4cb172a8f50f083f7 Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 20 Dec 2019 21:04:38 +0000 Subject: [PATCH] Added "DiscoverContacts" --- src/Worker/Cron.php | 2 +- src/Worker/DiscoverContacts.php | 81 +++++++++++++++++++++++++++++++++ src/Worker/DiscoverPoCo.php | 67 +-------------------------- 3 files changed, 83 insertions(+), 67 deletions(-) create mode 100644 src/Worker/DiscoverContacts.php diff --git a/src/Worker/Cron.php b/src/Worker/Cron.php index 42a6219762..011fa46291 100644 --- a/src/Worker/Cron.php +++ b/src/Worker/Cron.php @@ -42,7 +42,7 @@ class Cron Worker::add(PRIORITY_LOW, "DiscoverPoCo"); // run the process to update locally stored global contacts in the background - Worker::add(PRIORITY_LOW, "DiscoverPoCo", "checkcontact"); + Worker::add(PRIORITY_LOW, 'DiscoverContacts'); // Expire and remove user entries Worker::add(PRIORITY_MEDIUM, "CronJobs", "expire_and_remove_users"); diff --git a/src/Worker/DiscoverContacts.php b/src/Worker/DiscoverContacts.php new file mode 100644 index 0000000000..88023bccc2 --- /dev/null +++ b/src/Worker/DiscoverContacts.php @@ -0,0 +1,81 @@ + Protocol::PHANTOM], + ['nurl' => Strings::normaliseLink($contact['url'])]); + continue; + } + + if (in_array($urlparts['host'], ['twitter.com', 'identi.ca'])) { + $networks = ['twitter.com' => Protocol::TWITTER, 'identi.ca' => Protocol::PUMPIO]; + + DBA::update('gcontact', ['network' => $networks[$urlparts['host']]], + ['nurl' => Strings::normaliseLink($contact['url'])]); + continue; + } + + $server_url = Contact::getBasepath($contact['url']); + $force_update = false; + + if (!empty($contact['server_url'])) { + $force_update = (Strings::normaliseLink($contact['server_url']) != Strings::normaliseLink($server_url)); + + $server_url = $contact['server_url']; + } + + if ((empty($server_url) && ($contact['network'] == Protocol::FEED)) || $force_update || GServer::check($server_url, $contact['network'])) { + Logger::info('Check profile', ['profile' => $contact['url']]); + Worker::add(PRIORITY_LOW, 'UpdateGContact', $contact['url'], 'force'); + + if (++$checked > 100) { + return; + } + } else { + DBA::update('gcontact', ['last_failure' => DateTimeFormat::utcNow()], + ['nurl' => Strings::normaliseLink($contact['url'])]); + } + + // Quit the loop after 3 minutes + if (time() > ($starttime + 180)) { + return; + } + } + } +} diff --git a/src/Worker/DiscoverPoCo.php b/src/Worker/DiscoverPoCo.php index 44b2219201..508914b48f 100644 --- a/src/Worker/DiscoverPoCo.php +++ b/src/Worker/DiscoverPoCo.php @@ -34,9 +34,7 @@ class DiscoverPoCo $search = ""; $mode = 0; - if (($command == "checkcontact") && Config::get('system', 'poco_completion')) { - self::discoverUsers(); - } elseif ($command == "server") { + if ($command == "server") { $server_url = $param1; if ($server_url == "") { return; @@ -110,67 +108,4 @@ class DiscoverPoCo } } } - - private static function discoverUsers() { - Logger::log("Discover users", Logger::DEBUG); - - $starttime = time(); - - $users = q("SELECT `url`, `created`, `updated`, `last_failure`, `last_contact`, `server_url`, `network` FROM `gcontact` - WHERE `last_contact` < UTC_TIMESTAMP - INTERVAL 1 MONTH AND - `last_failure` < UTC_TIMESTAMP - INTERVAL 1 MONTH AND - `network` IN ('%s', '%s', '%s', '%s', '') ORDER BY rand()", - DBA::escape(Protocol::DFRN), DBA::escape(Protocol::DIASPORA), - DBA::escape(Protocol::OSTATUS), DBA::escape(Protocol::FEED)); - - if (!$users) { - return; - } - $checked = 0; - - foreach ($users AS $user) { - - $urlparts = parse_url($user["url"]); - if (!isset($urlparts["scheme"])) { - DBA::update('gcontact', ['network' => Protocol::PHANTOM], - ['nurl' => Strings::normaliseLink($user["url"])]); - continue; - } - - if (in_array($urlparts["host"], ["twitter.com", "identi.ca"])) { - $networks = ["twitter.com" => Protocol::TWITTER, "identi.ca" => Protocol::PUMPIO]; - - DBA::update('gcontact', ['network' => $networks[$urlparts["host"]]], - ['nurl' => Strings::normaliseLink($user["url"])]); - continue; - } - - $server_url = Contact::getBasepath($user["url"]); - $force_update = false; - - if ($user["server_url"] != "") { - - $force_update = (Strings::normaliseLink($user["server_url"]) != Strings::normaliseLink($server_url)); - - $server_url = $user["server_url"]; - } - - if ((($server_url == "") && ($user["network"] == Protocol::FEED)) || $force_update || GServer::check($server_url, $user["network"])) { - Logger::log('Check profile '.$user["url"]); - Worker::add(PRIORITY_LOW, 'UpdateGContact', $user['url'], 'force'); - - if (++$checked > 100) { - return; - } - } else { - DBA::update('gcontact', ['last_failure' => DateTimeFormat::utcNow()], - ['nurl' => Strings::normaliseLink($user["url"])]); - } - - // Quit the loop after 3 minutes - if (time() > ($starttime + 180)) { - return; - } - } - } }