]> git.mxchange.org Git - friendica.git/commitdiff
Diaspora: Photos are now transmitted separately
authorMichael <heluecht@pirati.ca>
Sat, 7 Jan 2023 15:11:34 +0000 (15:11 +0000)
committerMichael <heluecht@pirati.ca>
Sat, 7 Jan 2023 15:11:34 +0000 (15:11 +0000)
src/Module/Photo.php
src/Protocol/ActivityPub/Transmitter.php
src/Protocol/Diaspora.php
static/routes.config.php

index 3f18058de28cf3899cbe5770751379e869da4b96..687ba98c741be25d7edc9512742bf610d689edfc 100644 (file)
@@ -137,6 +137,18 @@ class Photo extends BaseModule
                                $scale = intval(substr($photoid, -1, 1));
                                $photoid = substr($photoid, 0, -2);
                        }
+
+                       if (!empty($this->parameters['size'])) {
+                               switch ($this->parameters['size']) {
+                                       case 'thumb_small':
+                                               $scale = 2;
+                                               break;
+                                       case 'scaled_full':
+                                               $scale = 1;
+                                               break;
+                                       }
+                       }
+
                        $photo = MPhoto::getPhoto($photoid, $scale);
                        if ($photo === false) {
                                throw new HTTPException\NotFoundException(DI::l10n()->t('The Photo with id %s is not available.', $photoid));
index 418a727e2a51b190a1d53854996546bfb7e619e8..6e1180bca81c6047acf6601faaff70c41c3339be 100644 (file)
@@ -1707,6 +1707,7 @@ class Transmitter
                $language = self::getLanguage($item);
                if (!empty($language)) {
                        $richbody = BBCode::setMentionsToNicknames($item['body'] ?? '');
+                       $richbody = Post\Media::removeFromEndOfBody($richbody);
                        if (!empty($item['quote-uri-id'])) {
                                if ($real_quote) {
                                        $richbody = DI::contentItem()->addShareLink($richbody, $item['quote-uri-id']);
index bf6bfdd63dcefd078ff2fa36e4e86d40e198b15c..225809b8b3bf03e0f48f92b4386df26d52df9095 100644 (file)
@@ -3317,8 +3317,10 @@ class Diaspora
 
                        $type = 'reshare';
                } else {
+                       $item['body'] = Post\Media::removeFromEndOfBody($item['body']);
+
                        $title = $item['title'];
-                       $body  = Post\Media::addAttachmentsToBody($item['uri-id'], DI::contentItem()->addSharedPost($item));
+                       $body  = Post\Media::addAttachmentsToBody($item['uri-id'], DI::contentItem()->addSharedPost($item), [Post\Media::AUDIO, Post\Media::VIDEO]);
 
                        // Fetch the title from an attached link - if there is one
                        if (empty($item['title']) && DI::pConfig()->get($owner['uid'], 'system', 'attach_link_title')) {
@@ -3366,6 +3368,8 @@ class Diaspora
                                'location' => $location
                        ];
 
+                       $message = self::addPhotos($item, $message);
+
                        // Diaspora rejects messages when they contain a location without "lat" or "lng"
                        if (!isset($location['lat']) || !isset($location['lng'])) {
                                unset($message['location']);
@@ -3400,6 +3404,37 @@ class Diaspora
                return $msg;
        }
 
+       private static function addPhotos(array $item, array $message): array
+       {
+               $medias = Post\Media::getByURIId($item['uri-id'], [Post\Media::IMAGE]);
+               $public = ($item['private'] == Item::PRIVATE ? 'false' : 'true');
+
+               $counter = 0;
+               foreach ($medias as $media) {
+                       if (Item::containsLink($item['body'], $media['preview'] ?? $media['url'], $media['type'])) {
+                               continue;
+                       }
+
+                       $name = basename($media['url']);
+                       $path = str_replace($name, '', $media['url']);
+
+                       $message[++$counter . ':photo'] = [
+                               'guid'                => Item::guid(['uri' => $media['url']], false),
+                               'author'              => $item['author-addr'],
+                               'public'              => $public,
+                               'created_at'          => $item['created'],
+                               'remote_photo_path'   => $path,
+                               'remote_photo_name'   => $name,
+                               'status_message_guid' => $item['guid'],
+                               'height'              => $media['height'],
+                               'width'               => $media['width'],
+                               'text'                => $media['description'],
+                       ];
+               }
+
+               return $message;
+       }
+
        private static function prependParentAuthorMention(string $body, string $profile_url): string
        {
                $profile = Contact::getByURL($profile_url, false, ['addr', 'name']);
index ad8cff51915ccc10b824be9a7555c4176e8a7b0e..1c6268aa952e2c3c303475c69eb3daa6338fcaa6 100644 (file)
@@ -554,6 +554,7 @@ return [
        '/permission/tooltip/{type}/{id:\d+}' => [Module\PermissionTooltip::class, [R::GET]],
 
        '/photo' => [
+               '/{size:thumb_small|scaled_full}_{name}'                   => [Module\Photo::class, [R::GET]],
                '/{name}'                                                  => [Module\Photo::class, [R::GET]],
                '/{type}/{id:\d+}'                                         => [Module\Photo::class, [R::GET]],
                '/{type:contact|header}/{guid}'                            => [Module\Photo::class, [R::GET]],