From 8bb842def748bb5ffff6415423249a10ffaf4b5c Mon Sep 17 00:00:00 2001 From: KTachibanaM Date: Sun, 10 Nov 2024 20:48:51 +0000 Subject: [PATCH] bookmarlet to subscribe to miniflux or inoreader --- README.md | 2 +- src/prefs_impl.nim | 5 +++++ src/views/preferences.nim | 44 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index aefafbe21..45614ccc4 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ This is a forked version of Nitter ([original version](https://github.com/sekai- * Fix video playback via Nitter proxying * Fix photo rail section on profile page * Add optional Sentry error reporting -* Add bookmarklet that opens protected RSS URL from a Twitter page +* Add bookmarklet that opens protected RSS URLs from Twitter pages and subscribes them to Miniflux or Inoreader * Unified Docker image for x86_64 and arm64 ## Usage diff --git a/src/prefs_impl.nim b/src/prefs_impl.nim index 8e2ac8f8d..9eb65cb78 100644 --- a/src/prefs_impl.nim +++ b/src/prefs_impl.nim @@ -107,6 +107,11 @@ genPrefs: "Reddit -> Teddit/Libreddit" placeholder: "Teddit hostname" + "RSS readers": + minifluxHostname(input, ""): + "Subscribe to Miniflux hostname" + placeholder: "Miniflux hostname" + iterator allPrefs*(): Pref = for k, v in prefList: for pref in v: diff --git a/src/views/preferences.nim b/src/views/preferences.nim index 5766407ad..d4102a7d3 100644 --- a/src/views/preferences.nim +++ b/src/views/preferences.nim @@ -46,6 +46,32 @@ javascript:(function() { })(); """ +let subscribeNitterRssToMinifluxJs = """ +javascript:(function() { + const url = window.location.href; + if (!url.startsWith("https://x.com")) { + alert("This is not a Twitter page"); + return + } + const rssUrl = `HTTP_OR_S://HOSTNAME${url.slice("https://x.com".length)}/rssRSS_KEY`; + const minifluxUrl = `https://MINIFLUX_HOSTNAME/bookmarklet?uri=${encodeURIComponent(rssUrl)}`; + window.open(minifluxUrl, '_blank').focus(); +})(); +""" + +let subscribeNitterRssToInoreaderJs = """ +javascript:(function() { + const url = window.location.href; + if (!url.startsWith("https://x.com")) { + alert("This is not a Twitter page"); + return + } + const rssUrl = `HTTP_OR_S://HOSTNAME${url.slice("https://x.com".length)}/rssRSS_KEY`; + const inoreaderUrl = `https://www.inoreader.com/search/feeds/${encodeURIComponent(rssUrl)}`; + window.open(inoreaderUrl, '_blank').focus(); +})(); +""" + proc renderPreferences*(prefs: Prefs; path: string; themes: seq[string]; hostname: string; useHttps: bool): VNode = buildHtml(tdiv(class="overlay-panel")): fieldset(class="preferences"): @@ -57,6 +83,24 @@ proc renderPreferences*(prefs: Prefs; path: string; themes: seq[string]; hostnam legend: text "Bookmarklets (drag them to bookmark bar)" + if prefs.minifluxHostname.len > 0: + a(href=subscribeNitterRssToMinifluxJs + .replace("MINIFLUX_HOSTNAME", prefs.minifluxHostname) + .replace("HTTP_OR_S", if useHttps: "https" else: "http") + .replace("HOSTNAME", hostname) + .replace("RSS_KEY", if existsEnv("INSTANCE_RSS_PASSWORD"): "?key=" & getEnv("INSTANCE_RSS_PASSWORD") else: "")): + text "Subscribe Nitter RSS to Miniflux" + + br() + + a(href=subscribeNitterRssToInoreaderJs + .replace("HTTP_OR_S", if useHttps: "https" else: "http") + .replace("HOSTNAME", hostname) + .replace("RSS_KEY", if existsEnv("INSTANCE_RSS_PASSWORD"): "?key=" & getEnv("INSTANCE_RSS_PASSWORD") else: "")): + text "Subscribe Nitter RSS to Inoreader" + + br() + a(href=openNitterRssUrlJs .replace("HTTP_OR_S", if useHttps: "https" else: "http") .replace("HOSTNAME", hostname)