From 9afa3610cfbdbb8f8b709c5e9fe3216d8238abc7 Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 26 Apr 2021 10:49:57 +0000 Subject: [PATCH] Adding media attachments to Diaspora posts if they are only attached and not embedded in the body --- mod/item.php | 3 +++ src/Protocol/Diaspora.php | 35 ++++++++++++++++++++++++++++++++--- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/mod/item.php b/mod/item.php index 19d0c1172..04e7c7c39 100644 --- a/mod/item.php +++ b/mod/item.php @@ -45,6 +45,7 @@ use Friendica\Model\Contact; use Friendica\Model\Conversation; use Friendica\Model\FileTag; use Friendica\Model\Item; +use Friendica\Model\ItemURI; use Friendica\Model\Notification; use Friendica\Model\Photo; use Friendica\Model\Post; @@ -613,6 +614,8 @@ function item_post(App $a) { $datarray['origin'] = $origin; $datarray['object'] = $object; + $datarray["uri-id"] = ItemURI::getIdByURI($datarray["uri"]); + /* * These fields are for the convenience of addons... * 'self' if true indicates the owner is posting on their own wall diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index 2a4dfe75e..e973fcb85 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -2485,7 +2485,6 @@ class Diaspora Tag::storeFromBody($datarray['uri-id'], $datarray["body"]); - //Post\Media::copy($original_item['uri-id'], $datarray['uri-id']); $datarray["app"] = $original_item["app"]; $datarray["plink"] = self::plink($author, $guid); @@ -3369,6 +3368,36 @@ class Diaspora return $eventdata; } + /** + * Add media attachments to the body + * + * @param array $item + * @return string body + */ + private static function addAttachments(array $item) + { + $body = $item['body']; + + foreach (Post\Media::getByURIId($item['uri-id'], [Post\Media::IMAGE, Post\Media::AUDIO, Post\Media::VIDEO]) as $media) { + if (Item::containsLink($item['body'], $media['url'])) { + continue; + } + + if ($media['type'] == Post\Media::IMAGE) { + if (!empty($media['description'])) { + $body .= "\n[img=" . $media['url'] . ']' . $media['description'] .'[/img]'; + } else { + $body .= "\n[img]" . $media['url'] .'[/img]'; + } + } elseif ($media['type'] == Post\Media::AUDIO) { + $body .= "\n[audio]" . $media['url'] . "[/audio]\n"; + } elseif ($media['type'] == Post\Media::VIDEO) { + $body .= "\n[video]" . $media['url'] . "[/video]\n"; + } + } + return $body; + } + /** * Create a post (status message or reshare) * @@ -3409,7 +3438,7 @@ class Diaspora $type = "reshare"; } else { $title = $item["title"]; - $body = $item["body"]; + $body = self::addAttachments($item); // Fetch the title from an attached link - if there is one if (empty($item["title"]) && DI::pConfig()->get($owner['uid'], 'system', 'attach_link_title')) { @@ -3623,7 +3652,7 @@ class Diaspora $thread_parent_item = Post::selectFirst(['guid', 'author-id', 'author-link', 'gravity'], ['uri' => $item['thr-parent'], 'uid' => $item['uid']]); } - $body = $item["body"]; + $body = self::addAttachments($item); // The replied to autor mention is prepended for clarity if: // - Item replied isn't yours