]> git.mxchange.org Git - friendica-addons.git/commitdiff
Twitter: Attachments are stripped from the body / Posting connectors: Add attachments...
authorMichael <heluecht@pirati.ca>
Sat, 1 May 2021 08:59:14 +0000 (08:59 +0000)
committerMichael <heluecht@pirati.ca>
Sat, 1 May 2021 08:59:14 +0000 (08:59 +0000)
diaspora/diaspora.php
dwpost/dwpost.php
libertree/libertree.php
ljpost/ljpost.php
pumpio/pumpio.php
statusnet/statusnet.php
tumblr/tumblr.php
twitter/twitter.php
wppost/wppost.php

index 77aef3af0a1742eddd8d8bd32af0e22a63bb1e01..599e52239d1c5b0e7a91668ada3325d2a1537c7a 100644 (file)
@@ -18,6 +18,7 @@ use Friendica\Core\Session;
 use Friendica\Database\DBA;
 use Friendica\Core\Worker;
 use Friendica\DI;
+use Friendica\Model\Post;
 
 function diaspora_install()
 {
@@ -197,6 +198,8 @@ function diaspora_send(App $a, array &$b)
                return;
        }
 
+       $b['body'] = Post\Media::addAttachmentsToBody($b['uri-id'], $b['body']);
+
        // Dont't post if the post doesn't belong to us.
        // This is a check for forum postings
        $self = DBA::selectFirst('contact', ['id'], ['uid' => $b['uid'], 'self' => true]);
index da35aa0fd5d97b4757edd0b4dbe9a61b36170cb8..ce4d90968be64823698e817508367e1f4f2ae654 100644 (file)
@@ -14,6 +14,7 @@ use Friendica\Core\Hook;
 use Friendica\Core\Logger;
 use Friendica\Database\DBA;
 use Friendica\DI;
+use Friendica\Model\Post;
 use Friendica\Model\Tag;
 use Friendica\Util\DateTimeFormat;
 use Friendica\Util\XML;
@@ -159,6 +160,8 @@ function dwpost_send(App $a, array &$b)
                return;
        }
 
