diff options
author | rinpatch <rinpatch@sdf.org> | 2020-09-25 12:56:21 +0000 |
---|---|---|
committer | rinpatch <rinpatch@sdf.org> | 2020-09-25 12:56:21 +0000 |
commit | 5cd71208d9b273535f978559011377e703e82dcb (patch) | |
tree | 65b7b6fd2619ced4ac1a4231166e77e19b6dec2f /lib | |
parent | f67c967c4a614262a6409f94ad74754b09dc0e64 (diff) | |
parent | 05b5241314182c5aab2907e27d4c5f46d7617f56 (diff) | |
download | pleroma-5cd71208d9b273535f978559011377e703e82dcb.tar.gz |
Merge branch 'search-even-more' into 'develop'
More user search improvements
See merge request pleroma/pleroma!3032
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/user/search.ex | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/lib/pleroma/user/search.ex b/lib/pleroma/user/search.ex index 408295e0c..03f2c552f 100644 --- a/lib/pleroma/user/search.ex +++ b/lib/pleroma/user/search.ex @@ -3,8 +3,10 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.User.Search do + alias Pleroma.EctoType.ActivityPub.ObjectValidators.Uri, as: UriType alias Pleroma.Pagination alias Pleroma.User + import Ecto.Query @limit 20 @@ -21,15 +23,12 @@ defmodule Pleroma.User.Search do # If this returns anything, it should bounce to the top maybe_resolved = maybe_resolve(resolve, for_user, query_string) - maybe_ap_id_match = User.get_cached_by_ap_id(query_string) top_user_ids = - case {maybe_resolved, maybe_ap_id_match} do - {{:ok, %User{} = user}, %User{} = other_user} -> [user.id, other_user.id] - {{:ok, %User{} = user}, _} -> [user.id] - {_, %User{} = user} -> [user.id] - _ -> [] - end + [] + |> maybe_add_resolved(maybe_resolved) + |> maybe_add_ap_id_match(query_string) + |> maybe_add_uri_match(query_string) results = query_string @@ -39,6 +38,29 @@ defmodule Pleroma.User.Search do results end + defp maybe_add_resolved(list, {:ok, %User{} = user}) do + [user.id | list] + end + + defp maybe_add_resolved(list, _), do: list + + defp maybe_add_ap_id_match(list, query) do + if user = User.get_cached_by_ap_id(query) do + [user.id | list] + else + list + end + end + + defp maybe_add_uri_match(list, query) do + with {:ok, query} <- UriType.cast(query), + %User{} = user <- Pleroma.Repo.get_by(User, uri: query) do + [user.id | list] + else + _ -> list + end + end + defp format_query(query_string) do # Strip the beginning @ off if there is a query query_string = String.trim_leading(query_string, "@") |