]> git.mxchange.org Git - friendica.git/commitdiff
Pass emojis in remote mastodon posts in mastodon api
authorgudzpoz <gudzpoz@live.com>
Tue, 14 Nov 2023 02:52:34 +0000 (10:52 +0800)
committergudzpoz <gudzpoz@live.com>
Tue, 14 Nov 2023 02:52:34 +0000 (10:52 +0800)
src/Content/Text/BBCode.php
src/Factory/Api/Mastodon/Emoji.php
src/Factory/Api/Mastodon/Status.php

index 88df9511d4d5b188af7a2580dae9de942de09c44..fab4fba0234680184346be96e6dfcea2f49d192f 100644 (file)
@@ -1234,7 +1234,7 @@ class BBCode
        }
 
        /**
-        * Expand Youtube and Vimeo links to 
+        * Expand Youtube and Vimeo links to
         *
         * @param string $text
         * @return string
@@ -1387,7 +1387,7 @@ class BBCode
                                        "\n[hr]", "[hr]\n", " [hr]", "[hr] ",
                                        "\n[attachment ", " [attachment ", "\n[/attachment]", "[/attachment]\n", " [/attachment]", "[/attachment] ",
                                        "[table]\n", "[table] ", " [table]", "\n[/table]", " [/table]", "[/table] ",
-                                       " \n", "\t\n", "[/li]\n", "\n[li]", "\n[*]", 
+                                       " \n", "\t\n", "[/li]\n", "\n[li]", "\n[*]",
                                ];
                                $replace = [
                                        "[th]", "[th]", "[th]", "[/th]", "[/th]", "[/th]",
@@ -1480,14 +1480,14 @@ class BBCode
                                if ($simple_html == self::INTERNAL) {
                                        //Ensure to always start with <h4> if possible
                                        $heading_count = 0;
-                                       for ($level = 6; $level > 0; $level--) { 
+                                       for ($level = 6; $level > 0; $level--) {
                                                if (preg_match("(\[h$level\].*?\[\/h$level\])ism", $text)) {
                                                        $heading_count++;
                                                }
                                        }
                                        if ($heading_count > 0) {
                                                $heading = min($heading_count + 3, 6);
-                                               for ($level = 6; $level > 0; $level--) { 
+                                               for ($level = 6; $level > 0; $level--) {
                                                        if (preg_match("(\[h$level\].*?\[\/h$level\])ism", $text)) {
                                                                $text = preg_replace("(\[h$level\](.*?)\[\/h$level\])ism", "</p><h$heading>$1</h$heading><p>", $text);
                                                                $heading--;
@@ -1548,7 +1548,11 @@ class BBCode
                                $text = preg_replace("(\[style=(.*?)\](.*?)\[\/style\])ism", '<span style="$1">$2</span>', $text);
 
                                // Mastodon Emoji (internal tag, do not document for users)
-                               $text = preg_replace("(\[emoji=(.*?)](.*?)\[/emoji])ism", '<span class="mastodon emoji"><img src="$1" alt="$2" title="$2"/></span>', $text);
+                               if ($simple_html == self::MASTODON_API) {
+                                       $text = preg_replace("(\[emoji=(.*?)](.*?)\[/emoji])ism", '$2', $text);
+                               } else {
+                                       $text = preg_replace("(\[emoji=(.*?)](.*?)\[/emoji])ism", '<span class="mastodon emoji"><img src="$1" alt="$2" title="$2"/></span>', $text);
+                               }
 
                                // Check for CSS classes
                                // @deprecated since 2021.12, left for backward-compatibility reasons
index b7f4ee6eadf20a9af1f61f5d82efcd0a9a09444f..712bddb48d8b80839901481bd11c32bba2c72ff3 100644 (file)
@@ -34,19 +34,28 @@ class Emoji extends BaseFactory
        /**
         * Creates an emoji collection from shortcode => image mappings.
         *
+        * Only emojis with shortcodes of the form of ':shortcode:' are passed in the collection.
+        *
         * @param array $smilies
+        * @param bool  $extract_url
         *
         * @return Emojis
         */
-       public function createCollectionFromArray(array $smilies): Emojis
+       public function createCollectionFromArray(array $smilies, bool $extract_url = true): Emojis
        {
                $prototype = null;
 
                $emojis = [];
 
-               foreach ($smilies as $shortcode => $icon) {
-                       if (preg_match('/src="(.+?)"/', $icon, $matches)) {
-                               $url = $matches[1];
+               foreach ($smilies as $shortcode => $url) {
+                       if (substr($shortcode, 0, 1) == ':' && substr($shortcode, -1) == ':') {
+                               if ($extract_url) {
+                                       if (preg_match('/src="(.+?)"/', $url, $matches)) {
+                                               $url = $matches[1];
+                                       } else {
+                                               continue;
+                                       }
+                               }
                                $shortcode = trim($shortcode, ':');
 
                                if ($prototype === null) {
index 4cdc8a78fc43c72701cee8d3f25759bcae1dd620..fb73432f039126e5cf1855762315b01b83acd6fc 100644 (file)
@@ -292,6 +292,10 @@ class Status extends BaseFactory
                if (DI::baseUrl()->isLocalUrl($item['uri'])) {
                        $used_smilies = Smilies::extractUsedSmilies($item['body'] ?: $item['raw-body']);
                        $emojis = $this->mstdnEmojiFactory->createCollectionFromArray($used_smilies)->getArrayCopy(true);
+               } else {
+                       if (preg_match_all("(\[emoji=(.*?)](.*?)\[/emoji])ism", $item['body'] ?: $item['raw-body'], $matches)) {
+                               $emojis = $this->mstdnEmojiFactory->createCollectionFromArray(array_combine($matches[2], $matches[1]), false)->getArrayCopy(true);
+                       }
                }
 
                if ($is_reshare) {