+       $b['body'] = Post\Media::addAttachmentsToBody($b['uri-id'], $b['body']);
+
        /*
         * dreamwidth post in the LJ user's timezone.
         * Hopefully the person's Friendica account
index 1062ab5a126c61d22c3df96d0b240e107baa5137..a38a858244cf8e097256944e6c2334e8540cef39 100644 (file)
@@ -12,6 +12,7 @@ use Friendica\Core\Hook;
 use Friendica\Core\Logger;
 use Friendica\Database\DBA;
 use Friendica\DI;
+use Friendica\Model\Post;
 
 function libertree_install()
 {
@@ -191,6 +192,8 @@ function libertree_send(&$a,&$b) {
                return;
        }
 
+       $b['body'] = Post\Media::addAttachmentsToBody($b['uri-id'], $b['body']);
+
        $ltree_api_token = DI::pConfig()->get($b['uid'],'libertree','libertree_api_token');
        $ltree_url = DI::pConfig()->get($b['uid'],'libertree','libertree_url');
        $ltree_blog = "$ltree_url/api/v1/posts/create/?token=$ltree_api_token";
index 0d06100866723099109ca1e7b6253ded0c16b80e..be831fa50c991758b0cd7beb3f011a4bbe9a8f16 100644 (file)
@@ -12,6 +12,7 @@ use Friendica\Content\Text\BBCode;
 use Friendica\Core\Hook;
 use Friendica\Core\Logger;
 use Friendica\DI;
+use Friendica\Model\Post;
 use Friendica\Model\Tag;
 use Friendica\Util\DateTimeFormat;
 use Friendica\Util\XML;
@@ -153,6 +154,8 @@ function ljpost_send(&$a,&$b) {
     if($b['parent'] != $b['id'])
         return;
 
+       $b['body'] = Post\Media::addAttachmentsToBody($b['uri-id'], $b['body']);
+
        // LiveJournal post in the LJ user's timezone.
        // Hopefully the person's Friendica account
        // will be set to the same thing.
index 8e60f46d7e749f7fa304d0e1d2b5f551593be165..5f03c6c57f499c766508af48e37a27420509b4e2 100644 (file)
@@ -436,6 +436,8 @@ function pumpio_send(App $a, array &$b)
 
        Logger::log("pumpio_send: parameter ".print_r($b, true), Logger::DATA);
 
+       $b['body'] = Post\Media::addAttachmentsToBody($b['uri-id'], $b['body']);
+
        if ($b['parent'] != $b['id']) {
                // Looking if its a reply to a pumpio post
                $condition = ['id' => $b['parent'], 'network' => Protocol::PUMPIO];
index ae4f7c13945b6ef31e4dbccecec8d167a786ec5f..bb51e24ba6287bc2822a032ea0d4f8076cd44b43 100644 (file)
@@ -481,6 +481,8 @@ function statusnet_post_hook(App $a, &$b)
                        return;
        }
 
+       $b['body'] = Post\Media::addAttachmentsToBody($b['uri-id'], $b['body']);
+
        $api = DI::pConfig()->get($b["uid"], 'statusnet', 'baseapi');
        $hostname = preg_replace("=https?://([\w\.]*)/.*=ism", "$1", $api);
 
index 4504534cbdc737fff9c7a0215513426b07d45ccf..3dc89a37258738457e18b079b0f7fbc5e3dae0d9 100644 (file)
@@ -16,6 +16,7 @@ use Friendica\Core\Logger;
 use Friendica\Core\Renderer;
 use Friendica\Database\DBA;
 use Friendica\DI;
+use Friendica\Model\Post;
 use Friendica\Model\Tag;
 use Friendica\Util\Strings;
 
@@ -366,6 +367,8 @@ function tumblr_send(App $a, array &$b) {
                return;
        }
 
+       $b['body'] = Post\Media::addAttachmentsToBody($b['uri-id'], $b['body']);
+
        $oauth_token = DI::pConfig()->get($b['uid'], "tumblr", "oauth_token");
        $oauth_token_secret = DI::pConfig()->get($b['uid'], "tumblr", "oauth_token_secret");
        $page = DI::pConfig()->get($b['uid'], "tumblr", "page");
index a68b5b6a98d18b279dda8e97eda6dda0b8b425e6..41f865e8e4fdcf57c64e22b3d6c16f6a0dee23cc 100644 (file)
@@ -66,8 +66,6 @@ use Abraham\TwitterOAuth\TwitterOAuth;
 use Abraham\TwitterOAuth\TwitterOAuthException;
 use Codebird\Codebird;
 use Friendica\App;
-use Friendica\Content\OEmbed;
-use Friendica\Content\PageInfo;
 use Friendica\Content\Text\BBCode;
 use Friendica\Content\Text\Plaintext;
 use Friendica\Core\Hook;
@@ -544,6 +542,8 @@ function twitter_post_hook(App $a, array &$b)
                return;
        }
 
+       $b['body'] = Post\Media::addAttachmentsToBody($b['uri-id'], $b['body']);
+
        $thr_parent = null;
 
        if ($b['parent'] != $b['id']) {
@@ -1356,13 +1356,13 @@ function twitter_fetchuser($screen_name)
  *
  * @param string   $body
  * @param stdClass $status
- * @param string   $picture
  * @return array
  * @throws \Friendica\Network\HTTPException\InternalServerErrorException
  */
-function twitter_expand_entities($body, stdClass $status, $picture)
+function twitter_expand_entities($body, stdClass $status)
 {
        $plain = $body;
+       $contains_urls = false;
 
        $taglist = [];
 
@@ -1403,40 +1403,17 @@ function twitter_expand_entities($body, stdClass $status, $picture)
                                continue;
                        }
 
-                       $expanded_url = $url->expanded_url;
-
-                       $final_url = DI::httpRequest()->finalUrl($url->expanded_url);
-
-                       $oembed_data = OEmbed::fetchURL($final_url);
+                       $contains_urls = true;
 
