Reduce usage of strformat, minor perf improvement
This commit is contained in:
parent
92a6eb0339
commit
85316f8f8d
|
@ -58,11 +58,11 @@ proc replaceUrls*(body: string; prefs: Prefs; absolute=""): string =
|
||||||
result = result.replace(ytRegex, prefs.replaceYouTube)
|
result = result.replace(ytRegex, prefs.replaceYouTube)
|
||||||
|
|
||||||
if prefs.replaceTwitter.len > 0 and ("twitter.com" in body or tco in body):
|
if prefs.replaceTwitter.len > 0 and ("twitter.com" in body or tco in body):
|
||||||
result = result.replace(tco, &"{https}{prefs.replaceTwitter}/t.co")
|
result = result.replace(tco, https & prefs.replaceTwitter & "/t.co")
|
||||||
result = result.replace(cards, prefs.replaceTwitter & "/cards")
|
result = result.replace(cards, prefs.replaceTwitter & "/cards")
|
||||||
result = result.replace(twRegex, prefs.replaceTwitter)
|
result = result.replace(twRegex, prefs.replaceTwitter)
|
||||||
result = result.replacef(twLinkRegex, a(
|
result = result.replacef(twLinkRegex, a(
|
||||||
prefs.replaceTwitter & "$2", href = &"{https}{prefs.replaceTwitter}$1"))
|
prefs.replaceTwitter & "$2", href = https & prefs.replaceTwitter & "$1"))
|
||||||
|
|
||||||
if prefs.replaceReddit.len > 0 and ("reddit.com" in result or "redd.it" in result):
|
if prefs.replaceReddit.len > 0 and ("reddit.com" in result or "redd.it" in result):
|
||||||
result = result.replace(rdShortRegex, prefs.replaceReddit & "/comments/")
|
result = result.replace(rdShortRegex, prefs.replaceReddit & "/comments/")
|
||||||
|
|
|
@ -10,6 +10,11 @@ include "../views/rss.nimf"
|
||||||
|
|
||||||
export times, hashes
|
export times, hashes
|
||||||
|
|
||||||
|
proc redisKey*(page, name, cursor: string): string =
|
||||||
|
result = page & ":" & name
|
||||||
|
if cursor.len > 0:
|
||||||
|
result &= ":" & cursor
|
||||||
|
|
||||||
proc timelineRss*(req: Request; cfg: Config; query: Query): Future[Rss] {.async.} =
|
proc timelineRss*(req: Request; cfg: Config; query: Query): Future[Rss] {.async.} =
|
||||||
var profile: Profile
|
var profile: Profile
|
||||||
let
|
let
|
||||||
|
@ -42,8 +47,8 @@ proc timelineRss*(req: Request; cfg: Config; query: Query): Future[Rss] {.async.
|
||||||
template respRss*(rss, page) =
|
template respRss*(rss, page) =
|
||||||
if rss.cursor.len == 0:
|
if rss.cursor.len == 0:
|
||||||
let info = case page
|
let info = case page
|
||||||
of "User": &""" "{@"name"}" """
|
of "User": " \"" & @"name" & "\" "
|
||||||
of "List": &""" "{@"id"}" """
|
of "List": " \"" & @"id" & "\" "
|
||||||
else: " "
|
else: " "
|
||||||
|
|
||||||
resp Http404, showError(page & info & "not found", cfg)
|
resp Http404, showError(page & info & "not found", cfg)
|
||||||
|
@ -67,7 +72,7 @@ proc createRssRouter*(cfg: Config) =
|
||||||
|
|
||||||
let
|
let
|
||||||
cursor = getCursor()
|
cursor = getCursor()
|
||||||
key = &"search:{hash(genQueryUrl(query))}:cursor"
|
key = redisKey("search", $hash(genQueryUrl(query)), cursor)
|
||||||
|
|
||||||
var rss = await getCachedRss(key)
|
var rss = await getCachedRss(key)
|
||||||
if rss.cursor.len > 0:
|
if rss.cursor.len > 0:
|
||||||
|
@ -84,9 +89,8 @@ proc createRssRouter*(cfg: Config) =
|
||||||
cond cfg.enableRss
|
cond cfg.enableRss
|
||||||
cond '.' notin @"name"
|
cond '.' notin @"name"
|
||||||
let
|
let
|
||||||
cursor = getCursor()
|
|
||||||
name = @"name"
|
name = @"name"
|
||||||
key = &"twitter:{name}:{cursor}"
|
key = redisKey("twitter", name, getCursor())
|
||||||
|
|
||||||
var rss = await getCachedRss(key)
|
var rss = await getCachedRss(key)
|
||||||
if rss.cursor.len > 0:
|
if rss.cursor.len > 0:
|
||||||
|
@ -101,18 +105,20 @@ proc createRssRouter*(cfg: Config) =
|
||||||
cond cfg.enableRss
|
cond cfg.enableRss
|
||||||
cond '.' notin @"name"
|
cond '.' notin @"name"
|
||||||
cond @"tab" in ["with_replies", "media", "search"]
|
cond @"tab" in ["with_replies", "media", "search"]
|
||||||
let name = @"name"
|
let
|
||||||
let query =
|
name = @"name"
|
||||||
case @"tab"
|
tab = @"tab"
|
||||||
of "with_replies": getReplyQuery(name)
|
query =
|
||||||
of "media": getMediaQuery(name)
|
case tab
|
||||||
of "search": initQuery(params(request), name=name)
|
of "with_replies": getReplyQuery(name)
|
||||||
else: Query(fromUser: @[name])
|
of "media": getMediaQuery(name)
|
||||||
|
of "search": initQuery(params(request), name=name)
|
||||||
|
else: Query(fromUser: @[name])
|
||||||
|
|
||||||
var key = &"""{@"tab"}:{@"name"}:"""
|
let searchKey = if tab != "search": ""
|
||||||
if @"tab" == "search":
|
else: ":" & $hash(genQueryUrl(query))
|
||||||
key &= $hash(genQueryUrl(query)) & ":"
|
|
||||||
key &= getCursor()
|
let key = redisKey(tab, name & searchKey, getCursor())
|
||||||
|
|
||||||
var rss = await getCachedRss(key)
|
var rss = await getCachedRss(key)
|
||||||
if rss.cursor.len > 0:
|
if rss.cursor.len > 0:
|
||||||
|
@ -132,28 +138,27 @@ proc createRssRouter*(cfg: Config) =
|
||||||
cursor = getCursor()
|
cursor = getCursor()
|
||||||
|
|
||||||
if list.id.len == 0:
|
if list.id.len == 0:
|
||||||
resp Http404, showError(&"""List "{@"slug"}" not found""", cfg)
|
resp Http404, showError("List \"" & @"slug" & "\" not found", cfg)
|
||||||
|
|
||||||
let url = &"/i/lists/{list.id}/rss"
|
let url = "/i/lists/" & list.id & "/rss"
|
||||||
if cursor.len > 0:
|
if cursor.len > 0:
|
||||||
redirect(&"{url}?cursor={encodeUrl(cursor, false)}")
|
redirect(url & "?cursor=" & encodeUrl(cursor, false))
|
||||||
else:
|
else:
|
||||||
redirect(url)
|
redirect(url)
|
||||||
|
|
||||||
get "/i/lists/@id/rss":
|
get "/i/lists/@id/rss":
|
||||||
cond cfg.enableRss
|
cond cfg.enableRss
|
||||||
let
|
let
|
||||||
|
id = @"id"
|
||||||
cursor = getCursor()
|
cursor = getCursor()
|
||||||
key =
|
key = redisKey("lists", id, cursor)
|
||||||
if cursor.len == 0: "lists:" & @"id"
|
|
||||||
else: &"""lists:{@"id"}:{cursor}"""
|
|
||||||
|
|
||||||
var rss = await getCachedRss(key)
|
var rss = await getCachedRss(key)
|
||||||
if rss.cursor.len > 0:
|
if rss.cursor.len > 0:
|
||||||
respRss(rss, "List")
|
respRss(rss, "List")
|
||||||
|
|
||||||
let
|
let
|
||||||
list = await getCachedList(id=(@"id"))
|
list = await getCachedList(id=id)
|
||||||
timeline = await getListTimeline(list.id, cursor)
|
timeline = await getListTimeline(list.id, cursor)
|
||||||
rss.cursor = timeline.bottom
|
rss.cursor = timeline.bottom
|
||||||
rss.feed = renderListRss(timeline.content, list, cfg)
|
rss.feed = renderListRss(timeline.content, list, cfg)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# SPDX-License-Identifier: AGPL-3.0-only
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
import strutils, strformat, uri
|
import strutils, uri
|
||||||
|
|
||||||
import jester
|
import jester
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ proc createSearchRouter*(cfg: Config) =
|
||||||
resp Http404, showError("Invalid search", cfg)
|
resp Http404, showError("Invalid search", cfg)
|
||||||
|
|
||||||
get "/hashtag/@hash":
|
get "/hashtag/@hash":
|
||||||
redirect(&"""/search?q={encodeUrl("#" & @"hash")}""")
|
redirect("/search?q=" & encodeUrl("#" & @"hash"))
|
||||||
|
|
||||||
get "/opensearch":
|
get "/opensearch":
|
||||||
let url = getUrlPrefix(cfg) & "/search?q="
|
let url = getUrlPrefix(cfg) & "/search?q="
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# SPDX-License-Identifier: AGPL-3.0-only
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
import asyncdispatch, strutils, strformat, sequtils, uri, options, times
|
import asyncdispatch, strutils, sequtils, uri, options, times
|
||||||
import jester, karax/vdom
|
import jester, karax/vdom
|
||||||
|
|
||||||
import router_utils
|
import router_utils
|
||||||
|
@ -102,7 +102,7 @@ proc showTimeline*(request: Request; query: Query; cfg: Config; prefs: Prefs;
|
||||||
template respTimeline*(timeline: typed) =
|
template respTimeline*(timeline: typed) =
|
||||||
let t = timeline
|
let t = timeline
|
||||||
if t.len == 0:
|
if t.len == 0:
|
||||||
resp Http404, showError(&"""User "{@"name"}" not found""", cfg)
|
resp Http404, showError("User \"" & @"name" & "\" not found", cfg)
|
||||||
resp t
|
resp t
|
||||||
|
|
||||||
template respUserId*() =
|
template respUserId*() =
|
||||||
|
|
|
@ -81,7 +81,7 @@ proc renderHead*(prefs: Prefs; cfg: Config; req: Request; titleText=""; desc="";
|
||||||
|
|
||||||
title:
|
title:
|
||||||
if titleText.len > 0:
|
if titleText.len > 0:
|
||||||
text &"{titleText}|{cfg.title}"
|
text titleText & " | " & cfg.title
|
||||||
else:
|
else:
|
||||||
text cfg.title
|
text cfg.title
|
||||||
|
|
||||||
|
|
|
@ -108,7 +108,7 @@ proc renderProfile*(profile: var Profile; prefs: Prefs; path: string): VNode =
|
||||||
renderBanner(profile.user.banner)
|
renderBanner(profile.user.banner)
|
||||||
|
|
||||||
let sticky = if prefs.stickyProfile: " sticky" else: ""
|
let sticky = if prefs.stickyProfile: " sticky" else: ""
|
||||||
tdiv(class=(&"profile-tab{sticky}")):
|
tdiv(class=("profile-tab" & sticky)):
|
||||||
renderUserCard(profile.user, prefs)
|
renderUserCard(profile.user, prefs)
|
||||||
if profile.photoRail.len > 0:
|
if profile.photoRail.len > 0:
|
||||||
renderPhotoRail(profile)
|
renderPhotoRail(profile)
|
||||||
|
|
Loading…
Reference in New Issue