]> git.mxchange.org Git - friendica.git/commitdiff
API: Counts added, local query improved
authorMichael <heluecht@pirati.ca>
Sun, 6 Sep 2020 07:12:04 +0000 (07:12 +0000)
committerMichael <heluecht@pirati.ca>
Sun, 6 Sep 2020 07:12:04 +0000 (07:12 +0000)
src/Factory/Api/Mastodon/Status.php
src/Module/Api/Mastodon/Timelines/PublicTimeline.php
src/Object/Api/Mastodon/Activity.php [new file with mode: 0644]
src/Object/Api/Mastodon/Application.php [new file with mode: 0644]
src/Object/Api/Mastodon/Status.php

index 9a7589a6e70b6e73aa092ff073fa626e8ed3e792..6295b4469a2695c7e38a007f8ff2d64931c7d284 100644 (file)
@@ -23,9 +23,12 @@ namespace Friendica\Factory\Api\Mastodon;
 
 use Friendica\App\BaseURL;
 use Friendica\BaseFactory;
+use Friendica\Database\DBA;
 use Friendica\DI;
 use Friendica\Model\Item;
+use Friendica\Model\Verb;
 use Friendica\Network\HTTPException;
+use Friendica\Protocol\Activity;
 use Friendica\Repository\ProfileField;
 use Psr\Log\LoggerInterface;
 
@@ -59,6 +62,10 @@ class Status extends BaseFactory
                $item = Item::selectFirst([], ['uri-id' => $uriId, 'uid' => $uid]);
                $account = DI::mstdnAccount()->createFromContactId($item['author-id']);
 
-               return new \Friendica\Object\Api\Mastodon\Status($item, $account);
+               $count['replies'] = DBA::count('item', ['thr-parent-id' => $uriId, 'uid' => $uid, 'gravity' => GRAVITY_COMMENT]);
+               $count['reblogs'] = DBA::count('item', ['thr-parent-id' => $uriId, 'uid' => $uid, 'gravity' => GRAVITY_ACTIVITY, 'vid' => Verb::getID(Activity::ANNOUNCE)]);
+               $count['favourites'] = DBA::count('item', ['thr-parent-id' => $uriId, 'uid' => $uid, 'gravity' => GRAVITY_ACTIVITY, 'vid' => Verb::getID(Activity::LIKE)]);
+
+               return new \Friendica\Object\Api\Mastodon\Status($item, $account, $count);
        }
 }
index 9a42521d90c5e8a1e92c3baf4e096df34dfc02d2..598cfe5c66e6a520fb1f08bd6062637713acdaa1 100644 (file)
@@ -57,11 +57,11 @@ class PublicTimeline extends BaseApi
 
                $params = ['order' => ['uri-id' => true], 'limit' => $limit];
 
-               $condition = ['gravity' => [GRAVITY_PARENT, GRAVITY_COMMENT], 'private' => Item::PUBLIC, 'network' => Protocol::FEDERATED];
+               $condition = ['gravity' => [GRAVITY_PARENT, GRAVITY_COMMENT], 'private' => Item::PUBLIC,
+                       'uid' => 0, 'network' => Protocol::FEDERATED];
+
                if ($local) {
-                       $condition['origin'] = true;
-               } else {
-                       $condition['uid'] = 0;
+                       $condition = DBA::mergeConditions($condition, ["`uri-id` IN (SELECT `uri-id` FROM `item` WHERE `origin`)"]);
                }
 
                if ($remote) {
diff --git a/src/Object/Api/Mastodon/Activity.php b/src/Object/Api/Mastodon/Activity.php
new file mode 100644 (file)
index 0000000..a73307e
--- /dev/null
@@ -0,0 +1,55 @@
+<?php
+/**
+ * @copyright Copyright (C) 2020, Friendica
+ *
+ * @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;
+
+use Friendica\BaseEntity;
+
+/**
+ * Class Activity
+ *
+ * @see https://docs.joinmastodon.org/entities/activity
+ */
+class Activity extends BaseEntity
+{
+       /** @var string (UNIX Timestamp) */
+       protected $week;
+       /** @var string */
+       protected $statuses;
+       /** @var string */
+       protected $logins;
+       /** @var string */
+       protected $registrations;
+
+       /**
+        * Creates an activity 
+        *
+        * @param array   $item
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+        */
+       public function __construct(int $week, int $statuses, int $logins, int $registrations)
+       {
+               $this->week = (string)$week;
+               $this->statuses = (string)$statuses;
+               $this->logins = (string)$logins;
+               $this->registrations = (string)$registrations;
+       }
+}
diff --git a/src/Object/Api/Mastodon/Application.php b/src/Object/Api/Mastodon/Application.php
new file mode 100644 (file)
index 0000000..d26d270
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+/**
+ * @copyright Copyright (C) 2020, Friendica
+ *
+ * @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;
+
+use Friendica\BaseEntity;
+
+/**
+ * Class Application
+ *
+ * @see https://docs.joinmastodon.org/entities/application
+ */
+class Application extends BaseEntity
+{
+       /** @var string */
+       protected $name;
+
+       /**
+        * Creates an application entry
+        *
+        * @param array   $item
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+        */
+       public function __construct(string $name)
+       {
+               $this->name = $name;
+       }
+}
index 5ebddf469162f3e64ba0abb5ecfc01c6745c1aa2..ea9326cafba2518265d9c63d0747f302929ed236 100644 (file)
@@ -95,7 +95,7 @@ class Status extends BaseEntity
         * @param array   $item
         * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
-       public function __construct(array $item, Account $account)
+       public function __construct(array $item, Account $account, array $count)
        {
                $this->id         = (string)$item['uri-id'];
                $this->created_at = DateTimeFormat::utc($item['created'], DateTimeFormat::ATOM);
@@ -114,9 +114,9 @@ class Status extends BaseEntity
                $this->language = null;
                $this->uri = $item['uri'];
                $this->url = $item['plink'] ?? null;
-               $this->replies_count = 0;
-               $this->reblogs_count = 0;
-               $this->favourites_count = 0;
+               $this->replies_count = $count['replies'];
+               $this->reblogs_count = $count['reblogs'];
+               $this->favourites_count = $count['favourites'];
                $this->favourited = false;
                $this->reblogged = false;
                $this->muted = false;