Skip to content
Snippets Groups Projects
Unverified Commit c5661b0f authored by Eugen Rochko's avatar Eugen Rochko Committed by GitHub
Browse files

Fix account search always returning exact match on paginated results (#11525)

Fix #11365
parent 7a1f8a58
No related branches found
No related tags found
No related merge requests found
......@@ -21,18 +21,22 @@ class AccountSearchService < BaseService
if resolving_non_matching_remote_account?
[ResolveAccountService.new.call("#{query_username}@#{query_domain}")].compact
else
search_results_and_exact_match.compact.uniq.slice(0, limit)
search_results_and_exact_match.compact.uniq
end
end
def resolving_non_matching_remote_account?
options[:resolve] && !exact_match && !domain_is_local?
offset.zero? && options[:resolve] && !exact_match? && !domain_is_local?
end
def search_results_and_exact_match
exact = [exact_match]
return exact if !exact[0].nil? && limit == 1
exact + search_results.to_a
return search_results.to_a unless offset.zero?
results = [exact_match]
return results if exact_match? && limit == 1
results + search_results.to_a
end
def query_blank_or_hashtag?
......@@ -40,15 +44,15 @@ class AccountSearchService < BaseService
end
def split_query_string
@_split_query_string ||= query.gsub(/\A@/, '').split('@')
@split_query_string ||= query.gsub(/\A@/, '').split('@')
end
def query_username
@_query_username ||= split_query_string.first || ''
@query_username ||= split_query_string.first || ''
end
def query_domain
@_query_domain ||= query_without_split? ? nil : split_query_string.last
@query_domain ||= query_without_split? ? nil : split_query_string.last
end
def query_without_split?
......@@ -56,15 +60,21 @@ class AccountSearchService < BaseService
end
def domain_is_local?
@_domain_is_local ||= TagManager.instance.local_domain?(query_domain)
@domain_is_local ||= TagManager.instance.local_domain?(query_domain)
end
def search_from
options[:following] && account ? account.following : Account
end
def exact_match?
exact_match.present?
end
def exact_match
@_exact_match ||= begin
return @exact_match if defined?(@exact_match)
@exact_match = begin
if domain_is_local?
search_from.without_suspended.find_local(query_username)
else
......@@ -74,7 +84,7 @@ class AccountSearchService < BaseService
end
def search_results
@_search_results ||= begin
@search_results ||= begin
if account
advanced_search_results
else
......@@ -84,11 +94,19 @@ class AccountSearchService < BaseService
end
def advanced_search_results
Account.advanced_search_for(terms_for_query, account, limit, options[:following], offset)
Account.advanced_search_for(terms_for_query, account, limit_for_non_exact_results, options[:following], offset)
end
def simple_search_results
Account.search_for(terms_for_query, limit, offset)
Account.search_for(terms_for_query, limit_for_non_exact_results, offset)
end
def limit_for_non_exact_results
if offset.zero? && exact_match?
limit - 1
else
limit
end
end
def terms_for_query
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment