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:
		| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user