]> git.mxchange.org Git - friendica.git/blobdiff - src/Model/GServer.php
We now store the receivers as well
[friendica.git] / src / Model / GServer.php
index dd38367c67f5a9d4e27ce930b54d131c28519785..c0e4899923d86cb375109e9b2240675d166cc5eb 100644 (file)
@@ -438,7 +438,7 @@ class GServer
                                }
                        }
 
-                       if (empty($serverdata['network']) || ($serverdata['network'] == Protocol::ACTIVITYPUB)) {
+                       if (empty($nodeinfo['network']) && (empty($serverdata['network']) || ($serverdata['network'] == Protocol::ACTIVITYPUB))) {
                                $serverdata = self::detectMastodonAlikes($url, $serverdata);
                        }
 
@@ -478,7 +478,7 @@ class GServer
                                $serverdata = self::detectNextcloud($url, $serverdata);
                        }
 
-                       if (empty($serverdata['network'])) {
+                       if (empty($nodeinfo['network']) && empty($serverdata['network'])) {
                                $serverdata = self::detectGNUSocial($url, $serverdata);
                        }
 
@@ -493,9 +493,13 @@ class GServer
 
                // Detect the directory type
                $serverdata['directory-type'] = self::DT_NONE;
-               $serverdata = self::checkPoCo($url, $serverdata);
+
                $serverdata = self::checkMastodonDirectory($url, $serverdata);
 
+               if ($serverdata['directory-type'] == self::DT_NONE) {
+                       $serverdata = self::checkPoCo($url, $serverdata);
+               }
+
                // We can't detect the network type. Possibly it is some system that we don't know yet
                if (empty($serverdata['network'])) {
                        $serverdata['network'] = Protocol::PHANTOM;
@@ -930,6 +934,11 @@ class GServer
                                // Version numbers on Nodeinfo are presented with additional info, e.g.:
                                // 0.6.3.0-p1702cc1c, 0.6.99.0-p1b9ab160 or 3.4.3-2-1191.
                                $server['version'] = preg_replace('=(.+)-(.{4,})=ism', '$1', $server['version']);
+
+                               // qoto advertises itself as Mastodon
+                               if (($server['platform'] == 'mastodon') && substr($nodeinfo['software']['version'], -5) == '-qoto') {
+                                       $server['platform'] = 'qoto';
+                               }
                        }
                }
 
@@ -1350,7 +1359,7 @@ class GServer
                $contact = Contact::selectFirst(['id'], ['uid' => 0, 'failed' => false, 'gsid' => $gserver['id']]);
 
                // Via probing we can be sure that the server is responding
-               if (Contact::updateFromProbe($contact['id'])) {
+               if (!empty($contact['id']) && Contact::updateFromProbe($contact['id'])) {
                        $contact = Contact::selectFirst(['network', 'failed'], ['id' => $contact['id']]);
                        if (!$contact['failed'] && in_array($contact['network'], Protocol::FEDERATED)) {
                                $serverdata['network'] = $contact['network'];