mirror of
https://github.com/ViennaRSS/vienna-rss.git
synced 2026-04-07 19:27:39 +00:00
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:
@@ -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 = []
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user