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 {
|
if let hash, link == nil {
|
||||||
self.hash = parseHash(hash)
|
self.hash = parseHash(hash)
|
||||||
self.link = generateLink(hash: hash, title: title, trackers: trackers)
|
self.link = generateLink(hash: hash, title: title, trackers: trackers)
|
||||||
} else if let link, hash == nil {
|
} else if let parsedLink = parseLink(link), hash == nil {
|
||||||
self.link = link
|
self.link = parsedLink
|
||||||
self.hash = parseHash(extractHash(link: link))
|
self.hash = parseHash(extractHash(link: parsedLink))
|
||||||
} else {
|
} else {
|
||||||
self.hash = parseHash(hash)
|
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()
|
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:
|
case .scraping:
|
||||||
if let htmlParser = source.htmlParser {
|
if let htmlParser = source.htmlParser {
|
||||||
let replacedSearchUrl = htmlParser.searchUrl.map {
|
let replacedSearchUrl = htmlParser.searchUrl.map {
|
||||||
$0.replacingOccurrences(of: "{query}", with: encodedQuery)
|
$0
|
||||||
|
.replacingOccurrences(of: "{query}", with: encodedQuery)
|
||||||
}
|
}
|
||||||
|
|
||||||
let data = await handleUrls(
|
let data = await handleUrls(
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue