1
0
Fork 0

Constantly updating public contacts

This commit is contained in:
Michael 2019-06-23 09:27:40 +00:00
commit 857469d16a
3 changed files with 50 additions and 12 deletions

View file

@ -117,6 +117,9 @@ class Cron
// Poll contacts
self::pollContacts($parameter, $generation);
// Update contact information
self::updatePublicContacts();
Logger::log('cron: end');
Config::set('system', 'last_cron', time());
@ -124,6 +127,26 @@ class Cron
return;
}
/**
* @brief Update public contacts
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
private static function updatePublicContacts() {
$count = 0;
$last_updated = DateTimeFormat::utc('now - 1 months');
$condition = ["`network` IN (?, ?, ?, ?) AND `uid` = ? AND NOT `self` AND `last-update` < ?",
Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS, 0, $last_updated];
$total = DBA::count('contact', $condition);
$contacts = DBA::select('contact', ['id'], $condition, ['limit' => 1000]);
while ($contact = DBA::fetch($contacts)) {
Worker::add(PRIORITY_LOW, "UpdateContact", $contact['id'], 'force');
++$count;
}
Logger::info('Initiated update for public contacts', ['interval' => $count, 'total' => $total]);
DBA::close($contacts);
}
/**
* @brief Poll contacts for unreceived messages
*

View file

@ -13,16 +13,26 @@ use Friendica\Database\DBA;
class UpdateContact
{
public static function execute($contact_id)
public static function execute($contact_id, $command = '')
{
$success = Contact::updateFromProbe($contact_id);
// Update the "updated" field if the contact could be probed.
// We don't do this in the function above, since we don't want to
// update the contact whenever that function is called from anywhere.
if ($success) {
DBA::update('contact', ['updated' => DateTimeFormat::utcNow()], ['id' => $contact_id]);
$force = ($command == "force");
$success = Contact::updateFromProbe($contact_id, '', $force);
Logger::info('Updated from probe', ['id' => $contact_id, 'force' => $force, 'success' => $success]);
// Update the update date fields only when we are forcing the update
if (!$force) {
return;
}
Logger::info('Updated from probe', ['id' => $contact_id, 'success' => $success]);
// Update the "last-update", "success_update" and "failure_update" field only when it is a public contact.
// These fields are set in OnePoll for all non public contacts.
$updated = DateTimeFormat::utcNow();
if ($success) {
DBA::update('contact', ['last-update' => $updated, 'success_update' => $updated], ['id' => $contact_id, 'uid' => 0]);
} else {
DBA::update('contact', ['last-update' => $updated, 'failure_update' => $updated], ['id' => $contact_id, 'uid' => 0]);
}
}
}