Parse user stats as ints, not strings, cleanup
This commit is contained in:
		
							parent
							
								
									54330f0b0c
								
							
						
					
					
						commit
						fcfc1ef497
					
				| 
						 | 
					@ -14,11 +14,11 @@ proc parseProfile(js: JsonNode; id=""): Profile =
 | 
				
			||||||
    bio: js{"description"}.getStr,
 | 
					    bio: js{"description"}.getStr,
 | 
				
			||||||
    userPic: js{"profile_image_url_https"}.getImageStr.replace("_normal", ""),
 | 
					    userPic: js{"profile_image_url_https"}.getImageStr.replace("_normal", ""),
 | 
				
			||||||
    banner: js.getBanner,
 | 
					    banner: js.getBanner,
 | 
				
			||||||
    following: $js{"friends_count"}.getInt,
 | 
					    following: js{"friends_count"}.getInt,
 | 
				
			||||||
    followers: $js{"followers_count"}.getInt,
 | 
					    followers: js{"followers_count"}.getInt,
 | 
				
			||||||
    tweets: $js{"statuses_count"}.getInt,
 | 
					    tweets: js{"statuses_count"}.getInt,
 | 
				
			||||||
    likes: $js{"favourites_count"}.getInt,
 | 
					    likes: js{"favourites_count"}.getInt,
 | 
				
			||||||
    media: $js{"media_count"}.getInt,
 | 
					    media: js{"media_count"}.getInt,
 | 
				
			||||||
    verified: js{"verified"}.getBool,
 | 
					    verified: js{"verified"}.getBool,
 | 
				
			||||||
    protected: js{"protected"}.getBool,
 | 
					    protected: js{"protected"}.getBool,
 | 
				
			||||||
    joinDate: js{"created_at"}.getTime
 | 
					    joinDate: js{"created_at"}.getTime
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -47,6 +47,7 @@ proc initRedisPool*(cfg: Config) {.async.} =
 | 
				
			||||||
    await migrate("snappyRss", "rss:*")
 | 
					    await migrate("snappyRss", "rss:*")
 | 
				
			||||||
    await migrate("userBuckets", "p:*")
 | 
					    await migrate("userBuckets", "p:*")
 | 
				
			||||||
    await migrate("profileDates", "p:*")
 | 
					    await migrate("profileDates", "p:*")
 | 
				
			||||||
 | 
					    await migrate("profileStats", "p:*")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pool.withAcquire(r):
 | 
					    pool.withAcquire(r):
 | 
				
			||||||
      # optimize memory usage for profile ID buckets
 | 
					      # optimize memory usage for profile ID buckets
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,8 +19,7 @@ proc timelineRss*(req: Request; cfg: Config; query: Query): Future[Rss] {.async.
 | 
				
			||||||
    names = getNames(name)
 | 
					    names = getNames(name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if names.len == 1:
 | 
					  if names.len == 1:
 | 
				
			||||||
    (profile, timeline) =
 | 
					    (profile, timeline) = await fetchTimeline(after, query, skipRail=true)
 | 
				
			||||||
      await fetchSingleTimeline(after, query, skipRail=true)
 | 
					 | 
				
			||||||
  else:
 | 
					  else:
 | 
				
			||||||
    var q = query
 | 
					    var q = query
 | 
				
			||||||
    q.fromUser = names
 | 
					    q.fromUser = names
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,7 +19,7 @@ proc getQuery*(request: Request; tab, name: string): Query =
 | 
				
			||||||
  of "search": initQuery(params(request), name=name)
 | 
					  of "search": initQuery(params(request), name=name)
 | 
				
			||||||
  else: Query(fromUser: @[name])
 | 
					  else: Query(fromUser: @[name])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
proc fetchSingleTimeline*(after: string; query: Query; skipRail=false):
 | 
					proc fetchTimeline*(after: string; query: Query; skipRail=false):
 | 
				
			||||||
                  Future[(Profile, Timeline, PhotoRail)] {.async.} =
 | 
					                  Future[(Profile, Timeline, PhotoRail)] {.async.} =
 | 
				
			||||||
  let name = query.fromUser[0]
 | 
					  let name = query.fromUser[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -86,7 +86,7 @@ proc showTimeline*(request: Request; query: Query; cfg: Config; prefs: Prefs;
 | 
				
			||||||
      html = renderTweetSearch(timeline, prefs, getPath())
 | 
					      html = renderTweetSearch(timeline, prefs, getPath())
 | 
				
			||||||
    return renderMain(html, request, cfg, prefs, "Multi", rss=rss)
 | 
					    return renderMain(html, request, cfg, prefs, "Multi", rss=rss)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  var (p, t, r) = await fetchSingleTimeline(after, query)
 | 
					  var (p, t, r) = await fetchTimeline(after, query)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if p.suspended: return showError(getSuspended(p.username), cfg)
 | 
					  if p.suspended: return showError(getSuspended(p.username), cfg)
 | 
				
			||||||
  if p.id.len == 0: return
 | 
					  if p.id.len == 0: return
 | 
				
			||||||
| 
						 | 
					@ -139,7 +139,7 @@ proc createTimelineRouter*(cfg: Config) =
 | 
				
			||||||
          timeline.beginning = true
 | 
					          timeline.beginning = true
 | 
				
			||||||
          resp $renderTweetSearch(timeline, prefs, getPath())
 | 
					          resp $renderTweetSearch(timeline, prefs, getPath())
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
          var (_, timeline, _) = await fetchSingleTimeline(after, query, skipRail=true)
 | 
					          var (_, timeline, _) = await fetchTimeline(after, query, skipRail=true)
 | 
				
			||||||
          if timeline.content.len == 0: resp Http404
 | 
					          if timeline.content.len == 0: resp Http404
 | 
				
			||||||
          timeline.beginning = true
 | 
					          timeline.beginning = true
 | 
				
			||||||
          resp $renderTimelineTweets(timeline, prefs, getPath())
 | 
					          resp $renderTimelineTweets(timeline, prefs, getPath())
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -48,17 +48,16 @@ type
 | 
				
			||||||
    id*: string
 | 
					    id*: string
 | 
				
			||||||
    username*: string
 | 
					    username*: string
 | 
				
			||||||
    fullname*: string
 | 
					    fullname*: string
 | 
				
			||||||
    lowername*: string
 | 
					 | 
				
			||||||
    location*: string
 | 
					    location*: string
 | 
				
			||||||
    website*: string
 | 
					    website*: string
 | 
				
			||||||
    bio*: string
 | 
					    bio*: string
 | 
				
			||||||
    userPic*: string
 | 
					    userPic*: string
 | 
				
			||||||
    banner*: string
 | 
					    banner*: string
 | 
				
			||||||
    following*: string
 | 
					    following*: int
 | 
				
			||||||
    followers*: string
 | 
					    followers*: int
 | 
				
			||||||
    tweets*: string
 | 
					    tweets*: int
 | 
				
			||||||
    likes*: string
 | 
					    likes*: int
 | 
				
			||||||
    media*: string
 | 
					    media*: int
 | 
				
			||||||
    verified*: bool
 | 
					    verified*: bool
 | 
				
			||||||
    protected*: bool
 | 
					    protected*: bool
 | 
				
			||||||
    suspended*: bool
 | 
					    suspended*: bool
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,12 +5,12 @@ import karax/[karaxdsl, vdom, vstyles]
 | 
				
			||||||
import renderutils, search
 | 
					import renderutils, search
 | 
				
			||||||
import ".."/[types, utils, formatters]
 | 
					import ".."/[types, utils, formatters]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
proc renderStat(num, class: string; text=""): VNode =
 | 
					proc renderStat(num: int; class: string; text=""): VNode =
 | 
				
			||||||
  let t = if text.len > 0: text else: class
 | 
					  let t = if text.len > 0: text else: class
 | 
				
			||||||
  buildHtml(li(class=class)):
 | 
					  buildHtml(li(class=class)):
 | 
				
			||||||
    span(class="profile-stat-header"): text capitalizeAscii(t)
 | 
					    span(class="profile-stat-header"): text capitalizeAscii(t)
 | 
				
			||||||
    span(class="profile-stat-num"):
 | 
					    span(class="profile-stat-num"):
 | 
				
			||||||
      text if num.len == 0: "?" else: insertSep(num, ',')
 | 
					      text insertSep($num, ',')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
proc renderProfileCard*(profile: Profile; prefs: Prefs): VNode =
 | 
					proc renderProfileCard*(profile: Profile; prefs: Prefs): VNode =
 | 
				
			||||||
  buildHtml(tdiv(class="profile-card")):
 | 
					  buildHtml(tdiv(class="profile-card")):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue