mirror of
https://github.com/friendica/friendica
synced 2025-04-22 21:10:10 +00:00
Implement correct behavior for min_id in boundary pagination
- The previous behavior of since_id systematically showed the most recent results
This commit is contained in:
parent
e0a6b90316
commit
4427876c05
10 changed files with 101 additions and 59 deletions
|
@ -91,7 +91,7 @@ class FollowRequests extends BaseApi
|
|||
*/
|
||||
public static function rawContent(array $parameters = [])
|
||||
{
|
||||
$since_id = $_GET['since_id'] ?? null;
|
||||
$min_id = $_GET['min_id'] ?? null;
|
||||
$max_id = $_GET['max_id'] ?? null;
|
||||
$limit = intval($_GET['limit'] ?? 40);
|
||||
|
||||
|
@ -100,7 +100,7 @@ class FollowRequests extends BaseApi
|
|||
$introductions = DI::intro()->selectByBoundaries(
|
||||
['`uid` = ? AND NOT `ignore`', self::$current_user_id],
|
||||
['order' => ['id' => 'DESC']],
|
||||
$since_id,
|
||||
$min_id,
|
||||
$max_id,
|
||||
$limit
|
||||
);
|
||||
|
@ -127,7 +127,7 @@ class FollowRequests extends BaseApi
|
|||
}
|
||||
|
||||
if (count($introductions)) {
|
||||
$links[] = '<' . $baseUrl->get() . '/api/v1/follow_requests?' . http_build_query($base_query + ['since_id' => $introductions[0]->id]) . '>; rel="prev"';
|
||||
$links[] = '<' . $baseUrl->get() . '/api/v1/follow_requests?' . http_build_query($base_query + ['min_id' => $introductions[0]->id]) . '>; rel="prev"';
|
||||
}
|
||||
|
||||
header('Link: ' . implode(', ', $links));
|
||||
|
|
|
@ -155,15 +155,24 @@ abstract class ContactEndpoint extends BaseApi
|
|||
|
||||
$total_count = (int)DBA::count('contact', $condition);
|
||||
|
||||
$params = ['limit' => $count, 'order' => ['id' => 'ASC']];
|
||||
|
||||
if ($cursor !== -1) {
|
||||
if ($cursor > 0) {
|
||||
$condition = DBA::mergeConditions($condition, ['`id` > ?', $cursor]);
|
||||
} else {
|
||||
$condition = DBA::mergeConditions($condition, ['`id` < ?', -$cursor]);
|
||||
// Previous page case: we want the items closest to cursor but for that we need to reverse the query order
|
||||
$params['order']['id'] = 'DESC';
|
||||
}
|
||||
}
|
||||
|
||||
$contacts = Contact::selectToArray(['id'], $condition, ['limit' => $count, 'order' => ['id']]);
|
||||
$contacts = Contact::selectToArray(['id'], $condition, $params);
|
||||
|
||||
// Previous page case: once we get the relevant items closest to cursor, we need to restore the expected display order
|
||||
if ($cursor !== -1 && $cursor <= 0) {
|
||||
$contacts = array_reverse($contacts);
|
||||
}
|
||||
|
||||
// Contains user-specific contact ids
|
||||
$ids = array_column($contacts, 'id');
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue