Merge pull request #8044 from annando/contact-adding

Don't add contacts when not needed
This commit is contained in:
Philipp 2020-01-01 20:38:34 +01:00 committed by GitHub
commit 75c74e8562
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 52 additions and 19 deletions

View file

@ -269,29 +269,37 @@ class Contact
* @brief Get the basepath for a given contact link * @brief Get the basepath for a given contact link
* *
* @param string $url The contact link * @param string $url The contact link
* @param boolean $dont_update Don't update the contact
* *
* @return string basepath * @return string basepath
* @return boolean $dont_update Don't update the contact
* @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException * @throws \ImagickException
*/ */
public static function getBasepath($url, $dont_update = false) public static function getBasepath($url, $dont_update = false)
{ {
$contact = DBA::selectFirst('contact', ['baseurl'], ['uid' => 0, 'nurl' => Strings::normaliseLink($url)]); $contact = DBA::selectFirst('contact', ['id', 'baseurl'], ['uid' => 0, 'nurl' => Strings::normaliseLink($url)]);
if (!DBA::isResult($contact)) {
return '';
}
if (!empty($contact['baseurl'])) { if (!empty($contact['baseurl'])) {
return $contact['baseurl']; return $contact['baseurl'];
} elseif ($dont_update) { } elseif ($dont_update) {
return ''; return '';
} }
self::updateFromProbeByURL($url, true); // Update the existing contact
self::updateFromProbe($contact['id'], '', true);
$contact = DBA::selectFirst('contact', ['baseurl'], ['uid' => 0, 'nurl' => Strings::normaliseLink($url)]); // And fetch the result
if (!empty($contact['baseurl'])) { $contact = DBA::selectFirst('contact', ['baseurl'], ['id' => $contact['id']]);
return $contact['baseurl']; if (empty($contact['baseurl'])) {
Logger::info('No baseurl for contact', ['url' => $url]);
return '';
} }
return ''; Logger::info('Found baseurl for contact', ['url' => $url, 'baseurl' => $contact['baseurl']]);
return $contact['baseurl'];
} }
/** /**

View file

@ -216,7 +216,7 @@ class GContact
if (empty($gcontact['server_url'])) { if (empty($gcontact['server_url'])) {
// We check the server url to be sure that it is a real one // We check the server url to be sure that it is a real one
$server_url = Contact::getBasepath($gcontact['url']); $server_url = self::getBasepath($gcontact['url']);
// We are now sure that it is a correct URL. So we use it in the future // We are now sure that it is a correct URL. So we use it in the future
if ($server_url != '') { if ($server_url != '') {
@ -1128,6 +1128,38 @@ class GContact
self::update($gcontact); self::update($gcontact);
} }
/**
* @brief Get the basepath for a given contact link
*
* @param string $url The gcontact link
* @param boolean $dont_update Don't update the contact
*
* @return string basepath
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function getBasepath($url, $dont_update = false)
{
$gcontact = DBA::selectFirst('gcontact', ['server_url'], ['nurl' => Strings::normaliseLink($url)]);
if (!empty($gcontact['server_url'])) {
return $gcontact['server_url'];
} elseif ($dont_update) {
return '';
}
self::updateFromProbe($url, true);
// Fetch the result
$gcontact = DBA::selectFirst('gcontact', ['server_url'], ['nurl' => Strings::normaliseLink($url)]);
if (empty($gcontact['server_url'])) {
Logger::info('No baseurl for gcontact', ['url' => $url]);
return '';
}
Logger::info('Found baseurl for gcontact', ['url' => $url, 'baseurl' => $gcontact['server_url']]);
return $gcontact['server_url'];
}
/** /**
* @brief Fetches users of given GNU Social server * @brief Fetches users of given GNU Social server
* *

View file

@ -44,7 +44,7 @@ class GServer
public static function reachable(string $profile, string $server = '', string $network = '', bool $force = false) public static function reachable(string $profile, string $server = '', string $network = '', bool $force = false)
{ {
if ($server == '') { if ($server == '') {
$server = Contact::getBasepath($profile); $server = GContact::getBasepath($profile);
} }
if ($server == '') { if ($server == '') {

View file

@ -1131,12 +1131,6 @@ class Diaspora
private static function contactByHandle($uid, $handle) private static function contactByHandle($uid, $handle)
{ {
$cid = Contact::getIdForURL($handle, $uid); $cid = Contact::getIdForURL($handle, $uid);
if (!$cid) {
$handle_parts = explode("@", $handle);
$nurl_sql = "%%://" . $handle_parts[1] . "%%/profile/" . $handle_parts[0];
$cid = Contact::getIdForURL($nurl_sql, $uid);
}
if (!$cid) { if (!$cid) {
Logger::log("Haven't found a contact for user " . $uid . " and handle " . $handle, Logger::DEBUG); Logger::log("Haven't found a contact for user " . $uid . " and handle " . $handle, Logger::DEBUG);
return false; return false;

View file

@ -10,7 +10,6 @@ use Friendica\Core\Logger;
use Friendica\Core\Protocol; use Friendica\Core\Protocol;
use Friendica\Database\DBA; use Friendica\Database\DBA;
use Friendica\Model\GContact; use Friendica\Model\GContact;
use Friendica\Model\Contact;
use Friendica\Model\GServer; use Friendica\Model\GServer;
use Friendica\Network\Probe; use Friendica\Network\Probe;
use Friendica\Util\Network; use Friendica\Util\Network;
@ -55,7 +54,7 @@ class SearchDirectory
continue; continue;
} }
$server_url = Contact::getBasepath($jj->url); $server_url = GContact::getBasepath($jj->url, true);
if ($server_url != '') { if ($server_url != '') {
if (!GServer::check($server_url)) { if (!GServer::check($server_url)) {
Logger::info("Friendica server doesn't answer.", ['server' => $server_url]); Logger::info("Friendica server doesn't answer.", ['server' => $server_url]);

View file

@ -9,7 +9,7 @@ use Friendica\Core\Logger;
use Friendica\Core\Protocol; use Friendica\Core\Protocol;
use Friendica\Core\Worker; use Friendica\Core\Worker;
use Friendica\Database\DBA; use Friendica\Database\DBA;
use Friendica\Model\Contact; use Friendica\Model\GContact;
use Friendica\Model\GServer; use Friendica\Model\GServer;
use Friendica\Util\DateTimeFormat; use Friendica\Util\DateTimeFormat;
use Friendica\Util\Strings; use Friendica\Util\Strings;
@ -53,7 +53,7 @@ class UpdateGContacts
continue; continue;
} }
$server_url = Contact::getBasepath($contact['url']); $server_url = GContact::getBasepath($contact['url'], true);
$force_update = false; $force_update = false;
if (!empty($contact['server_url'])) { if (!empty($contact['server_url'])) {