Refactoring relations_map (#24195)

shrike
Takeshi Umeda 2023-03-21 18:32:58 +09:00 committed by GitHub
parent 9f8d1601a4
commit 38c84f57b6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 18 additions and 35 deletions

View File

@ -292,6 +292,21 @@ module AccountInteractions
end end
end end
def relations_map(account_ids, domains = nil, **options)
relations = {
blocked_by: Account.blocked_by_map(account_ids, id),
following: Account.following_map(account_ids, id),
}
return relations if options[:skip_blocking_and_muting]
relations.merge!({
blocking: Account.blocking_map(account_ids, id),
muting: Account.muting_map(account_ids, id),
domain_blocking_by_domain: Account.domain_blocking_map_by_domain(domains, id),
})
end
private private
def remove_potential_friendship(other_account) def remove_potential_friendship(other_account)

View File

@ -79,7 +79,7 @@ module StatusThreadingConcern
statuses = Status.with_accounts(ids).to_a statuses = Status.with_accounts(ids).to_a
account_ids = statuses.map(&:account_id).uniq account_ids = statuses.map(&:account_id).uniq
domains = statuses.filter_map(&:account_domain).uniq domains = statuses.filter_map(&:account_domain).uniq
relations = relations_map_for_account(account, account_ids, domains) relations = account&.relations_map(account_ids, domains) || {}
statuses.reject! { |status| StatusFilter.new(status, account, relations).filtered? } statuses.reject! { |status| StatusFilter.new(status, account, relations).filtered? }
@ -108,16 +108,4 @@ module StatusThreadingConcern
arr arr
end end
def relations_map_for_account(account, account_ids, domains)
return {} if account.nil?
{
blocking: Account.blocking_map(account_ids, account.id),
blocked_by: Account.blocked_by_map(account_ids, account.id),
muting: Account.muting_map(account_ids, account.id),
following: Account.following_map(account_ids, account.id),
domain_blocking_by_domain: Account.domain_blocking_map_by_domain(domains, account.id),
}
end
end end

View File

@ -120,7 +120,7 @@ class ImportService < BaseService
end end
account_ids = statuses.map(&:account_id) account_ids = statuses.map(&:account_id)
preloaded_relations = relations_map_for_account(@account, account_ids) preloaded_relations = @account.relations_map(account_ids, skip_blocking_and_muting: true)
statuses.keep_if { |status| StatusPolicy.new(@account, status, preloaded_relations).show? } statuses.keep_if { |status| StatusPolicy.new(@account, status, preloaded_relations).show? }
@ -138,14 +138,4 @@ class ImportService < BaseService
def import_data def import_data
Paperclip.io_adapters.for(@import.data).read.force_encoding(Encoding::UTF_8) Paperclip.io_adapters.for(@import.data).read.force_encoding(Encoding::UTF_8)
end end
def relations_map_for_account(account, account_ids)
{
blocking: {},
blocked_by: Account.blocked_by_map(account_ids, account.id),
muting: {},
following: Account.following_map(account_ids, account.id),
domain_blocking_by_domain: {},
}
end
end end

View File

@ -49,7 +49,7 @@ class SearchService < BaseService
results = definition.limit(@limit).offset(@offset).objects.compact results = definition.limit(@limit).offset(@offset).objects.compact
account_ids = results.map(&:account_id) account_ids = results.map(&:account_id)
account_domains = results.map(&:account_domain) account_domains = results.map(&:account_domain)
preloaded_relations = relations_map_for_account(@account, account_ids, account_domains) preloaded_relations = @account.relations_map(account_ids, account_domains)
results.reject { |status| StatusFilter.new(status, @account, preloaded_relations).filtered? } results.reject { |status| StatusFilter.new(status, @account, preloaded_relations).filtered? }
rescue Faraday::ConnectionFailed, Parslet::ParseFailed rescue Faraday::ConnectionFailed, Parslet::ParseFailed
@ -111,16 +111,6 @@ class SearchService < BaseService
@options[:type].blank? || @options[:type] == 'statuses' @options[:type].blank? || @options[:type] == 'statuses'
end end
def relations_map_for_account(account, account_ids, domains)
{
blocking: Account.blocking_map(account_ids, account.id),
blocked_by: Account.blocked_by_map(account_ids, account.id),
muting: Account.muting_map(account_ids, account.id),
following: Account.following_map(account_ids, account.id),
domain_blocking_by_domain: Account.domain_blocking_map_by_domain(domains, account.id),
}
end
def parsed_query def parsed_query
SearchQueryTransformer.new.apply(SearchQueryParser.new.parse(@query)) SearchQueryTransformer.new.apply(SearchQueryParser.new.parse(@query))
end end