return;
}
- if (!$force && !PortableContact::updateNeeded($gcontact['created'], $gcontact['updated'], $gcontact['last_failure'], $gcontact['last_contact'])) {
+ if (!$force && !GServer::updateNeeded($gcontact['created'], $gcontact['updated'], $gcontact['last_failure'], $gcontact['last_contact'])) {
Logger::info("Don't update profile", ['url' => $data['url'], 'updated' => $gcontact['updated']]);
return;
}
return self::check($server, $network, $force);
}
+ /**
+ * Decides if a server needs to be updated, based upon several date fields
+ *
+ * @param date $created Creation date of that server entry
+ * @param date $updated When had the server entry be updated
+ * @param date $last_failure Last failure when contacting that server
+ * @param date $last_contact Last time the server had been contacted
+ *
+ * @return boolean Does the server record needs an update?
+ */
+ public static function updateNeeded($created, $updated, $last_failure, $last_contact)
+ {
+ $now = strtotime(DateTimeFormat::utcNow());
+
+ if ($updated > $last_contact) {
+ $contact_time = strtotime($updated);
+ } else {
+ $contact_time = strtotime($last_contact);
+ }
+
+ $failure_time = strtotime($last_failure);
+ $created_time = strtotime($created);
+
+ // If there is no "created" time then use the current time
+ if ($created_time <= 0) {
+ $created_time = $now;
+ }
+
+ // If the last contact was less than 24 hours then don't update
+ if (($now - $contact_time) < (60 * 60 * 24)) {
+ return false;
+ }
+
+ // If the last failure was less than 24 hours then don't update
+ if (($now - $failure_time) < (60 * 60 * 24)) {
+ return false;
+ }
+
+ // If the last contact was less than a week ago and the last failure is older than a week then don't update
+ //if ((($now - $contact_time) < (60 * 60 * 24 * 7)) && ($contact_time > $failure_time))
+ // return false;
+
+ // If the last contact time was more than a week ago and the contact was created more than a week ago, then only try once a week
+ if ((($now - $contact_time) > (60 * 60 * 24 * 7)) && (($now - $created_time) > (60 * 60 * 24 * 7)) && (($now - $failure_time) < (60 * 60 * 24 * 7))) {
+ return false;
+ }
+
+ // If the last contact time was more than a month ago and the contact was created more than a month ago, then only try once a month
+ if ((($now - $contact_time) > (60 * 60 * 24 * 30)) && (($now - $created_time) > (60 * 60 * 24 * 30)) && (($now - $failure_time) < (60 * 60 * 24 * 30))) {
+ return false;
+ }
+
+ return true;
+ }
+
/**
* Checks the state of the given server.
*
$last_failure = DBA::NULL_DATETIME;
}
- if (!$force && !PortableContact::updateNeeded($gserver['created'], '', $last_failure, $last_contact)) {
+ if (!$force && !self::updateNeeded($gserver['created'], '', $last_failure, $last_contact)) {
Logger::info('No update needed', ['server' => $server_url]);
return ($last_contact >= $last_failure);
}
}
return $serverdata;
}
+
+ /**
+ * Update the user directory of a given gserver record
+ *
+ * @param array $gserver gserver record
+ */
+ public static function updateDirectory(array $gserver)
+ {
+ /// @todo Add Mastodon API directory
+
+ if (!empty($gserver['poco'])) {
+ PortableContact::discoverSingleServer($gserver['id']);
+ }
+ }
}
return(preg_match("=https?://.+/user/\d+=ism", $url, $matches));
}
- public static function updateNeeded($created, $updated, $last_failure, $last_contact)
- {
- $now = strtotime(DateTimeFormat::utcNow());
-
- if ($updated > $last_contact) {
- $contact_time = strtotime($updated);
- } else {
- $contact_time = strtotime($last_contact);
- }
-
- $failure_time = strtotime($last_failure);
- $created_time = strtotime($created);
-
- // If there is no "created" time then use the current time
- if ($created_time <= 0) {
- $created_time = $now;
- }
-
- // If the last contact was less than 24 hours then don't update
- if (($now - $contact_time) < (60 * 60 * 24)) {
- return false;
- }
-
- // If the last failure was less than 24 hours then don't update
- if (($now - $failure_time) < (60 * 60 * 24)) {
- return false;
- }
-
- // If the last contact was less than a week ago and the last failure is older than a week then don't update
- //if ((($now - $contact_time) < (60 * 60 * 24 * 7)) && ($contact_time > $failure_time))
- // return false;
-
- // If the last contact time was more than a week ago and the contact was created more than a week ago, then only try once a week
- if ((($now - $contact_time) > (60 * 60 * 24 * 7)) && (($now - $created_time) > (60 * 60 * 24 * 7)) && (($now - $failure_time) < (60 * 60 * 24 * 7))) {
- return false;
- }
-
- // If the last contact time was more than a month ago and the contact was created more than a month ago, then only try once a month
- if ((($now - $contact_time) > (60 * 60 * 24 * 30)) && (($now - $created_time) > (60 * 60 * 24 * 30)) && (($now - $failure_time) < (60 * 60 * 24 * 30))) {
- return false;
- }
-
- return true;
- }
-
/**
* @brief Returns a list of all known servers
* @return array List of server urls
$last_update = date('c', time() - (60 * 60 * 24 * $requery_days));
- $gservers = q("SELECT `id`, `url`, `nurl`, `network`
+ $gservers = q("SELECT `id`, `url`, `nurl`, `network`, `poco`
FROM `gserver`
WHERE `last_contact` >= `last_failure`
AND `poco` != ''
}
Logger::log('Update directory from server ' . $gserver['url'] . ' with ID ' . $gserver['id'], Logger::DEBUG);
- Worker::add(PRIORITY_LOW, 'UpdateServerDirectory', (int)$gserver['id']);
+ Worker::add(PRIORITY_LOW, 'UpdateServerDirectory', $gserver);
if (!$complete && ( --$no_of_queries == 0)) {
break;
namespace Friendica\Worker;
use Friendica\Core\Logger;
-use Friendica\Protocol\PortableContact;
+use Friendica\Model\GServer;
class UpdateServerDirectory
{
- // Discover the given server id for their contacts
- public static function execute($gserverid)
+ public static function execute($gserver)
{
- PortableContact::discoverSingleServer($gserverid);
+ GServer::updateDirectory($gserver);
return;
}
}
use Friendica\Core\Logger;
use Friendica\Core\Worker;
use Friendica\Database\DBA;
-use Friendica\Protocol\PortableContact;
+use Friendica\Model\GServer;
class UpdateServers
{
$updated = 0;
while ($gserver = DBA::fetch($gservers)) {
- if (!PortableContact::updateNeeded($gserver['created'], '', $gserver['last_failure'], $gserver['last_contact'])) {
+ if (!GServer::updateNeeded($gserver['created'], '', $gserver['last_failure'], $gserver['last_contact'])) {
continue;
}
Logger::info('Update server status', ['server' => $gserver['url']]);