Rework list api
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
import strutils
|
||||
import strutils, uri
|
||||
|
||||
import jester
|
||||
|
||||
@@ -8,41 +8,44 @@ import ".."/[types, redis_cache, api]
|
||||
import ../views/[general, timeline, list]
|
||||
export getListTimeline, getGraphList
|
||||
|
||||
template respList*(list, timeline, vnode: typed) =
|
||||
template respList*(list, timeline, title, vnode: typed) =
|
||||
if list.id.len == 0:
|
||||
resp Http404, showError("List \"" & @"list" & "\" not found", cfg)
|
||||
resp Http404, showError("List \"" & @"id" & "\" not found", cfg)
|
||||
|
||||
let
|
||||
html = renderList(vnode, timeline.query, list)
|
||||
rss = "/$1/lists/$2/rss" % [@"name", @"list"]
|
||||
rss = "/i/lists/$1/rss" % [@"id"]
|
||||
|
||||
resp renderMain(html, request, cfg, prefs, rss=rss, banner=list.banner)
|
||||
resp renderMain(html, request, cfg, prefs, titleText=title, rss=rss, banner=list.banner)
|
||||
|
||||
proc createListRouter*(cfg: Config) =
|
||||
router list:
|
||||
get "/@name/lists/@list/?":
|
||||
get "/@name/lists/@slug/?":
|
||||
cond '.' notin @"name"
|
||||
cond @"name" != "i"
|
||||
cond @"slug" != "memberships"
|
||||
let
|
||||
prefs = cookiePrefs()
|
||||
list = await getCachedList(@"name", @"list")
|
||||
timeline = await getListTimeline(list.id, getCursor())
|
||||
vnode = renderTimelineTweets(timeline, prefs, request.path)
|
||||
respList(list, timeline, vnode)
|
||||
|
||||
get "/@name/lists/@list/members":
|
||||
cond '.' notin @"name"
|
||||
cond @"name" != "i"
|
||||
let
|
||||
prefs = cookiePrefs()
|
||||
list = await getCachedList(@"name", @"list")
|
||||
members = await getListMembers(list, getCursor())
|
||||
respList(list, members, renderTimelineUsers(members, prefs, request.path))
|
||||
slug = decodeUrl(@"slug")
|
||||
list = await getCachedList(@"name", slug)
|
||||
if list.id.len == 0:
|
||||
resp Http404, showError("List \"" & @"slug" & "\" not found", cfg)
|
||||
redirect("/i/lists/" & list.id)
|
||||
|
||||
get "/i/lists/@id/?":
|
||||
cond '.' notin @"id"
|
||||
let list = await getCachedList(id=(@"id"))
|
||||
if list.id.len == 0:
|
||||
resp Http404
|
||||
await cache(list)
|
||||
redirect("/" & list.username & "/lists/" & list.name)
|
||||
let
|
||||
prefs = cookiePrefs()
|
||||
list = await getCachedList(id=(@"id"))
|
||||
title = "@" & list.username & "/" & list.name
|
||||
timeline = await getListTimeline(list.id, getCursor())
|
||||
vnode = renderTimelineTweets(timeline, prefs, request.path)
|
||||
respList(list, timeline, title, vnode)
|
||||
|
||||
get "/i/lists/@id/members":
|
||||
cond '.' notin @"id"
|
||||
let
|
||||
prefs = cookiePrefs()
|
||||
list = await getCachedList(id=(@"id"))
|
||||
title = "@" & list.username & "/" & list.name
|
||||
members = await getListMembers(list, getCursor())
|
||||
respList(list, members, title, renderTimelineUsers(members, prefs, request.path))
|
||||
|
||||
@@ -119,19 +119,18 @@ proc createRssRouter*(cfg: Config) =
|
||||
await cacheRss(key, rss)
|
||||
respRss(rss)
|
||||
|
||||
get "/@name/lists/@list/rss":
|
||||
get "/i/lists/@id/rss":
|
||||
cond cfg.enableRss
|
||||
cond '.' notin @"name"
|
||||
let
|
||||
cursor = getCursor()
|
||||
key = @"name" & "/" & @"list" & cursor
|
||||
key = @"id" & cursor
|
||||
|
||||
var rss = await getCachedRss(key)
|
||||
if rss.cursor.len > 0:
|
||||
respRss(rss)
|
||||
|
||||
let
|
||||
list = await getCachedList(@"name", @"list")
|
||||
list = await getCachedList(id=(@"id"))
|
||||
timeline = await getListTimeline(list.id, cursor)
|
||||
rss.cursor = timeline.bottom
|
||||
rss.feed = compress renderListRss(timeline.content, list, cfg)
|
||||
|
||||
Reference in New Issue
Block a user