Scraping: Add new source methods

Some sources can be unique and require some extra parsing. Add the
ability to extract a magnet link instead of assuming that every
source provides a properly formatted one.

Signed-off-by: kingbri <bdashore3@proton.me>
This commit is contained in:
kingbri 2023-06-06 19:54:13 -04:00 committed by Brian Dashore
parent f0d917002e
commit eb48b99ed8
2 changed files with 22 additions and 5 deletions

View file

@ -55,12 +55,12 @@ public struct Magnet: Codable, Hashable, Sendable {
if let hash, link == nil {
self.hash = parseHash(hash)
self.link = generateLink(hash: hash, title: title, trackers: trackers)
} else if let link, hash == nil {
self.link = link
self.hash = parseHash(extractHash(link: link))
} else if let parsedLink = parseLink(link), hash == nil {
self.link = parsedLink
self.hash = parseHash(extractHash(link: parsedLink))
} else {
self.hash = parseHash(hash)
self.link = link
self.link = parseLink(link)
}
}
@ -107,4 +107,20 @@ public struct Magnet: Codable, Hashable, Sendable {
return String(magnetHash).lowercased()
}
}
func parseLink(_ link: String?) -> String? {
if let decodedLink = link?.removingPercentEncoding {
let separator = "magnet:?xt=urn:btih:"
if decodedLink.starts(with: separator) {
return decodedLink
} else if decodedLink.contains(separator) {
let splitLink = decodedLink.components(separatedBy: separator)
return splitLink.last.map { separator + $0 } ?? nil
} else {
return nil
}
} else {
return nil
}
}
}

View file

@ -164,7 +164,8 @@ class ScrapingViewModel: ObservableObject {
case .scraping:
if let htmlParser = source.htmlParser {
let replacedSearchUrl = htmlParser.searchUrl.map {
$0.replacingOccurrences(of: "{query}", with: encodedQuery)
$0
.replacingOccurrences(of: "{query}", with: encodedQuery)
}
let data = await handleUrls(