X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=src%2FModule%2FApi%2FMastodon%2FTimelines%2FListTimeline.php;h=a8de13056ec45fb0b1367c31813453f8c63b6bf3;hb=3e8c38946dc83f4905872610684bcf5ed73ee99d;hp=f50c2d2aa7dd21c2d1616eb303f54aa688a725d7;hpb=453e6a9d75f052cadb510e022824b21a40f98422;p=friendica.git diff --git a/src/Module/Api/Mastodon/Timelines/ListTimeline.php b/src/Module/Api/Mastodon/Timelines/ListTimeline.php index f50c2d2aa7..a8de13056e 100644 --- a/src/Module/Api/Mastodon/Timelines/ListTimeline.php +++ b/src/Module/Api/Mastodon/Timelines/ListTimeline.php @@ -1,6 +1,6 @@ parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - $request = self::getRequest([ - 'max_id' => 0, // Return results older than id - 'since_id' => 0, // Return results newer than id - 'min_id' => 0, // Return results immediately newer than id - 'limit' => 20, // Maximum number of results to return. Defaults to 20. - 'with_muted' => false, // Unknown parameter - ]); + $request = $this->getRequest([ + 'max_id' => 0, // Return results older than id + 'since_id' => 0, // Return results newer than id + 'min_id' => 0, // Return results immediately newer than id + 'limit' => 20, // Maximum number of results to return. Defaults to 20.Return results older than this ID. + 'with_muted' => false, // Pleroma extension: return activities by muted (not by blocked!) users. + 'only_media' => false, // Show only statuses with media attached? Defaults to false. + 'local' => false, // Show only local statuses? Defaults to false. + 'remote' => false, // Show only remote statuses? Defaults to false. + 'exclude_replies' => false, // Don't show comments + ], $request); $params = ['order' => ['uri-id' => true], 'limit' => $request['limit']]; $condition = ["`uid` = ? AND `gravity` IN (?, ?) AND `contact-id` IN (SELECT `contact-id` FROM `group_member` WHERE `gid` = ?)", - $uid, GRAVITY_PARENT, GRAVITY_COMMENT, $parameters['id']]; + $uid, Item::GRAVITY_PARENT, Item::GRAVITY_COMMENT, $this->parameters['id']]; if (!empty($request['max_id'])) { $condition = DBA::mergeConditions($condition, ["`uri-id` < ?", $request['max_id']]); @@ -73,18 +78,43 @@ class ListTimeline extends BaseApi $params['order'] = ['uri-id']; } + if ($request['only_media']) { + $condition = DBA::mergeConditions($condition, ["`uri-id` IN (SELECT `uri-id` FROM `post-media` WHERE `type` IN (?, ?, ?))", + Post\Media::AUDIO, Post\Media::IMAGE, Post\Media::VIDEO]); + } + + if ($request['exclude_replies']) { + $condition = DBA::mergeConditions($condition, ['gravity' => Item::GRAVITY_PARENT]); + } + + if ($request['local']) { + $condition = DBA::mergeConditions($condition, ["`uri-id` IN (SELECT `uri-id` FROM `post-user` WHERE `origin`)"]); + } + + if ($request['remote']) { + $condition = DBA::mergeConditions($condition, ["NOT `uri-id` IN (SELECT `uri-id` FROM `post-user` WHERE `origin` AND `post-user`.`uri-id` = `post-user-view`.`uri-id`)"]); + } + $items = Post::selectForUser($uid, ['uri-id'], $condition, $params); + $display_quotes = self::appSupportsQuotes(); + $statuses = []; while ($item = Post::fetch($items)) { - $statuses[] = DI::mstdnStatus()->createFromUriId($item['uri-id'], $uid); + self::setBoundaries($item['uri-id']); + try { + $statuses[] = DI::mstdnStatus()->createFromUriId($item['uri-id'], $uid, $display_quotes); + } catch (\Throwable $th) { + Logger::info('Post not fetchable', ['uri-id' => $item['uri-id'], 'uid' => $uid, 'error' => $th]); + } } DBA::close($items); if (!empty($request['min_id'])) { - array_reverse($statuses); + $statuses = array_reverse($statuses); } + self::setLinkHeader(); System::jsonExit($statuses); } }