Browse Source

Switch to using typeahead for user search

Zed 3 năm trước cách đây
mục cha
commit
a3e11e3272

+ 3 - 9
src/api.nim

@@ -115,22 +115,16 @@ proc getGraphTweetSearch*(query: Query; after=""): Future[Timeline] {.async.} =
   result = parseGraphSearch(await fetch(url, Api.search), after)
   result.query = query
 
-proc getUserSearch*(query: Query; page="1"): Future[Result[User]] {.async.} =
+proc getUserSearch*(query: Query): Future[Result[User]] {.async.} =
   if query.text.len == 0:
     return Result[User](query: query, beginning: true)
 
   let
-    page = if page.len == 0: "1" else: page
-    url = userSearch ? genParams({"q": query.text, "skip_status": "1", "page": page})
+    url = userSearch ? genParams({"q": query.text, "result_type": "users"})
     js = await fetchRaw(url, Api.userSearch)
 
-  result = parseUsers(js)
-
+  result = parseTypeahead(js)
   result.query = query
-  if page.len == 0:
-    result.bottom = "2"
-  elif page.allCharsInSet(Digits):
-    result.bottom = $(parseInt(page) + 1)
 
 proc getPhotoRail*(name: string): Future[PhotoRail] {.async.} =
   if name.len == 0: return

+ 1 - 1
src/consts.nim

@@ -9,7 +9,7 @@ const
   activate* = $(api / "1.1/guest/activate.json")
 
   photoRail* = api / "1.1/statuses/media_timeline.json"
-  userSearch* = api / "1.1/users/search.json"
+  userSearch* = api / "1.1/search/typeahead.json"
 
   graphql = api / "graphql"
   graphUser* = graphql / "u7wQyGi6oExe8_TRWGMq4Q/UserResultByScreenNameQuery"

+ 7 - 0
src/experimental/parser/user.nim

@@ -85,3 +85,10 @@ proc parseUsers*(json: string; after=""): Result[User] =
     let raw = json.fromJson(seq[RawUser])
     for user in raw:
       result.content.add user.toUser
+
+proc parseTypeahead*(json: string): Result[User] =
+  result = Result[User](beginning: true)
+
+  let raw = json.fromJson(Typeahead)
+  for user in raw.users:
+    result.content.add user.toUser

+ 3 - 0
src/experimental/types/user.nim

@@ -42,3 +42,6 @@ type
 
   Color* = object
     red*, green*, blue*: int
+
+  Typeahead* = object
+    users*: seq[RawUser]

+ 1 - 1
src/routes/search.nim

@@ -29,7 +29,7 @@ proc createSearchRouter*(cfg: Config) =
           redirect("/" & q)
         var users: Result[User]
         try:
-          users = await getUserSearch(query, getCursor())
+          users = await getUserSearch(query)
         except InternalError:
           users = Result[User](beginning: true, query: query)
         resp renderMain(renderUserSearch(users, prefs), request, cfg, prefs, title)