diff --git a/doc/API-Mastodon.md b/doc/API-Mastodon.md index e34ec4cc9..d9e6f22b6 100644 --- a/doc/API-Mastodon.md +++ b/doc/API-Mastodon.md @@ -15,6 +15,10 @@ These endpoints use the [Mastodon API entities](https://docs.joinmastodon.org/en ## Implemented endpoints +- [`GET /api/v1/custom_emojis`](https://docs.joinmastodon.org/methods/instance/custom_emojis/) + - Doesn't return unicode emojis since they aren't using an image URL + + - [`GET /api/v1/follow_requests`](https://docs.joinmastodon.org/methods/accounts/follow_requests#pending-follows) - Returned IDs are specific to follow requests - [`POST /api/v1/follow_requests/:id/authorize`](https://docs.joinmastodon.org/methods/accounts/follow_requests#accept-follow) diff --git a/src/Api/Entity/Mastodon/Emoji.php b/src/Api/Entity/Mastodon/Emoji.php deleted file mode 100644 index f3dbfa5e7..000000000 --- a/src/Api/Entity/Mastodon/Emoji.php +++ /dev/null @@ -1,22 +0,0 @@ -create(Factory\Mastodon\Account::class); + return self::$dice->create(Factory\Api\Mastodon\Account::class); } /** - * @return Factory\Mastodon\FollowRequest + * @return Factory\Api\Mastodon\Emoji + */ + public static function mstdnEmoji() + { + return self::$dice->create(Factory\Api\Mastodon\Emoji::class); + } + + /** + * @return Factory\Api\Mastodon\FollowRequest */ public static function mstdnFollowRequest() { - return self::$dice->create(Factory\Mastodon\FollowRequest::class); + return self::$dice->create(Factory\Api\Mastodon\FollowRequest::class); } /** - * @return Factory\Mastodon\Relationship + * @return Factory\Api\Mastodon\Relationship */ public static function mstdnRelationship() { - return self::$dice->create(Factory\Mastodon\Relationship::class); + return self::$dice->create(Factory\Api\Mastodon\Relationship::class); } /** - * @return \Friendica\Factory\Notification\Notification + * @return Factory\Notification\Notification */ public static function notification() { @@ -253,7 +261,7 @@ abstract class DI } /** - * @return \Friendica\Factory\Notification\Introduction + * @return Factory\Notification\Introduction */ public static function notificationIntro() { diff --git a/src/Factory/Mastodon/Account.php b/src/Factory/Api/Mastodon/Account.php similarity index 86% rename from src/Factory/Mastodon/Account.php rename to src/Factory/Api/Mastodon/Account.php index e38654b29..60f9a76e1 100644 --- a/src/Factory/Mastodon/Account.php +++ b/src/Factory/Api/Mastodon/Account.php @@ -1,12 +1,12 @@ baseUrl, $publicContact, $apcontact, $userContact); + return new \Friendica\Object\Api\Mastodon\Account($this->baseUrl, $publicContact, $apcontact, $userContact); } } diff --git a/src/Factory/Api/Mastodon/Emoji.php b/src/Factory/Api/Mastodon/Emoji.php new file mode 100644 index 000000000..42c500d42 --- /dev/null +++ b/src/Factory/Api/Mastodon/Emoji.php @@ -0,0 +1,45 @@ + $shortcode) { + if (preg_match('/src="(.+?)"/', $smilies['icons'][$key], $matches)) { + $url = $matches[1]; + + if ($prototype === null) { + $prototype = $this->create($shortcode, $url); + $emojis[] = $prototype; + } else { + $emojis[] = \Friendica\Object\Api\Mastodon\Emoji::createFromPrototype($prototype, $shortcode, $url); + } + }; + } + + return new Emojis($emojis); + } +} diff --git a/src/Factory/Mastodon/FollowRequest.php b/src/Factory/Api/Mastodon/FollowRequest.php similarity index 88% rename from src/Factory/Mastodon/FollowRequest.php rename to src/Factory/Api/Mastodon/FollowRequest.php index bbaa3135c..e0125613a 100644 --- a/src/Factory/Mastodon/FollowRequest.php +++ b/src/Factory/Api/Mastodon/FollowRequest.php @@ -1,13 +1,13 @@ baseUrl, $introduction->id, $publicContact, $apcontact, $userContact); + return new \Friendica\Object\Api\Mastodon\FollowRequest($this->baseUrl, $introduction->id, $publicContact, $apcontact, $userContact); } } diff --git a/src/Factory/Mastodon/Relationship.php b/src/Factory/Api/Mastodon/Relationship.php similarity index 88% rename from src/Factory/Mastodon/Relationship.php rename to src/Factory/Api/Mastodon/Relationship.php index 25c9d4c8c..121d57e2a 100644 --- a/src/Factory/Mastodon/Relationship.php +++ b/src/Factory/Api/Mastodon/Relationship.php @@ -1,8 +1,8 @@ createCollectionFromSmilies(Smilies::getList()); + + System::jsonExit($emojis->getArrayCopy()); + } +} diff --git a/src/Module/Api/Mastodon/FollowRequests.php b/src/Module/Api/Mastodon/FollowRequests.php index fc384f797..3b2de61bc 100644 --- a/src/Module/Api/Mastodon/FollowRequests.php +++ b/src/Module/Api/Mastodon/FollowRequests.php @@ -2,18 +2,15 @@ namespace Friendica\Module\Api\Mastodon; -use Friendica\Api\Entity\Mastodon; -use Friendica\Api\Entity\Mastodon\Relationship; use Friendica\Core\System; use Friendica\DI; -use Friendica\Model\Contact; -use Friendica\Module\Base\Api; +use Friendica\Module\BaseApi; use Friendica\Network\HTTPException; /** * @see https://docs.joinmastodon.org/methods/accounts/follow_requests */ -class FollowRequests extends Api +class FollowRequests extends BaseApi { public static function init(array $parameters = []) { diff --git a/src/Module/Api/Mastodon/Instance.php b/src/Module/Api/Mastodon/Instance.php index cc7639f46..927642887 100644 --- a/src/Module/Api/Mastodon/Instance.php +++ b/src/Module/Api/Mastodon/Instance.php @@ -2,14 +2,14 @@ namespace Friendica\Module\Api\Mastodon; -use Friendica\Api\Entity\Mastodon\Instance as InstanceEntity; use Friendica\Core\System; -use Friendica\Module\Base\Api; +use Friendica\Module\BaseApi; +use Friendica\Object\Api\Mastodon\Instance as InstanceEntity; /** * @see https://docs.joinmastodon.org/api/rest/instances/ */ -class Instance extends Api +class Instance extends BaseApi { /** * @param array $parameters diff --git a/src/Module/Api/Mastodon/Instance/Peers.php b/src/Module/Api/Mastodon/Instance/Peers.php index 5eaf355cc..99c878fcb 100644 --- a/src/Module/Api/Mastodon/Instance/Peers.php +++ b/src/Module/Api/Mastodon/Instance/Peers.php @@ -5,14 +5,14 @@ namespace Friendica\Module\Api\Mastodon\Instance; use Friendica\Core\Protocol; use Friendica\Core\System; use Friendica\Database\DBA; -use Friendica\Module\Base\Api; +use Friendica\Module\BaseApi; use Friendica\Network\HTTPException; use Friendica\Util\Network; /** * Undocumented API endpoint that is implemented by both Mastodon and Pleroma */ -class Peers extends Api +class Peers extends BaseApi { /** * @param array $parameters diff --git a/src/Module/Base/Api.php b/src/Module/BaseApi.php similarity index 95% rename from src/Module/Base/Api.php rename to src/Module/BaseApi.php index 7349f45fa..81814bb0d 100644 --- a/src/Module/Base/Api.php +++ b/src/Module/BaseApi.php @@ -1,14 +1,14 @@ shortcode = $shortcode; + $this->url = $url; + $this->static_url = $url; + } + + /** + * @param Emoji $prototype + * @param string $shortcode + * @param string $url + * @return Emoji + */ + public static function createFromPrototype(Emoji $prototype, string $shortcode, string $url) + { + $emoji = clone $prototype; + $emoji->shortcode = $shortcode; + $emoji->url = $url; + $emoji->static_url = $url; + + return $emoji; + } +} diff --git a/src/Api/Entity/Mastodon/Field.php b/src/Object/Api/Mastodon/Field.php similarity index 78% rename from src/Api/Entity/Mastodon/Field.php rename to src/Object/Api/Mastodon/Field.php index f01128ad4..07cd2e501 100644 --- a/src/Api/Entity/Mastodon/Field.php +++ b/src/Object/Api/Mastodon/Field.php @@ -1,8 +1,8 @@ [ '/v1' => [ + '/custom_emojis' => [Module\Api\Mastodon\CustomEmojis::class, [R::GET ]], '/follow_requests' => [Module\Api\Mastodon\FollowRequests::class, [R::GET ]], '/follow_requests/{id:\d+}/{action}' => [Module\Api\Mastodon\FollowRequests::class, [ R::POST]], - '/instance' => [Module\Api\Mastodon\Instance::class, [R::GET]], - '/instance/peers' => [Module\Api\Mastodon\Instance\Peers::class, [R::GET]], + '/instance' => [Module\Api\Mastodon\Instance::class, [R::GET ]], + '/instance/peers' => [Module\Api\Mastodon\Instance\Peers::class, [R::GET ]], ], ],