Merge pull request #9046 from annando/local-followers

Fetch followers/followings locally
This commit is contained in:
Tobias Diekershoff 2020-08-22 13:18:47 +02:00 committed by GitHub
commit 101daab790
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -28,6 +28,8 @@ use Friendica\Database\DBA;
use Friendica\DI; use Friendica\DI;
use Friendica\Model\APContact; use Friendica\Model\APContact;
use Friendica\Model\Contact; use Friendica\Model\Contact;
use Friendica\Model\Profile;
use Friendica\Model\User;
use Friendica\Protocol\ActivityPub; use Friendica\Protocol\ActivityPub;
use Friendica\Util\DateTimeFormat; use Friendica\Util\DateTimeFormat;
use Friendica\Util\Strings; use Friendica\Util\Strings;
@ -82,6 +84,12 @@ class Relation
return; return;
} }
$uid = User::getIdForURL($url);
if (!empty($uid)) {
// Fetch the followers/followings locally
$followers = self::getContacts($uid, [Contact::FOLLOWER, Contact::FRIEND]);
$followings = self::getContacts($uid, [Contact::SHARING, Contact::FRIEND]);
} else {
$apcontact = APContact::getByURL($url, false); $apcontact = APContact::getByURL($url, false);
if (!empty($apcontact['followers']) && is_string($apcontact['followers'])) { if (!empty($apcontact['followers']) && is_string($apcontact['followers'])) {
@ -95,6 +103,7 @@ class Relation
} else { } else {
$followings = []; $followings = [];
} }
}
if (empty($followers) && empty($followings)) { if (empty($followers) && empty($followings)) {
DBA::update('contact', ['last-discovery' => DateTimeFormat::utcNow()], ['id' => $contact['id']]); DBA::update('contact', ['last-discovery' => DateTimeFormat::utcNow()], ['id' => $contact['id']]);
@ -150,6 +159,33 @@ class Relation
return; return;
} }
/**
* Fetch contact list from the given local user
*
* @param integer $uid
* @param array $rel
* @return void
*/
private static function getContacts(int $uid, array $rel)
{
$list = [];
$profile = Profile::getByUID($uid);
if (!empty($profile['hide-friends'])) {
return $list;
}
$condition = ['rel' => $rel, 'uid' => $uid, 'self' => false, 'deleted' => false,
'hidden' => false, 'archive' => false, 'pending' => false];
$condition = DBA::mergeConditions($condition, ["`url` IN (SELECT `url` FROM `apcontact`)"]);
$contacts = DBA::select('contact', ['url'], $condition);
while ($contact = DBA::fetch($contacts)) {
$list[] = $contact['url'];
}
DBA::close($contacts);
return $list;
}
/** /**
* Tests if a given contact url is discoverable * Tests if a given contact url is discoverable
* *