Controls search type

This commit is contained in:
Mouse Reeve
2021-04-30 18:59:02 -07:00
parent 5ca9d2a7b0
commit 21a5147c3c
4 changed files with 39 additions and 42 deletions

View File

@ -18,10 +18,11 @@ from .helpers import handle_remote_webfinger
class Search(View):
"""search users or books"""
def get(self, request, search_type=None):
def get(self, request):
"""that search bar up top"""
query = request.GET.get("q")
min_confidence = request.GET.get("min_confidence", 0.1)
search_type = request.GET.get("type")
if is_api_request(request):
# only return local book results via json so we don't cascade
@ -30,38 +31,39 @@ class Search(View):
)
return JsonResponse([r.json() for r in book_results], safe=False)
if not search_type:
search_type = "user" if "@" in query else "book"
endpoints = {
"book": book_search,
"user": user_search,
"list": list_search,
}
if not search_type in endpoints:
search_type = "book"
endpoint = endpoints[search_type]
data = {"query": query or "", "type": search_type}
results = {}
if query:
# make a guess about what type of query this is for
if search_type == "user" or (not search_type and "@" in query):
results = user_search(query, request.user)
elif search_type == "list":
results = list_search(query, request.user)
else:
results = book_search(query, min_confidence)
results = endpoint(query, request.user, min_confidence) if query else {}
return TemplateResponse(
request,
"search/{:s}.html".format(search_type or "book"),
{**data, **results}
request, "search/{:s}.html".format(search_type), {**data, **results}
)
def book_search(query, min_confidence):
def book_search(query, _, min_confidence):
"""that search bar up top"""
return {
"query": query or "",
"results": connector_manager.search(query, min_confidence=min_confidence),
}
def user_search(query, viewer):
def user_search(query, viewer, _):
"""that search bar up top"""
# logged out viewers can't search users
if not viewer.is_authenticated:
return None
return {}
# use webfinger for mastodon style account@domain.com username to load the user if
# they don't exist locally (handle_remote_webfinger will check the db)
@ -69,7 +71,6 @@ def user_search(query, viewer):
handle_remote_webfinger(query)
return {
"query": query,
"results": (
models.User.viewer_aware_objects(viewer)
.annotate(
@ -86,10 +87,9 @@ def user_search(query, viewer):
}
def list_search(query, viewer):
def list_search(query, viewer, _):
"""any relevent lists?"""
return {
"query": query,
"results": (
privacy_filter(
viewer,