diff --git a/src/api/search.nim b/src/api/search.nim index 979ca25..5b79136 100644 --- a/src/api/search.nim +++ b/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") diff --git a/src/api/timeline.nim b/src/api/timeline.nim index 8687bdf..ada0c67 100644 --- a/src/api/timeline.nim +++ b/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 diff --git a/src/routes/media.nim b/src/routes/media.nim index e348d1b..1fa1915 100644 --- a/src/routes/media.nim +++ b/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: diff --git a/src/routes/preferences.nim b/src/routes/preferences.nim index 84a7e53..b3ce81e 100644 --- a/src/routes/preferences.nim +++ b/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 diff --git a/src/routes/router_utils.nim b/src/routes/router_utils.nim index 064499b..f13ff79 100644 --- a/src/routes/router_utils.nim +++ b/src/routes/router_utils.nim @@ -1,3 +1,6 @@ +import ../utils +export utils + template cookiePrefs*(): untyped {.dirty.} = getPrefs(request.cookies.getOrDefault("preferences")) diff --git a/src/routes/search.nim b/src/routes/search.nim index 90f1d08..62ff066 100644 --- a/src/routes/search.nim +++ b/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 diff --git a/src/routes/status.nim b/src/routes/status.nim index cdeaca4..91abc35 100644 --- a/src/routes/status.nim +++ b/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" diff --git a/src/routes/timeline.nim b/src/routes/timeline.nim index 285d31b..9041067 100644 --- a/src/routes/timeline.nim +++ b/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