Don't store emoji images as media but links
authorMichael <heluecht@pirati.ca>
Sun, 3 Oct 2021 09:42:14 +0000 (09:42 +0000)
committerMichael <heluecht@pirati.ca>
Sun, 3 Oct 2021 09:42:14 +0000 (09:42 +0000)
src/Model/Post/Link.php
src/Model/Post/Media.php
src/Protocol/ActivityPub/Processor.php

index dce9dcf151610ce09d1c36bcc5caa003d7e9e030..dcda036ec13273376bcca482a90d8259b3252a94 100644 (file)
@@ -36,6 +36,18 @@ use Friendica\Util\Proxy;
  */
 class Link
 {
+       /**
+        * Check if the link is stored
+        *
+        * @param int $uri_id
+        * @param string $url
+        * @return bool
+        */
+       public static function exists(int $uri_id, string $url)
+       {
+               return DBA::exists('post-link', ['uri-id' => $uri_id, 'url' => $url]);
+       }
+
        public static function getByLink(int $uri_id, string $url, $size = '')
        {
                if (empty($uri_id) || empty($url) || Proxy::isLocalImage($url)) {
index a29b2dcc7269279419547165ada68161182c2b92..343dc8f0e05697ec10ae9d100a7e97acc006bc7c 100644 (file)
@@ -388,6 +388,10 @@ class Media
                }
 
                foreach ($attachments as $attachment) {
+                       if (Post\Link::exists($uriid, $attachment['preview'] ?? $attachment['url'])) {
+                               continue;
+                       }
+
                        // Only store attachments that are part of the unshared body
                        if (Item::containsLink($unshared_body, $attachment['preview'] ?? $attachment['url'], $attachment['type'])) {
                                self::insert($attachment);
index ec2810277b4816dcf5e88333faea06141d66daa5..47ea6a1bde5db78b8626a3852012010de092ec3b 100644 (file)
@@ -90,7 +90,7 @@ class Processor
         *
         * @return string with replaced emojis
         */
-       private static function replaceEmojis($body, array $emojis)
+       private static function replaceEmojis(int $uri_id, $body, array $emojis)
        {
                $body = strtr($body,
                        array_combine(
@@ -101,6 +101,10 @@ class Processor
                        )
                );
 
+               // We store the emoji here to be able to avoid storing it in the media
+               foreach ($emojis as $emoji) {
+                       Post\Link::getByLink($uri_id, $emoji['href']);
+               }
                return $body;
        }
 
@@ -392,7 +396,7 @@ class Processor
         *
         * @param array $activity Activity array
         * @param array $item
-        * 
+        *
         * @return int event id
         * @throws \Exception
         */
@@ -456,7 +460,7 @@ class Processor
                }
 
                if (!empty($activity['emojis'])) {
-                       $content = self::replaceEmojis($content, $activity['emojis']);
+                       $content = self::replaceEmojis($item['uri-id'], $content, $activity['emojis']);
                }
 
                $content = self::addMentionLinks($content, $activity['tags']);