]> git.mxchange.org Git - friendica.git/commitdiff
Improved handling of contact links
authorMichael <heluecht@pirati.ca>
Sun, 30 Oct 2022 10:02:01 +0000 (10:02 +0000)
committerMichael <heluecht@pirati.ca>
Sun, 30 Oct 2022 10:02:01 +0000 (10:02 +0000)
src/Model/Post/Media.php

index 478097effa80d06c278da05ba7e1a40ae13ea734..c1d951cc3deaf9455f14b98c17138254246c1f37 100644 (file)
@@ -59,6 +59,7 @@ class Media
        const XML         = 18;
        const PLAIN       = 19;
        const ACTIVITY    = 20;
+       const ACCOUNT     = 21;
        const DOCUMENT    = 128;
 
        /**
@@ -222,6 +223,10 @@ class Media
                        $media = self::addActivity($media);
                }
 
+               if (in_array($media['type'], [self::TEXT, self::APPLICATION, self::HTML, self::XML, self::PLAIN])) {
+                       $media = self::addAccount($media);
+               }
+
                if ($media['type'] == self::HTML) {
                        $data = ParseUrl::getSiteinfoCached($media['url'], false);
                        $media['preview'] = $data['images'][0]['src'] ?? null;
@@ -268,8 +273,6 @@ class Media
                        $media['mimetype'] = 'application/activity+json';
                } elseif ($item['network'] == Protocol::DIASPORA) {
                        $media['mimetype'] = 'application/xml';
-               } else {
-                       $media['mimetype'] = '';
                }
 
                $contact = Contact::getById($item['author-id'], ['avatar', 'gsid']);
@@ -281,7 +284,6 @@ class Media
                $media['media-uri-id'] = $item['uri-id'];
                $media['height'] = null;
                $media['width'] = null;
-               $media['size'] = null;
                $media['preview'] = null;
                $media['preview-height'] = null;
                $media['preview-width'] = null;
@@ -298,6 +300,47 @@ class Media
                return $media;
        }
 
+       /**
+        * Adds the account type if the media entry is linked to an account
+        *
+        * @param array $media
+        * @return array
+        */
+       private static function addAccount(array $media): array
+       {
+               $contact = Contact::getByURL($media['url'], false);
+               if (empty($contact) || ($contact['network'] == Protocol::PHANTOM)) {
+                       return $media;
+               }
+
+               if (in_array($contact['network'], [Protocol::ACTIVITYPUB, Protocol::DFRN])) {
+                       $media['mimetype'] = 'application/activity+json';
+               }
+
+               if (!empty($contact['gsid'])) {
+                       $gserver = DBA::selectFirst('gserver', ['url', 'site_name'], ['id' => $contact['gsid']]);
+               }
+
+               $media['type'] = self::ACCOUNT;
+               $media['media-uri-id'] = $contact['uri-id'];
+               $media['height'] = null;
+               $media['width'] = null;
+               $media['preview'] = null;
+               $media['preview-height'] = null;
+               $media['preview-width'] = null;
+               $media['description'] = $contact['about'];
+               $media['name'] = $contact['name'];
+               $media['author-url'] = $contact['url'];
+               $media['author-name'] = $contact['name'];
+               $media['author-image'] = $contact['avatar'];
+               $media['publisher-url'] = $gserver['url'] ?? null;
+               $media['publisher-name'] = $gserver['site_name'] ?? null;
+               $media['publisher-image'] = null;
+
+               Logger::debug('Account detected', ['uri-id' => $media['uri-id'], 'url' => $media['url'], 'uri' => $contact['url']]);
+               return $media;
+       }
+
        /**
         * Fetch media data from local resources
         * @param array $media
@@ -635,6 +678,12 @@ class Media
                                }
                        }
 
+                       // Currently these two types are ignored here.
+                       // Posts are added differently and contacts are not displayed as attachments.
+                       if (in_array($medium['type'], [self::ACCOUNT, self::ACTIVITY])) {
+                               continue;
+                       }
+
                        if (!empty($medium['preview'])) {
                                $previews[] = $medium['preview'];
                        }