Przeglądaj źródła

Fix crash on protected profiles

Zed 7 lat temu
rodzic
commit
a3285e8410
2 zmienionych plików z 12 dodań i 8 usunięć
  1. 3 3
      src/api.nim
  2. 9 5
      src/views/user.nimf

+ 3 - 3
src/api.nim

@@ -49,11 +49,10 @@ proc fetchJson(url: Uri; headers: HttpHeaders): Future[JsonNode] {.async.} =
   var resp = ""
   try:
     resp = await client.getContent($url)
+    result = parseJson(resp)
   except:
     return nil
 
-  return parseJson(resp)
-
 proc getGuestToken(): Future[string] {.async.} =
   if getTime() - tokenUpdated < tokenLifetime:
     return token
@@ -166,7 +165,7 @@ proc getTimeline*(username: string; after=""): Future[Timeline] {.async.} =
     url &= "&max_position=" & cleanAfter
 
   let json = await fetchJson(base / url, headers)
-  let html = parseHtml(json["items_html"].to(string))
+  if json.isNil: return Timeline()
 
   result = Timeline(
     hasMore: json["has_more_items"].to(bool),
@@ -177,6 +176,7 @@ proc getTimeline*(username: string; after=""): Future[Timeline] {.async.} =
   if json["new_latent_count"].to(int) == 0:
     return
 
+  let html = parseHtml(json["items_html"].to(string))
   result.tweets = parseTweets(html)
   await getVideos(result.tweets)
 

+ 9 - 5
src/views/user.nimf

@@ -53,6 +53,7 @@
 #end proc
 #
 #proc renderTimeline*(timeline: Timeline; profile: Profile; beginning: bool): string =
+#var retweets: Tweets
 <div id="tweets">
   #if profile.protected:
   <div class="timeline-protected">
@@ -60,18 +61,20 @@
     <p class="timeline-protected-explanation">Only confirmed followers have access to @${profile.username}'s Tweets.</p>
   </div>
   #end if
+  #
   #if not beginning:
   <div class="show-more status-el">
     <a href="/${profile.username}">Load newest tweets</a>
   </div>
   #end if
-  #var retweets: Tweets
+  #
   #for tweet in timeline.tweets:
-    #if tweet in retweets: continue
-    #elif tweet.retweetBy.isSome: retweets.add tweet
-    #end if
-    ${renderTweet(tweet, "timeline-tweet")}
+  #if tweet in retweets: continue
+  #elif tweet.retweetBy.isSome: retweets.add tweet
+  #end if
+  ${renderTweet(tweet, "timeline-tweet")}
   #end for
+  #
   #if timeline.hasMore:
   <div class="show-more">
     <a href="/${profile.username}?after=${timeline.minId}">Load older tweets</a>
@@ -81,6 +84,7 @@
     <h2 class="timeline-end" style="text-align: center;">No more tweets.</h2>
   </div>
   #end if
+  #
   #if timeline.tweets.len == 0:
   <div class="timeline-protected">
     <h2 class="timeline-protected-header" style="text-align: center;">No tweets found.</h2>