]> git.mxchange.org Git - friendica.git/commitdiff
Don't add contacts when not needed
authorMichael <heluecht@pirati.ca>
Wed, 1 Jan 2020 17:54:36 +0000 (17:54 +0000)
committerMichael <heluecht@pirati.ca>
Wed, 1 Jan 2020 17:54:36 +0000 (17:54 +0000)
src/Model/Contact.php
src/Model/GContact.php
src/Model/GServer.php
src/Protocol/Diaspora.php
src/Worker/SearchDirectory.php
src/Worker/UpdateGContacts.php

index d0d5d686669fe6dcab0f1ea72a689335637a767d..a9b1820aac8fa4a5120d14cc30b22a7b68bbf0a3 100644 (file)
@@ -277,21 +277,29 @@ class Contact
         */
        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'])) {
                        return $contact['baseurl'];
                } elseif ($dont_update) {
                        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)]);
-               if (!empty($contact['baseurl'])) {
-                       return $contact['baseurl'];
+               // And fetch the result
+               $contact = DBA::selectFirst('contact', ['baseurl'], ['id' => $contact['id']]);
+               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'];
        }
 
        /**
index 61e44b4106dff1f1cc5147e817c34c8e4ed8925e..e546b8c1ce204518ef793c528336398a1726cf34 100644 (file)
@@ -216,7 +216,7 @@ class GContact
 
                if (empty($gcontact['server_url'])) {
                        // 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
                        if ($server_url != '') {
@@ -1128,6 +1128,38 @@ class GContact
                self::update($gcontact);
        }
 
+               /**
+        * @brief Get the basepath for a given contact link
+        *
+        * @param string $url The gcontact link
+        *
+        * @return string basepath
+        * @return boolean $dont_update Don't update the contact
+        * @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
         *
index f17265a3a3fcc0a8f5093c78150f24e59e85c5e4..de8a3c1a1ab1221ea5579d979e0727bb747d4896 100644 (file)
@@ -44,7 +44,7 @@ class GServer
        public static function reachable(string $profile, string $server = '', string $network = '', bool $force = false)
        {
                if ($server == '') {
-                       $server = Contact::getBasepath($profile);
+                       $server = GContact::getBasepath($profile);
                }
 
                if ($server == '') {
index 7704d3f07b4e7aae14ce30626fbd0a13277a8526..5dd8e6c98bb6da0c8a81325783ff87c8d6e48773 100644 (file)
@@ -1132,12 +1132,6 @@ class Diaspora
        private static function contactByHandle($uid, $handle)
        {
                $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) {
                        Logger::log("Haven't found a contact for user " . $uid . " and handle " . $handle, Logger::DEBUG);
                        return false;
index 4fd6d44d509fca8f2689a13816dc846e1131eb92..d489acb7fb6d6aa027879e98edb8762db31400bd 100644 (file)
@@ -10,7 +10,6 @@ use Friendica\Core\Logger;
 use Friendica\Core\Protocol;
 use Friendica\Database\DBA;
 use Friendica\Model\GContact;
-use Friendica\Model\Contact;
 use Friendica\Model\GServer;
 use Friendica\Network\Probe;
 use Friendica\Util\Network;
@@ -55,7 +54,7 @@ class SearchDirectory
                                        continue;
                                }
 
-                               $server_url = Contact::getBasepath($jj->url);
+                               $server_url = GContact::getBasepath($jj->url, true);
                                if ($server_url != '') {
                                        if (!GServer::check($server_url)) {
                                                Logger::info("Friendica server doesn't answer.", ['server' => $server_url]);
index 1d9d86bcf6871bdc43f15a15c6209d2c18bea5c1..edee112eef9c3cef467207a4f9742a69793d7042 100644 (file)
@@ -9,7 +9,7 @@ use Friendica\Core\Logger;
 use Friendica\Core\Protocol;
 use Friendica\Core\Worker;
 use Friendica\Database\DBA;
-use Friendica\Model\Contact;
+use Friendica\Model\GContact;
 use Friendica\Model\GServer;
 use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Strings;
@@ -53,7 +53,7 @@ class UpdateGContacts
                                continue;
                        }
 
-                       $server_url = Contact::getBasepath($contact['url']);
+                       $server_url = GContact::getBasepath($contact['url'], true);
                        $force_update = false;
 
                        if (!empty($contact['server_url'])) {