From a23318e25ed27a515b730d22686658d91aef460f Mon Sep 17 00:00:00 2001 From: mr-boneman Date: Thu, 5 Dec 2024 20:04:18 +0100 Subject: [PATCH] add `RSSMIX_DEBUG` env var this can help figuring out which feed is broken when fetching for example --- src/rss.nim | 21 ++++++++++++++------- src/rssmix.nim | 16 ++++++++-------- src/shared.nim | 6 ++++++ 3 files changed, 28 insertions(+), 15 deletions(-) create mode 100644 src/shared.nim diff --git a/src/rss.nim b/src/rss.nim index 6dc3013..d013f2b 100644 --- a/src/rss.nim +++ b/src/rss.nim @@ -1,5 +1,6 @@ -import std/[algorithm, json, xmltree, times, options, sequtils] +import std/[algorithm, json, xmltree, times, options, sequtils, strformat] import pkg/[mummy, rssatom, puppy, pretty] +import ./[shared] const atomTimeFormat* {.strdefine.} = "yyyy-MM-dd'T'HH:mm:ss'Z'" @@ -32,7 +33,9 @@ proc getTime(r: RssItem): DateTime = proc cmpRssItem(x, y: RssItem): int = cmp(x.getTime(), y.getTime()) -proc mixRssFeeds*(feeds: seq[RssFeed], name, id, link, authorName, description:string): RSS = +proc mixRssFeeds*( + feeds: seq[RssFeed], name, id, link, authorName, description: string +): RSS = result = RSS() result.id = name.some() result.title = id.some() @@ -41,18 +44,22 @@ proc mixRssFeeds*(feeds: seq[RssFeed], name, id, link, authorName, description:s result.description = description.some() var entries: seq[RSS] for feed in feeds: + relDebug: + echo &"[feed {name}] fetching {feed.url}" + let fetched = fetch(feed.url) case feed.kind of Atom: - entries.add parseAtom(fetch(feed.url)) + entries.add parseAtom(fetched) of RSSv2: - entries.add parseRss(fetch(feed.url)) + entries.add parseRss(fetched) entries[^1].items = entries[^1].items.mapIt( block: var item = it if feed.timeFormat.len != 0 and item.pubDate.isSome(): - # if the IDE screams at you here, ignore it - item.pubdate = some(parse(item.pubDate.get(), feed.timeFormat).format(atomTimeFormat)) + # if the IDE screams at you here, ignore it + item.pubdate = + some(parse(item.pubDate.get(), feed.timeFormat).format(atomTimeFormat)) else: item.pubdate = some(getRssv2Time(item).format(atomTimeFormat)) item @@ -63,7 +70,7 @@ proc mixRssFeeds*(feeds: seq[RssFeed], name, id, link, authorName, description:s block: var item = it if item.title.isSome(): - item.title = some(feed.titlePrefix&item.title.get()) + item.title = some(feed.titlePrefix & item.title.get()) item ) diff --git a/src/rssmix.nim b/src/rssmix.nim index 70060fa..ea22ab8 100644 --- a/src/rssmix.nim +++ b/src/rssmix.nim @@ -33,7 +33,8 @@ proc atomHandler(r: Request) {.gcsafe, thread.} = headers["Content-Type"] = "application/atom+xml" var cfg = configs[name] - let mixed = mixRssFeeds(cfg, "rssmix: "&name, name, "/atom/"&name, "rssmix", "mix of various rss feeds") + let mixed = + mixRssFeeds(cfg, name, name, "/atom/" & name, "rssmix", "mix of various rss feeds") r.respond(200, headers, body = $assembleAtom(mixed)) @@ -45,11 +46,11 @@ proc stop() = server.close() quit() -proc addfeeds(name:string, feeds:seq[RssFeed])= - if configs.contains(name): raise newException(KeyError, "duplicate config: "&name) +proc addfeeds(name: string, feeds: seq[RssFeed]) = + if configs.contains(name): + raise newException(KeyError, "duplicate config: " & name) configs[name] = feeds - proc main() = block: var cfgs = commandLineParams() @@ -63,15 +64,14 @@ proc main() = let cfg = readFile(cfg).parseConfig() addfeeds(cfg.name, cfg.feeds) elif dirExists(cfg): - for f in walkFiles(cfg/"*"): + for f in walkFiles(cfg / "*"): let cfg = readFile(f).parseConfig() addfeeds(cfg.name, cfg.feeds) - if configs.len == 0: quit("no configs found.", QuitFailure) + if configs.len == 0: + quit("no configs found.", QuitFailure) echo "registered feeds:" for key, value in configs.pairs: echo " - ", key, " (", value.len, " sub-feeds)" - - var router: Router router.get("/atom/@name", atomHandler) diff --git a/src/shared.nim b/src/shared.nim new file mode 100644 index 0000000..cd8d775 --- /dev/null +++ b/src/shared.nim @@ -0,0 +1,6 @@ +import std/[os] +export existsEnv + +template relDebug*(body) = + if existsEnv("RSSMIX_DEBUG"): + body