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:
parent
f0d917002e
commit
eb48b99ed8
2 changed files with 22 additions and 5 deletions
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
Loading…
Reference in a new issue