]> git.mxchange.org Git - friendica.git/commitdiff
Add delivery status data to Mastodon Status Friendica Extension
authorHank Grabowski <hankgrabowski@gmail.com>
Sat, 25 Feb 2023 19:23:59 +0000 (14:23 -0500)
committerHank Grabowski <hankgrabowski@gmail.com>
Sat, 25 Feb 2023 19:23:59 +0000 (14:23 -0500)
src/Factory/Api/Mastodon/Status.php
src/Object/Api/Mastodon/Status.php
src/Object/Api/Mastodon/Status/FriendicaDeliveryData.php [new file with mode: 0644]
src/Object/Api/Mastodon/Status/FriendicaExtension.php

index 788841a9bc4248a1e1fe6eaefd7a9cb233b86f94..c1065da4540c54dd92170ee8339d565cc1441c0f 100644 (file)
@@ -33,6 +33,8 @@ use Friendica\Model\Post;
 use Friendica\Model\Tag as TagModel;
 use Friendica\Model\Verb;
 use Friendica\Network\HTTPException;
+use Friendica\Object\Api\Mastodon\Status\FriendicaDeliveryData;
+use Friendica\Object\Api\Mastodon\Status\FriendicaExtension;
 use Friendica\Protocol\Activity;
 use Friendica\Protocol\ActivityPub;
 use ImagickException;
@@ -97,7 +99,8 @@ class Status extends BaseFactory
        public function createFromUriId(int $uriId, int $uid = 0, bool $display_quote = false, bool $reblog = true, bool $in_reply_status = true): \Friendica\Object\Api\Mastodon\Status
        {
                $fields = ['uri-id', 'uid', 'author-id', 'causer-id', 'author-uri-id', 'author-link', 'causer-uri-id', 'post-reason', 'starred', 'app', 'title', 'body', 'raw-body', 'content-warning', 'question-id',
-                       'created', 'network', 'thr-parent-id', 'parent-author-id', 'language', 'uri', 'plink', 'private', 'vid', 'gravity', 'featured', 'has-media', 'quote-uri-id'];
+                       'created', 'network', 'thr-parent-id', 'parent-author-id', 'language', 'uri', 'plink', 'private', 'vid', 'gravity', 'featured', 'has-media', 'quote-uri-id',
+                       'delivery_queue_count', 'delivery_queue_done','delivery_queue_failed'];
                $item = Post::selectFirst($fields, ['uri-id' => $uriId, 'uid' => [0, $uid]], ['order' => ['uid' => true]]);
                if (!$item) {
                        $mail = DBA::selectFirst('mail', ['id'], ['uri-id' => $uriId, 'uid' => $uid]);
@@ -285,7 +288,13 @@ class Status extends BaseFactory
                        $in_reply = [];
                }
 