-                       $type = $oembed_data->type ?? '';
+                       $expanded_url = $url->expanded_url;
 
                        // Quickfix: Workaround for URL with '[' and ']' in it
                        if (strpos($expanded_url, '[') || strpos($expanded_url, ']')) {
                                $expanded_url = $url->url;
                        }
 
-                       if ($type === 'photo' && !empty($oembed_data->url)) {
-                               $replace = '[url=' . $expanded_url . '][img]' . $oembed_data->url . '[/img][/url]';
-                       } elseif ($type === 'link') {
-                               $curlResult = DI::httpRequest()->head($final_url, ['timeout' => 4]);
-                               if ($curlResult->isSuccess()) {
-                                       $mimetype = $curlResult->getHeader('Content-Type');
-                               } else {
-                                       $mimetype = '';
-                               }
-
-                               if (substr($mimetype, 0, 6) == 'image/') {
-                                       $replace = '[img]' . $final_url . '[/img]';
-                               } else {
-                                       $replace = '[url=' . $expanded_url . ']' . $url->display_url . '[/url]';
-                               }
-                       } else {
-                               $replace = '[url=' . $expanded_url . ']' . $url->display_url . '[/url]';
-                       }
-
                        $replacementList[$url->indices[0]] = [
-                               'replace' => $replace,
+                               'replace' => '[url=' . $expanded_url . ']' . $url->display_url . '[/url]',
                                'length' => $url->indices[1] - $url->indices[0],
                        ];
                }
@@ -1450,14 +1427,7 @@ function twitter_expand_entities($body, stdClass $status, $picture)
 
        $body = trim($body);
 
-       // Footer will be taken care of with a share block in the case of a quote
-       if (empty($status->quoted_status)) {
-               if ($picture) {
-                       $body .= "\n\n[img]" . $picture . "[/img]\n";
-               }
-       }
-
-       return ['body' => trim($body), 'plain' => trim($plain), 'taglist' => $taglist];
+       return ['body' => trim($body), 'plain' => trim($plain), 'taglist' => $taglist, 'urls' => $contains_urls];
 }
 
 /**
@@ -1474,15 +1444,9 @@ function twitter_store_attachments(int $uriid, $post)
                                case 'photo':
                                        $attachment = ['uri-id' => $uriid, 'type' => Post\Media::IMAGE];
 
-                                       // @todo In the future store the large picture.
-                                       // This can be done when we don't embed the pictures in the body anymore.
-                                       //$attachment['url'] = $medium->media_url_https . '?name=large';
-                                       //$attachment['width'] = $medium->sizes->large->w;
-                                       //$attachment['height'] = $medium->sizes->large->h;
-
-                                       $attachment['url'] = $medium->media_url_https;
-                                       $attachment['width'] = $medium->sizes->medium->w;
-                                       $attachment['height'] = $medium->sizes->medium->h;
+                                       $attachment['url'] = $medium->media_url_https . '?name=large';
+                                       $attachment['width'] = $medium->sizes->large->w;
+                                       $attachment['height'] = $medium->sizes->large->h;
 
                                        if ($medium->sizes->small->w != $attachment['width']) {
                                                $attachment['preview'] = $medium->media_url_https . '?name=small';
@@ -1535,35 +1499,17 @@ function twitter_store_attachments(int $uriid, $post)
 /**
  * @brief Fetch media entities and add media links to the body
  *
- * @param object $post Twitter object with the post
- * @param array $postarray Array of the item that is about to be posted
- *
- * @return $picture string Image URL or empty string
+ * @param object  $post      Twitter object with the post
+ * @param array   $postarray Array of the item that is about to be posted
+ * @param integer $uriid URI Id used to store tags. -1 = don't store tags for this post.
  */
