Zed 7 tahun lalu
induk
melakukan
7639883c6a

+ 5 - 4
src/api/search.nim

@@ -4,7 +4,8 @@ import strutils, json, xmltree, uri
 import ".."/[types, parser, parserutils, query]
 import utils, consts, timeline
 
-proc getResult[T](json: JsonNode; query: Query; after: string): Result[T] =
+proc getResult*[T](json: JsonNode; query: Query; after: string): Result[T] =
+  if json == nil: return Result[T](beginning: true, query: query)
   Result[T](
     hasMore: json["has_more_items"].to(bool),
     maxId: json.getOrDefault("max_position").getStr(""),
@@ -46,11 +47,11 @@ proc getSearch*[T](query: Query; after, agent: string): Future[Result[T]] {.asyn
 
   result = getResult[T](json, query, after)
   if not json.hasKey("items_html"): return
-  let html = parseHtml(json["items_html"].to(string))
 
   when T is Tweet:
     result = await finishTimeline(json, query, after, agent)
   elif T is Profile:
-    result.hasMore = json["items_html"].to(string) != "\n"
-    for p in html.selectAll(".js-stream-item"):
+    let html = json["items_html"].to(string)
+    result.hasMore = html != "\n"
+    for p in parseHtml(html).selectAll(".js-stream-item"):
       result.content.add parsePopupProfile(p, ".ProfileCard")

+ 3 - 10
src/api/timeline.nim

@@ -2,18 +2,11 @@ import httpclient, asyncdispatch, htmlparser
 import sequtils, strutils, json, xmltree, uri
 
 import ".."/[types, parser, parserutils, formatters, query]
-import utils, consts, media
+import utils, consts, media, search
 
 proc finishTimeline*(json: JsonNode; query: Query; after, agent: string): Future[Timeline] {.async.} =
-  if json == nil: return Timeline(beginning: true, query: query)
-
-  result = Timeline(
-    hasMore: json["has_more_items"].to(bool),
-    maxId: json.getOrDefault("max_position").getStr(""),
-    minId: json.getOrDefault("min_position").getStr("").cleanPos(),
-    query: query,
-    beginning: after.len == 0
-  )
+  result = getResult[Tweet](json, query, after)
+  if json == nil: return
 
   if json["new_latent_count"].to(int) == 0: return
   if not json.hasKey("items_html"): return

+ 1 - 2
src/routes/media.nim

@@ -3,12 +3,11 @@ import asyncfile, uri, strutils, httpclient, os
 import jester, regex
 
 import router_utils
-import ".."/[types, formatters, utils, prefs]
+import ".."/[types, formatters, prefs]
 import ../views/general
 
 export asyncfile, httpclient, os, strutils
 export regex
-export utils
 
 proc createMediaRouter*(cfg: Config) =
   router media:

+ 1 - 1
src/routes/preferences.nim

@@ -3,7 +3,7 @@ import strutils, uri
 import jester
 
 import router_utils
-import ".."/[prefs, types, utils]
+import ".."/[prefs, types]
 import ../views/[general, preferences]
 
 export preferences

+ 3 - 0
src/routes/router_utils.nim

@@ -1,3 +1,6 @@
+import ../utils
+export utils
+
 template cookiePrefs*(): untyped {.dirty.} =
   getPrefs(request.cookies.getOrDefault("preferences"))
 

+ 1 - 1
src/routes/search.nim

@@ -3,7 +3,7 @@ import strutils, sequtils, uri
 import jester
 
 import router_utils
-import ".."/[query, types, utils, api, agents, prefs]
+import ".."/[query, types, api, agents, prefs]
 import ../views/[general, search]
 
 export search

+ 4 - 6
src/routes/status.nim

@@ -3,17 +3,15 @@ import asyncdispatch, strutils, sequtils, uri
 import jester
 
 import router_utils
-import ".."/[api, prefs, types, utils, cache, formatters, agents, query]
-import ../views/[general, profile, timeline, status, search]
+import ".."/[api, prefs, types, formatters, agents]
+import ../views/[general, status]
 
 export uri, sequtils
 export router_utils
-export api, cache, formatters, query, agents
-export profile, status
+export api, formatters, agents
+export status
 
 proc createStatusRouter*(cfg: Config) =
-  setProfileCacheTime(cfg.profileCacheTime)
-
   router status:
     get "/@name/status/@id":
       cond '.' notin @"name"

+ 1 - 1
src/routes/timeline.nim

@@ -3,7 +3,7 @@ import asyncdispatch, strutils, sequtils, uri
 import jester
 
 import router_utils
-import ".."/[api, prefs, types, utils, cache, formatters, agents, query]
+import ".."/[api, prefs, types, cache, formatters, agents, query]
 import ../views/[general, profile, timeline, status, search]
 
 export uri, sequtils