Switch to using typeahead for user search
This commit is contained in:
		
							parent
							
								
									45808361af
								
							
						
					
					
						commit
						a3e11e3272
					
				
					 5 changed files with 15 additions and 11 deletions
				
			
		
							
								
								
									
										12
									
								
								src/api.nim
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -42,3 +42,6 @@ type
 | 
			
		|||
 | 
			
		||||
  Color* = object
 | 
			
		||||
    red*, green*, blue*: int
 | 
			
		||||
 | 
			
		||||
  Typeahead* = object
 | 
			
		||||
    users*: seq[RawUser]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue