diff --git a/app/assets/javascripts/components/actions/compose.jsx b/app/assets/javascripts/components/actions/compose.jsx index c9be895f1274c21775eb95dff221933e345d6cd0..b77a9c727b6521420a26ed0dc14a2bcfd63b0791 100644 --- a/app/assets/javascripts/components/actions/compose.jsx +++ b/app/assets/javascripts/components/actions/compose.jsx @@ -148,7 +148,8 @@ export function fetchComposeSuggestions(token) { api(getState).get('/api/v1/accounts/search', { params: { q: token, - resolve: false + resolve: false, + limit: 4 } }).then(response => { dispatch(readyComposeSuggestions(token, response.data)); diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb index 9b02c998170d2f373971db3b53cf690955756dfd..9573326ef1d7065ad855c456585c0bb3c388cec2 100644 --- a/app/controllers/api/v1/accounts_controller.rb +++ b/app/controllers/api/v1/accounts_controller.rb @@ -92,7 +92,8 @@ class Api::V1::AccountsController < ApiController end def search - @accounts = SearchService.new.call(params[:q], params[:resolve] == 'true') + limit = params[:limit] ? [DEFAULT_ACCOUNTS_LIMIT, params[:limit].to_i].min : DEFAULT_ACCOUNTS_LIMIT + @accounts = SearchService.new.call(params[:q], limit, params[:resolve] == 'true') render action: :index end diff --git a/app/services/search_service.rb b/app/services/search_service.rb index d9b6278531a0613fa23d6b57d3bcc98cf105d603..9e8ee6220bc5c7fd28265b052255f7b42e296a7b 100644 --- a/app/services/search_service.rb +++ b/app/services/search_service.rb @@ -1,25 +1,21 @@ class SearchService < BaseService - def call(query, resolve = false) + def call(query, limit, resolve = false) return if query.blank? username, domain = query.split('@') - if domain.nil? - search_all(username) + results = if domain.nil? + Account.search_for(username) else - search_or_resolve(username, domain, resolve) + Account.search_for("#{username} #{domain}") end - end - private + results = results.limit(limit).with_counters - def search_all(username) - Account.search_for(username) - end + if resolve && results.empty? && !domain.nil? + results = [FollowRemoteAccountService.new.call("#{username}@#{domain}")] + end - def search_or_resolve(username, domain, resolve) - results = Account.search_for("#{username} #{domain}") - return [FollowRemoteAccountService.new.call("#{username}@#{domain}")] if results.empty? && resolve results end end