diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index 9f23fe13b..fd000dbe8 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -3316,10 +3316,16 @@ class Diaspora $type = 'reshare'; } else { - $item['body'] = Post\Media::removeFromEndOfBody($item['body']); + $native_photos = DI::config()->get('diaspora', 'native_photos'); + if ($native_photos) { + $item['body'] = Post\Media::removeFromEndOfBody($item['body']); + $attach_media = [Post\Media::AUDIO, Post\Media::VIDEO]; + } else { + $attach_media = [Post\Media::AUDIO, Post\Media::IMAGE, Post\Media::VIDEO]; + } $title = $item['title']; - $body = Post\Media::addAttachmentsToBody($item['uri-id'], DI::contentItem()->addSharedPost($item), [Post\Media::AUDIO, Post\Media::VIDEO]); + $body = Post\Media::addAttachmentsToBody($item['uri-id'], DI::contentItem()->addSharedPost($item), $attach_media); // Fetch the title from an attached link - if there is one if (empty($item['title']) && DI::pConfig()->get($owner['uid'], 'system', 'attach_link_title')) { @@ -3367,7 +3373,9 @@ class Diaspora 'location' => $location ]; - $message = self::addPhotos($item, $message); + if ($native_photos) { + $message = self::addPhotos($item, $message); + } // Diaspora rejects messages when they contain a location without "lat" or "lng" if (!isset($location['lat']) || !isset($location['lng'])) { @@ -3403,6 +3411,13 @@ class Diaspora return $msg; } + /** + * Add photo elements to the message array + * + * @param array $item + * @param array $message + * @return array + */ private static function addPhotos(array $item, array $message): array { $medias = Post\Media::getByURIId($item['uri-id'], [Post\Media::IMAGE]); diff --git a/static/defaults.config.php b/static/defaults.config.php index 967ca54eb..b3175c5d7 100644 --- a/static/defaults.config.php +++ b/static/defaults.config.php @@ -711,6 +711,13 @@ return [ // Must be writable by the ejabberd process. if set then it will prevent the running of multiple processes. 'lockpath' => '', ], + 'diaspora' => [ + // native_photos (Boolean) + // If enabled, photos to Diaspora will be transmitted via the "photo" element instead of embedding them to the body. + // This is some visual improvement over the embedding but comes with the cost of losing accessibility. + // Is is disabled by default until Diaspora eventually will work on issue https://github.com/diaspora/diaspora/issues/8297 + 'native_photos' => false, + ], 'debug' => [ // ap_inbox_log (Boolean) // Logs every call to /inbox as a JSON file in Friendica's temporary directory