Merge pull request #2104 from barijaona/RSS-button

Use FeedDiscoverer to enable browser's RSS button
This adds the discovery of JSON Feeds to BrowserTab.
This commit is contained in:
Barijaona Ramaholimihaso
2026-03-14 19:21:45 +03:00
committed by GitHub
@@ -21,10 +21,7 @@ import Foundation
extension BrowserTab: RSSSource {
static let extractRssLinkScript = """
Array.from( document.querySelectorAll("link[type*='rss'], link[type*='atom']"),
function(link) {return new URL(link.getAttribute('href'), document.baseURI).href;} );
"""
static let extractHTMLSource = "document.documentElement.outerHTML"
var rssUrls: [URL] {
get {
@@ -80,13 +77,13 @@ extension BrowserTab: RSSSource {
// use javascript to detect RSS feed link
// TODO: deal with multiple links
waitForAsyncExecution(until: DispatchTime.now() + DispatchTimeInterval.milliseconds(200)) { [weak self] finishHandler in
self?.webView.evaluateJavaScript(BrowserTab.extractRssLinkScript) { result, error in
self?.webView.evaluateJavaScript(BrowserTab.extractHTMLSource) { result, error in
defer { finishHandler() }
if let result = result as? [String], error == nil {
// RSS feed link(s) detected
self?.rssUrls = result.compactMap { URL(string: $0 as String) }
if let html = result as? String, let data = html.data(using: .utf8), let baseUrl = self?.url, error == nil {
let discoverer = FeedDiscoverer(data: data, baseURL: baseUrl)
self?.rssUrls = discoverer.feedURLs().map(\.absoluteURL)
} else {
// error or no rss url available
// error or conversion problem
self?.rssUrls = []
}
}