0
0
Fork 0

Add API to get multiple accounts and statuses (#27871)

Co-authored-by: noellabo <noel.yoshiba@gmail.com>
This commit is contained in:
Claire 2024-05-06 17:19:15 +02:00 committed by GitHub
parent bc24c4792d
commit 2fe1b8d169
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 104 additions and 18 deletions

View file

@ -3,6 +3,23 @@
module Status::ThreadingConcern
extend ActiveSupport::Concern
class_methods do
def permitted_statuses_from_ids(ids, account, stable: false)
statuses = Status.with_accounts(ids).to_a
account_ids = statuses.map(&:account_id).uniq
domains = statuses.filter_map(&:account_domain).uniq
relations = account&.relations_map(account_ids, domains) || {}
statuses.reject! { |status| StatusFilter.new(status, account, relations).filtered? }
if stable
statuses.sort_by! { |status| ids.index(status.id) }
else
statuses
end
end
end
def ancestors(limit, account = nil)
find_statuses_from_tree_path(ancestor_ids(limit), account)
end
@ -76,15 +93,7 @@ module Status::ThreadingConcern
end
def find_statuses_from_tree_path(ids, account, promote: false)
statuses = Status.with_accounts(ids).to_a
account_ids = statuses.map(&:account_id).uniq
domains = statuses.filter_map(&:account_domain).uniq
relations = account&.relations_map(account_ids, domains) || {}
statuses.reject! { |status| StatusFilter.new(status, account, relations).filtered? }
# Order ancestors/descendants by tree path
statuses.sort_by! { |status| ids.index(status.id) }
statuses = Status.permitted_statuses_from_ids(ids, account, stable: true)
# Bring self-replies to the top
if promote