From 01fd128502e4403f7269ae430d1a98ec4170ca78 Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 21 Jul 2021 05:58:22 +0000 Subject: [PATCH] API: Support for fetching mails with more "statuses" calls --- src/Factory/Api/Mastodon/Status.php | 5 +++ src/Module/Api/Mastodon/Statuses/Context.php | 42 +++++++++++++------- src/Module/Api/Mastodon/Timelines/Direct.php | 2 +- 3 files changed, 34 insertions(+), 15 deletions(-) diff --git a/src/Factory/Api/Mastodon/Status.php b/src/Factory/Api/Mastodon/Status.php index 42f02a725c..a2d3640f3a 100644 --- a/src/Factory/Api/Mastodon/Status.php +++ b/src/Factory/Api/Mastodon/Status.php @@ -25,6 +25,7 @@ use Friendica\BaseFactory; use Friendica\Content\ContactSelector; use Friendica\Content\Text\BBCode; use Friendica\Database\Database; +use Friendica\Database\DBA; use Friendica\Model\Post; use Friendica\Model\Verb; use Friendica\Network\HTTPException; @@ -79,6 +80,10 @@ class Status extends BaseFactory 'thr-parent-id', 'parent-author-id', 'language', 'uri', 'plink', 'private', 'vid', 'gravity']; $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]); + if ($mail) { + return $this->createFromMailId($mail['id']); + } throw new HTTPException\NotFoundException('Item with URI ID ' . $uriId . ' not found' . ($uid ? ' for user ' . $uid : '.')); } diff --git a/src/Module/Api/Mastodon/Statuses/Context.php b/src/Module/Api/Mastodon/Statuses/Context.php index 226e52c9ea..62397afdbc 100644 --- a/src/Module/Api/Mastodon/Statuses/Context.php +++ b/src/Module/Api/Mastodon/Statuses/Context.php @@ -50,25 +50,39 @@ class Context extends BaseApi $id = $parameters['id']; - $parent = Post::selectFirst(['parent-uri-id'], ['uri-id' => $id]); - if (!DBA::isResult($parent)) { - DI::mstdnError()->RecordNotFound(); - } - $parents = []; $children = []; - $posts = Post::selectPosts(['uri-id', 'thr-parent-id'], - ['parent-uri-id' => $parent['parent-uri-id'], 'gravity' => [GRAVITY_PARENT, GRAVITY_COMMENT]], []); - while ($post = Post::fetch($posts)) { - if ($post['uri-id'] == $post['thr-parent-id']) { - continue; - } - $parents[$post['uri-id']] = $post['thr-parent-id']; + $parent = Post::selectFirst(['parent-uri-id'], ['uri-id' => $id]); + if (DBA::isResult($parent)) { + $posts = Post::selectPosts(['uri-id', 'thr-parent-id'], + ['parent-uri-id' => $parent['parent-uri-id'], 'gravity' => [GRAVITY_PARENT, GRAVITY_COMMENT]]); + while ($post = Post::fetch($posts)) { + if ($post['uri-id'] == $post['thr-parent-id']) { + continue; + } + $parents[$post['uri-id']] = $post['thr-parent-id']; - $children[$post['thr-parent-id']][] = $post['uri-id']; + $children[$post['thr-parent-id']][] = $post['uri-id']; + } + DBA::close($posts); + } else { + $parent = DBA::selectFirst('mail', ['parent-uri-id'], ['uri-id' => $id, 'uid' => $uid]); + if (DBA::isResult($parent)) { + $posts = DBA::select('mail', ['uri-id', 'thr-parent-id'], ['parent-uri-id' => $parent['parent-uri-id']]); + while ($post = DBA::fetch($posts)) { + if ($post['uri-id'] == $post['thr-parent-id']) { + continue; + } + $parents[$post['uri-id']] = $post['thr-parent-id']; + + $children[$post['thr-parent-id']][] = $post['uri-id']; + } + DBA::close($posts); + } else { + DI::mstdnError()->RecordNotFound(); + } } - DBA::close($posts); $statuses = ['ancestors' => [], 'descendants' => []]; diff --git a/src/Module/Api/Mastodon/Timelines/Direct.php b/src/Module/Api/Mastodon/Timelines/Direct.php index c0fef79c54..3c3b9c052b 100644 --- a/src/Module/Api/Mastodon/Timelines/Direct.php +++ b/src/Module/Api/Mastodon/Timelines/Direct.php @@ -66,7 +66,7 @@ class Direct extends BaseApi $params['order'] = ['uri-id']; } - $mails = DBA::select('mail', ['id'], $condition, $params); + $mails = DBA::select('mail', ['id', 'uri-id'], $condition, $params); $statuses = [];