-function twitter_media_entities($post, array &$postarray)
+function twitter_media_entities($post, array &$postarray, int $uriid = -1)
 {
        // There are no media entities? So we quit.
        if (empty($post->extended_entities->media)) {
-               return '';
-       }
-
-       // When the post links to an external page, we only take one picture.
-       // We only do this when there is exactly one media.
-       if ((count($post->entities->urls) > 0) && (count($post->extended_entities->media) == 1)) {
-               $medium = $post->extended_entities->media[0];
-               $picture = '';
-               foreach ($post->entities->urls as $link) {
-                       // Let's make sure the external link url matches the media url
-                       if ($medium->url == $link->url && isset($medium->media_url_https)) {
-                               $picture = $medium->media_url_https;
-                               $postarray['body'] = str_replace($medium->url, '', $postarray['body']);
-                               return $picture;
-                       }
-               }
+               return;
        }
 
-
-
        // This is a pure media post, first search for all media urls
        $media = [];
        foreach ($post->extended_entities->media AS $medium) {
@@ -1583,7 +1529,9 @@ function twitter_media_entities($post, array &$postarray)
                                $postarray['post-type'] = Item::PT_IMAGE;
                                break;
                        case 'video':
-                               $postarray['post-type'] = Item::PT_VIDEO;
+                               // Currently deactivated, since this causes the video to be display before the content
+                               // We have to figure out a better way for declaring the post type and the display style.
+                               //$postarray['post-type'] = Item::PT_VIDEO;
                        case 'animated_gif':
                                if (!empty($medium->ext_alt_text)) {
                                        Logger::info('Got text description', ['alt_text' => $medium->ext_alt_text]);
@@ -1604,18 +1552,20 @@ function twitter_media_entities($post, array &$postarray)
                                        }
                                }
                                break;
-                       // The following code will only be activated for test reasons
-                       //default:
-                       //      $postarray['body'] .= print_r($medium, true);
                }
        }
 
+       if ($uriid != -1) {
+               foreach ($media AS $key => $value) {
+                       $postarray['body'] = str_replace($key, '', $postarray['body']);
+               }
+               return;
+       }
+
        // Now we replace the media urls.
        foreach ($media AS $key => $value) {
                $postarray['body'] = str_replace($key, "\n" . $value . "\n", $postarray['body']);
        }
-
-       return '';
 }
 
 /**
@@ -1737,9 +1687,15 @@ function twitter_createpost(App $a, $uid, $post, array $self, $create_user, $onl
        }
 
        // Search for media links
-       $picture = twitter_media_entities($post, $postarray);
+       twitter_media_entities($post, $postarray, $uriid);
+
+       $converted = twitter_expand_entities($postarray['body'], $post);
+
+       // When the post contains external links then images or videos are just "decorations".
+       if (!empty($converted['urls'])) {
+               $postarray['post-type'] = Item::PT_NOTE;
+       }
 
-       $converted = twitter_expand_entities($postarray['body'], $post, $picture);
        $postarray['body'] = $converted['body'];
        $postarray['created'] = DateTimeFormat::utc($post->created_at);
        $postarray['edited'] = DateTimeFormat::utc($post->created_at);
index f9caf232857da1b62cb43ff958230a3de7a8022a..1d24dbcfc7db137ae7f4c3088254c033cee11891 100644 (file)
@@ -12,7 +12,7 @@ use Friendica\Core\Hook;
 use Friendica\Core\Logger;
 use Friendica\Database\DBA;
 use Friendica\DI;
-use Friendica\Util\Strings;
+use Friendica\Model\Post;
 use Friendica\Util\XML;
 
 function wppost_install()
@@ -223,6 +223,8 @@ function wppost_send(&$a, &$b)
                return;
        }
 
+       $b['body'] = Post\Media::addAttachmentsToBody($b['uri-id'], $b['body']);
+
        $wp_username = XML::escape(DI::pConfig()->get($b['uid'], 'wppost', 'wp_username'));
        $wp_password = XML::escape(DI::pConfig()->get($b['uid'], 'wppost', 'wp_password'));
        $wp_blog = DI::pConfig()->get($b['uid'],'wppost','wp_blog');