Merge pull request #12844 from HankG/mastodon-status-add-delivery-data
Add Delivery Information to Mastodon Status API Entity
This commit is contained in:
commit
de53109a49
|
@ -63,6 +63,10 @@ Extensions to the [Mastodon Status Entities](https://docs.joinmastodon.org/entit
|
||||||
* `in_reply_to_status`: A fully populated Mastodon Status entity for the replied to status or null it is a post rather than a response
|
* `in_reply_to_status`: A fully populated Mastodon Status entity for the replied to status or null it is a post rather than a response
|
||||||
* `friendica`: Friendica specific properties of a status including:
|
* `friendica`: Friendica specific properties of a status including:
|
||||||
* `title`: The Friendica title for a post, or empty if the status is a comment
|
* `title`: The Friendica title for a post, or empty if the status is a comment
|
||||||
|
* `delivery_data`: Information about the state of federating a message from the server
|
||||||
|
* `delivery_queue_count`: Total number of remote servers that the status needs to be federated to.
|
||||||
|
* `delivery_queue_done`: Total number of remote servers that have successfully been federated to so far.
|
||||||
|
* `delivery_queue_failed`: Total number of remote servers that have we failed to federate to so far.
|
||||||
* `dislikes_count`: The number of dislikes that a status has accumulated according to the server.
|
* `dislikes_count`: The number of dislikes that a status has accumulated according to the server.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
@ -111,6 +115,11 @@ Example:
|
||||||
...
|
...
|
||||||
"friendica": {
|
"friendica": {
|
||||||
"title": "",
|
"title": "",
|
||||||
|
"delivery_data": {
|
||||||
|
"delivery_queue_count": 10,
|
||||||
|
"delivery_queue_done": 3,
|
||||||
|
"delivery_queue_failed": 0
|
||||||
|
},
|
||||||
"dislikes_count": 0
|
"dislikes_count": 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,8 @@ use Friendica\Model\Post;
|
||||||
use Friendica\Model\Tag as TagModel;
|
use Friendica\Model\Tag as TagModel;
|
||||||
use Friendica\Model\Verb;
|
use Friendica\Model\Verb;
|
||||||
use Friendica\Network\HTTPException;
|
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\Activity;
|
||||||
use Friendica\Protocol\ActivityPub;
|
use Friendica\Protocol\ActivityPub;
|
||||||
use ImagickException;
|
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
|
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',
|
$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]]);
|
$item = Post::selectFirst($fields, ['uri-id' => $uriId, 'uid' => [0, $uid]], ['order' => ['uid' => true]]);
|
||||||
if (!$item) {
|
if (!$item) {
|
||||||
$mail = DBA::selectFirst('mail', ['id'], ['uri-id' => $uriId, 'uid' => $uid]);
|
$mail = DBA::selectFirst('mail', ['id'], ['uri-id' => $uriId, 'uid' => $uid]);
|
||||||
|
@ -285,7 +288,10 @@ class Status extends BaseFactory
|
||||||
$in_reply = [];
|
$in_reply = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
return new \Friendica\Object\Api\Mastodon\Status($item, $account, $counts, $userAttributes, $sensitive, $application, $mentions, $tags, $card, $attachments, $in_reply, $reshare, $quote, $poll);
|
$delivery_data = new FriendicaDeliveryData($item['delivery_queue_count'], $item['delivery_queue_done'], $item['delivery_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 +355,8 @@ class Status extends BaseFactory
|
||||||
$attachments = [];
|
$attachments = [];
|
||||||
$in_reply = [];
|
$in_reply = [];
|
||||||
$reshare = [];
|
$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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -105,7 +105,7 @@ class Status extends BaseDataTransferObject
|
||||||
* @param array $item
|
* @param array $item
|
||||||
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
* @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->id = (string)$item['uri-id'];
|
||||||
$this->created_at = DateTimeFormat::utc($item['created'], DateTimeFormat::JSON);
|
$this->created_at = DateTimeFormat::utc($item['created'], DateTimeFormat::JSON);
|
||||||
|
@ -151,7 +151,7 @@ class Status extends BaseDataTransferObject
|
||||||
$this->emojis = [];
|
$this->emojis = [];
|
||||||
$this->card = $card->toArray() ?: null;
|
$this->card = $card->toArray() ?: null;
|
||||||
$this->poll = $poll;
|
$this->poll = $poll;
|
||||||
$this->friendica = new FriendicaExtension($item['title'], $counts->dislikes);
|
$this->friendica = $friendica;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
55
src/Object/Api/Mastodon/Status/FriendicaDeliveryData.php
Normal file
55
src/Object/Api/Mastodon/Status/FriendicaDeliveryData.php
Normal file
|
@ -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|null */
|
||||||
|
protected $delivery_queue_count;
|
||||||
|
|
||||||
|
/** @var int|null */
|
||||||
|
protected $delivery_queue_done;
|
||||||
|
|
||||||
|
/** @var int|null */
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -35,6 +35,8 @@ class FriendicaExtension extends BaseDataTransferObject
|
||||||
/** @var string */
|
/** @var string */
|
||||||
protected $title;
|
protected $title;
|
||||||
|
|
||||||
|
/** @var FriendicaDeliveryData */
|
||||||
|
protected $delivery_data;
|
||||||
/** @var int */
|
/** @var int */
|
||||||
protected $dislikes_count;
|
protected $dislikes_count;
|
||||||
|
|
||||||
|
@ -42,11 +44,13 @@ class FriendicaExtension extends BaseDataTransferObject
|
||||||
* Creates a status count object
|
* Creates a status count object
|
||||||
*
|
*
|
||||||
* @param string $title
|
* @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->title = $title;
|
||||||
|
$this->delivery_data = $delivery_data;
|
||||||
$this->dislikes_count = $dislikes_count;
|
$this->dislikes_count = $dislikes_count;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue