mirror of
https://github.com/zedeus/nitter
synced 2026-09-05 22:59:31 +00:00
89 lines
3.3 KiB
Nim
89 lines
3.3 KiB
Nim
# SPDX-License-Identifier: AGPL-3.0-only
|
|
import strformat
|
|
|
|
import jester
|
|
|
|
import router_utils
|
|
import ".."/[types, redis_cache, api]
|
|
import ../views/[general, timeline, community]
|
|
|
|
export community
|
|
|
|
template respCommunity*(cmty: Community; title: string; nav, vnode: typed) =
|
|
if cmty.id.len == 0 or cmty.name.len == 0:
|
|
resp Http404, showError(&"""Community "{@"id"}" not found""", cfg)
|
|
|
|
let html = renderCommunity(vnode, nav, cmty)
|
|
resp renderMain(html, request, cfg, prefs, titleText=title, banner=cmty.banner)
|
|
|
|
proc createCommunityRouter*(cfg: Config) =
|
|
router community:
|
|
get "/i/communities/@id/?":
|
|
cond '.' notin @"id"
|
|
let
|
|
prefs = requestPrefs()
|
|
cmty = await getCachedCommunity(@"id")
|
|
tl = await getGraphCommunityTweets(cmty.id, "Relevance", getCursor())
|
|
respCommunity(cmty, cmty.name,
|
|
renderCommunityTabs(QueryKind.posts, cmty),
|
|
renderTimelineTweets(tl, prefs, request.path))
|
|
|
|
get "/i/communities/@id/latest":
|
|
cond '.' notin @"id"
|
|
let
|
|
prefs = requestPrefs()
|
|
cmty = await getCachedCommunity(@"id")
|
|
tl = await getGraphCommunityTweets(cmty.id, "Recency", getCursor())
|
|
respCommunity(cmty, cmty.name & " - Latest",
|
|
renderCommunityTabs(QueryKind.replies, cmty),
|
|
renderTimelineTweets(tl, prefs, request.path))
|
|
|
|
get "/i/communities/@id/media":
|
|
cond '.' notin @"id"
|
|
let
|
|
prefs = requestPrefs()
|
|
cmty = await getCachedCommunity(@"id")
|
|
tl = await getGraphCommunityMedia(cmty.id, getCursor())
|
|
respCommunity(cmty, cmty.name & " - Media",
|
|
renderCommunityTabs(QueryKind.media, cmty),
|
|
renderTimelineTweets(tl, prefs, request.path))
|
|
|
|
get "/i/communities/@id/about":
|
|
cond '.' notin @"id"
|
|
let
|
|
prefs = requestPrefs()
|
|
cmty = await getCachedCommunity(@"id")
|
|
mods = await getCachedCommunityModerators(cmty.id)
|
|
respCommunity(cmty, cmty.name & " - About",
|
|
renderCommunityTabs(QueryKind.userList, cmty),
|
|
renderCommunityAbout(cmty, mods))
|
|
|
|
get "/i/communities/@id/members":
|
|
cond '.' notin @"id"
|
|
let
|
|
prefs = requestPrefs()
|
|
cmty = await getCachedCommunity(@"id")
|
|
members = await getGraphCommunityMembers(cmty.id, getCursor())
|
|
respCommunity(cmty, cmty.name & " - Members",
|
|
renderMemberTabs(cmty, false),
|
|
renderTimelineUsers(members, prefs, request.path))
|
|
|
|
get "/i/communities/@id/moderators":
|
|
cond '.' notin @"id"
|
|
let
|
|
prefs = requestPrefs()
|
|
cmty = await getCachedCommunity(@"id")
|
|
mods = await getCachedCommunityModerators(cmty.id)
|
|
respCommunity(cmty, cmty.name & " - Moderators",
|
|
renderMemberTabs(cmty, true),
|
|
renderTimelineUsers(Result[User](content: mods), prefs, request.path))
|
|
|
|
get "/i/communities/@id/hashtag/@tag":
|
|
cond '.' notin @"id"
|
|
let
|
|
prefs = requestPrefs()
|
|
cmty = await getCachedCommunity(@"id")
|
|
tl = await getGraphCommunityHashtags(cmty.id, @"tag", getCursor())
|
|
respCommunity(cmty, cmty.name & " - #" & @"tag",
|
|
renderHashtagHeader(cmty, @"tag"),
|
|
renderTimelineTweets(tl, prefs, request.path))
|