diff options
author | 2023-09-23 22:54:48 +0200 | |
---|---|---|
committer | 2023-09-23 13:54:48 -0700 | |
commit | 54cb8fa0286e4a2f1a81c32b5a89722d93b30bf7 (patch) | |
tree | 219d0462300edd87ba86a03acc817048d092df3e /internal/reader/rewrite/rewrite_functions.go | |
parent | ace2699e79347c84ea1583e11abe6cabba85bf20 (diff) | |
download | v2-54cb8fa0286e4a2f1a81c32b5a89722d93b30bf7.tar.gz v2-54cb8fa0286e4a2f1a81c32b5a89722d93b30bf7.tar.zst v2-54cb8fa0286e4a2f1a81c32b5a89722d93b30bf7.zip |
Added new rewrite rules `add_hn_links_using_hack` and `add_hn_links_using_opener` to open HN comments with iOS apps
Diffstat (limited to 'internal/reader/rewrite/rewrite_functions.go')
-rw-r--r-- | internal/reader/rewrite/rewrite_functions.go | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/internal/reader/rewrite/rewrite_functions.go b/internal/reader/rewrite/rewrite_functions.go index 0e4aadbb..6950c333 100644 --- a/internal/reader/rewrite/rewrite_functions.go +++ b/internal/reader/rewrite/rewrite_functions.go @@ -12,6 +12,7 @@ import ( "strings" "miniflux.app/v2/internal/config" + "miniflux.app/v2/internal/logger" "github.com/PuerkitoBio/goquery" "github.com/yuin/goldmark" @@ -321,6 +322,55 @@ func decodeBase64Content(entryContent string) string { } } +func addHackerNewsLinksUsing(entryContent, app string) string { + doc, err := goquery.NewDocumentFromReader(strings.NewReader(entryContent)) + if err != nil { + return entryContent + } + + hn_prefix := "https://news.ycombinator.com/" + matches := doc.Find(`a[href^="` + hn_prefix + `"]`) + + if matches.Length() > 0 { + matches.Each(func(i int, a *goquery.Selection) { + hrefAttr, _ := a.Attr("href") + + hn_uri, err := url.Parse(hrefAttr) + if err != nil { + return + } + + if app == "opener" { + params := url.Values{} + params.Add("url", hn_uri.String()) + + url := url.URL{ + Scheme: "opener", + Host: "x-callback-url", + Path: "show-options", + RawQuery: params.Encode(), + } + + open_with_opener := `<a href="` + url.String() + `">Open with Opener</a>` + a.Parent().AppendHtml(" " + open_with_opener) + } else if app == "hack" { + url := strings.Replace(hn_uri.String(), hn_prefix, "hack://", 1) + + open_with_hack := `<a href="` + url + `">Open with HACK</a>` + a.Parent().AppendHtml(" " + open_with_hack) + } else { + logger.Error("[openHackerNewsLinksWith] unknown app provided: %q", app) + return + } + }) + + output, _ := doc.Find("body").First().Html() + return output + } + + return entryContent +} + func parseMarkdown(entryContent string) string { var sb strings.Builder md := goldmark.New( |