From 53071389ee08e38d2f73d56ae92051e74042f387 Mon Sep 17 00:00:00 2001 From: ThibG Date: Fri, 16 Aug 2019 22:58:51 +0200 Subject: [PATCH] Fix multiple issues with replies collection for pages further than self-replies (#11582) * Fix the replies collection returning snowflakes ids rather than URIs Fixes #11568 * Fix min_id in replies queries once self-replies are exhausted * Fix `next` attribute of replies collection being nil when there are no self-replies * Rename other_accounts param to only_other_accounts --- app/controllers/activitypub/replies_controller.rb | 11 ++++++----- app/serializers/activitypub/note_serializer.rb | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/controllers/activitypub/replies_controller.rb b/app/controllers/activitypub/replies_controller.rb index ab755ed4e..c62061555 100644 --- a/app/controllers/activitypub/replies_controller.rb +++ b/app/controllers/activitypub/replies_controller.rb @@ -27,7 +27,7 @@ class ActivityPub::RepliesController < ActivityPub::BaseController end def set_replies - @replies = page_params[:other_accounts] ? Status.where.not(account_id: @account.id) : @account.statuses + @replies = page_params[:only_other_accounts] ? Status.where.not(account_id: @account.id) : @account.statuses @replies = @replies.where(in_reply_to_id: @status.id, visibility: [:public, :unlisted]) @replies = @replies.paginate_by_min_id(DESCENDANTS_LIMIT, params[:min_id]) end @@ -38,7 +38,7 @@ class ActivityPub::RepliesController < ActivityPub::BaseController type: :unordered, part_of: account_status_replies_url(@account, @status), next: next_page, - items: @replies.map { |status| status.local ? status : status.id } + items: @replies.map { |status| status.local ? status : status.uri } ) return page if page_requested? @@ -55,16 +55,17 @@ class ActivityPub::RepliesController < ActivityPub::BaseController end def next_page + only_other_accounts = !(@replies&.last&.account_id == @account.id && @replies.size == DESCENDANTS_LIMIT) account_status_replies_url( @account, @status, page: true, - min_id: @replies&.last&.id, - other_accounts: !(@replies&.last&.account_id == @account.id && @replies.size == DESCENDANTS_LIMIT) + min_id: only_other_accounts && !page_params[:only_other_accounts] ? nil : @replies&.last&.id, + only_other_accounts: only_other_accounts ) end def page_params - params_slice(:other_accounts, :min_id).merge(page: true) + params_slice(:only_other_accounts, :min_id).merge(page: true) end end diff --git a/app/serializers/activitypub/note_serializer.rb b/app/serializers/activitypub/note_serializer.rb index 67f596e78..7592e0b1a 100644 --- a/app/serializers/activitypub/note_serializer.rb +++ b/app/serializers/activitypub/note_serializer.rb @@ -55,7 +55,7 @@ class ActivityPub::NoteSerializer < ActivityPub::Serializer type: :unordered, part_of: ActivityPub::TagManager.instance.replies_uri_for(object), items: replies.map(&:second), - next: last_id ? ActivityPub::TagManager.instance.replies_uri_for(object, page: true, min_id: last_id) : nil + next: last_id ? ActivityPub::TagManager.instance.replies_uri_for(object, page: true, min_id: last_id) : ActivityPub::TagManager.instance.replies_uri_for(object, page: true, only_other_accounts: true) ) ) end