-               return new \Friendica\Object\Api\Mastodon\Status($item, $account, $counts, $userAttributes, $sensitive, $application, $mentions, $tags, $card, $attachments, $in_reply, $reshare, $quote, $poll);
+               $queue_count   = $item['delivery_queue_count'];
+               $queue_done    = $item['delivery_queue_done'];
+               $queue_failed  = $item['delivery_queue_failed'];
+               $delivery_data = new FriendicaDeliveryData($queue_count, $queue_done, $queue_failed);
+               $friendica     = new FriendicaExtension($item['title'], $counts->dislikes, $delivery_data);
+
+               return new \Friendica\Object\Api\Mastodon\Status($item, $account, $counts, $userAttributes, $sensitive, $application, $mentions, $tags, $card, $attachments, $in_reply, $reshare, $friendica, $quote, $poll);
        }
 
        /**
@@ -349,7 +358,8 @@ class Status extends BaseFactory
                $attachments = [];
                $in_reply    = [];
                $reshare     = [];
+               $friendica   = new FriendicaExtension('', 0, new FriendicaDeliveryData(0, 0, 0));
 
-               return new \Friendica\Object\Api\Mastodon\Status($item, $account, $counts, $userAttributes, $sensitive, $application, $mentions, $tags, $card, $attachments, $in_reply, $reshare);
+               return new \Friendica\Object\Api\Mastodon\Status($item, $account, $counts, $userAttributes, $sensitive, $application, $mentions, $tags, $card, $attachments, $in_reply, $reshare, $friendica);
        }
 }
index 30f554bdf5d61433cba6936a43e0a4d61761a2d4..2e7a0877d46a32b35502f25271c80e36dc840ee5 100644 (file)
@@ -105,7 +105,7 @@ class Status extends BaseDataTransferObject
         * @param array   $item
         * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
-       public function __construct(array $item, Account $account, Counts $counts, UserAttributes $userAttributes, bool $sensitive, Application $application, array $mentions, array $tags, Card $card, array $attachments, array $in_reply, array $reblog, array $quote = null, array $poll = null)
+       public function __construct(array $item, Account $account, Counts $counts, UserAttributes $userAttributes, bool $sensitive, Application $application, array $mentions, array $tags, Card $card, array $attachments, array $in_reply, array $reblog, FriendicaExtension $friendica, array $quote = null, array $poll = null)
        {
                $this->id         = (string)$item['uri-id'];
                $this->created_at = DateTimeFormat::utc($item['created'], DateTimeFormat::JSON);
@@ -151,7 +151,7 @@ class Status extends BaseDataTransferObject
                $this->emojis = [];
                $this->card = $card->toArray() ?: null;
                $this->poll = $poll;
-               $this->friendica = new FriendicaExtension($item['title'], $counts->dislikes);
+               $this->friendica = $friendica;
        }
 
        /**
diff --git a/src/Object/Api/Mastodon/Status/FriendicaDeliveryData.php b/src/Object/Api/Mastodon/Status/FriendicaDeliveryData.php
new file mode 100644 (file)
index 0000000..2d9b151
--- /dev/null
@@ -0,0 +1,55 @@
+<?php
+/**
+ * @copyright Copyright (C) 2010-2023, the Friendica project
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Friendica\Object\Api\Mastodon\Status;
+
+use Friendica\BaseDataTransferObject;
+
+/**
+ * Class FriendicaDeliveryData
+ *
+ * Additional fields on Mastodon Statuses for storing Friendica delivery data
+ *
+ * @see https://docs.joinmastodon.org/entities/status
+ */
+class FriendicaDeliveryData extends BaseDataTransferObject
+{
+       /** @var int */
+       protected $delivery_queue_count;
+
+       /** @var int */
+       protected $delivery_queue_done;
+
+       /** @var int */
+       protected $delivery_queue_failed;
+
+       /**
+        * Creates a FriendicaDeliveryData object
+        *
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+        */
+       public function __construct(int $delivery_queue_count, int $delivery_queue_done, int $delivery_queue_failed)
+       {
+               $this->delivery_queue_count  = $delivery_queue_count;
+               $this->delivery_queue_done   = $delivery_queue_done;
+               $this->delivery_queue_failed = $delivery_queue_failed;
+       }
+}
index 1db70f7312074c9ae5268ea3280c0ee977511945..b2853894ade62d364cbb6e3e54c4a2522d4b953a 100644 (file)
@@ -35,6 +35,8 @@ class FriendicaExtension extends BaseDataTransferObject
        /** @var string */
        protected $title;
 
+       /** @var FriendicaDeliveryData */
+       protected $delivery_data;
        /** @var int */
        protected $dislikes_count;
 
@@ -42,11 +44,13 @@ class FriendicaExtension extends BaseDataTransferObject
         * Creates a status count object
         *
         * @param string $title
-        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+        * @param int $dislikes_count
+        * @param FriendicaDeliveryData $delivery_data
         */
-       public function __construct(string $title, int $dislikes_count)
+       public function __construct(string $title, int $dislikes_count, FriendicaDeliveryData $delivery_data)
        {
                $this->title          = $title;
+               $this->delivery_data  = $delivery_data;
                $this->dislikes_count = $dislikes_count;
        }
 }