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
This commit is contained in:
parent
e5cee8062f
commit
53071389ee
@ -27,7 +27,7 @@ class ActivityPub::RepliesController < ActivityPub::BaseController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def set_replies
|
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.where(in_reply_to_id: @status.id, visibility: [:public, :unlisted])
|
||||||
@replies = @replies.paginate_by_min_id(DESCENDANTS_LIMIT, params[:min_id])
|
@replies = @replies.paginate_by_min_id(DESCENDANTS_LIMIT, params[:min_id])
|
||||||
end
|
end
|
||||||
@ -38,7 +38,7 @@ class ActivityPub::RepliesController < ActivityPub::BaseController
|
|||||||
type: :unordered,
|
type: :unordered,
|
||||||
part_of: account_status_replies_url(@account, @status),
|
part_of: account_status_replies_url(@account, @status),
|
||||||
next: next_page,
|
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?
|
return page if page_requested?
|
||||||
@ -55,16 +55,17 @@ class ActivityPub::RepliesController < ActivityPub::BaseController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def next_page
|
def next_page
|
||||||
|
only_other_accounts = !(@replies&.last&.account_id == @account.id && @replies.size == DESCENDANTS_LIMIT)
|
||||||
account_status_replies_url(
|
account_status_replies_url(
|
||||||
@account,
|
@account,
|
||||||
@status,
|
@status,
|
||||||
page: true,
|
page: true,
|
||||||
min_id: @replies&.last&.id,
|
min_id: only_other_accounts && !page_params[:only_other_accounts] ? nil : @replies&.last&.id,
|
||||||
other_accounts: !(@replies&.last&.account_id == @account.id && @replies.size == DESCENDANTS_LIMIT)
|
only_other_accounts: only_other_accounts
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def page_params
|
def page_params
|
||||||
params_slice(:other_accounts, :min_id).merge(page: true)
|
params_slice(:only_other_accounts, :min_id).merge(page: true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -55,7 +55,7 @@ class ActivityPub::NoteSerializer < ActivityPub::Serializer
|
|||||||
type: :unordered,
|
type: :unordered,
|
||||||
part_of: ActivityPub::TagManager.instance.replies_uri_for(object),
|
part_of: ActivityPub::TagManager.instance.replies_uri_for(object),
|
||||||
items: replies.map(&:second),
|
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
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user