| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- import asyncdispatch, strutils
- import jester
- import router_utils, timeline
- import ".."/[cache, agents, query]
- import ../views/general
- include "../views/rss.nimf"
- proc showRss*(name, hostname: string; query: Query): Future[string] {.async.} =
- let (profile, timeline, _) =
- await fetchSingleTimeline(name, "", getAgent(), query, media=false)
- if timeline != nil:
- return renderTimelineRss(timeline, profile, hostname)
- template respRss*(rss: typed) =
- if rss.len == 0:
- resp Http404, showError("User \"" & @"name" & "\" not found", cfg)
- resp rss, "application/rss+xml;charset=utf-8"
- proc createRssRouter*(cfg: Config) =
- router rss:
- get "/search/rss":
- if @"q".len > 200:
- resp Http400, showError("Search input too long.", cfg)
- let query = initQuery(params(request))
- if query.kind != tweets:
- resp Http400, showError("Only Tweet searches are allowed for RSS feeds.", cfg)
- let tweets = await getSearch[Tweet](query, "", getAgent(), media=false)
- respRss(renderSearchRss(tweets.content, query.text, genQueryUrl(query), cfg.hostname))
- get "/@name/rss":
- cond '.' notin @"name"
- respRss(await showRss(@"name", cfg.hostname, Query()))
- get "/@name/with_replies/rss":
- cond '.' notin @"name"
- respRss(await showRss(@"name", cfg.hostname, getReplyQuery(@"name")))
- get "/@name/media/rss":
- cond '.' notin @"name"
- respRss(await showRss(@"name", cfg.hostname, getMediaQuery(@"name")))
- get "/@name/search/rss":
- cond '.' notin @"name"
- respRss(await showRss(@"name", cfg.hostname, initQuery(params(request), name=(@"name"))))
- get "/@name/lists/@list/rss":
- cond '.' notin @"name"
- let list = await getListTimeline(@"name", @"list", getAgent(), "", media=false)
- respRss(renderListRss(list.content, @"name", @"list", cfg.hostname))
|