mirror of
https://github.com/mastodon/mastodon.git
synced 2025-05-07 12:16:14 +00:00
Fix quote serializer (#34510)
This commit is contained in:
parent
e097f0e9eb
commit
dee744c793
|
@ -7,14 +7,24 @@ class StatusRelationshipsPresenter
|
|||
:bookmarks_map, :filters_map, :attributes_map
|
||||
|
||||
def initialize(statuses, current_account_id = nil, **options)
|
||||
@current_account_id = current_account_id
|
||||
|
||||
# Keeping a reference to @statuses is ok since `StatusRelationshipsPresenter`
|
||||
# basically never outlives the statuses collection it is passed
|
||||
@statuses = statuses
|
||||
|
||||
if current_account_id.nil?
|
||||
@reblogs_map = {}
|
||||
@favourites_map = {}
|
||||
@bookmarks_map = {}
|
||||
@mutes_map = {}
|
||||
@pins_map = {}
|
||||
@filters_map = {}
|
||||
@preloaded_account_relations = {}
|
||||
@filters_map = {}
|
||||
@reblogs_map = {}
|
||||
@favourites_map = {}
|
||||
@bookmarks_map = {}
|
||||
@mutes_map = {}
|
||||
@pins_map = {}
|
||||
@attributes_map = {}
|
||||
else
|
||||
@preloaded_account_relations = nil
|
||||
|
||||
statuses = statuses.compact
|
||||
status_ids = statuses.flat_map { |s| [s.id, s.reblog_of_id, s.proper.quote&.quoted_status_id] }.uniq.compact
|
||||
conversation_ids = statuses.flat_map { |s| [s.proper.conversation_id, s.proper.quote&.quoted_status&.conversation_id] }.uniq.compact
|
||||
|
@ -30,6 +40,17 @@ class StatusRelationshipsPresenter
|
|||
end
|
||||
end
|
||||
|
||||
# This one is currently on-demand as it is only used for quote posts
|
||||
def preloaded_account_relations
|
||||
@preloaded_account_relations ||= begin
|
||||
accounts = @statuses.compact.flat_map { |s| [s.account, s.proper.account, s.proper.quote&.quoted_account] }.uniq.compact
|
||||
|
||||
account_ids = accounts.pluck(:id)
|
||||
account_domains = accounts.pluck(:domain).uniq
|
||||
Account.find(@current_account_id).relations_map(account_ids, account_domains)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def build_filters_map(statuses, current_account_id)
|
||||
|
|
|
@ -20,6 +20,6 @@ class REST::BaseQuoteSerializer < ActiveModel::Serializer
|
|||
private
|
||||
|
||||
def status_filter
|
||||
@status_filter ||= StatusFilter.new(object.quoted_status, current_user&.account, instance_options[:relationships] || {})
|
||||
@status_filter ||= StatusFilter.new(object.quoted_status, current_user&.account, instance_options[:relationships]&.preloaded_account_relations || {})
|
||||
end
|
||||
end
|
||||
|
|
|
@ -26,8 +26,13 @@ RSpec.describe 'Home', :inline_jobs do
|
|||
before do
|
||||
user.account.follow!(bob)
|
||||
user.account.follow!(ana)
|
||||
PostStatusService.new.call(bob, text: 'New toot from bob.')
|
||||
quoted = PostStatusService.new.call(bob, text: 'New toot from bob.')
|
||||
PostStatusService.new.call(tim, text: 'New toot from tim.')
|
||||
reblogged = PostStatusService.new.call(tim, text: 'New toot from tim, which will end up boosted.')
|
||||
ReblogService.new.call(bob, reblogged)
|
||||
# TODO: use PostStatusService argument when available rather than manually creating quote
|
||||
quoting = PostStatusService.new.call(bob, text: 'Self-quote from bob.')
|
||||
Quote.create!(status: quoting, quoted_status: quoted, state: :accepted)
|
||||
PostStatusService.new.call(ana, text: 'New toot from ana.')
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user