Premiumize: Split cache check requests by 100
Premiumize has a dynamic upper limit of 107-110 (from testing) hashes per request. To play it safe, cache requests are split by 100 and executed in parallel as 2 (or more) requests. Signed-off-by: kingbri <bdashore3@proton.me>
This commit is contained in:
parent
55226e5628
commit
04e4503c86
2 changed files with 24 additions and 2 deletions
|
|
@ -77,13 +77,35 @@ public class Premiumize {
|
|||
}
|
||||
}
|
||||
|
||||
// Function to divide and execute cache endpoint requests in parallel
|
||||
// Calls this for 100 hashes at a time due to API limits
|
||||
public func divideCacheRequests(magnets: [Magnet]) async throws -> [Magnet] {
|
||||
let availableMagnets = try await withThrowingTaskGroup(of: [Magnet].self) { group in
|
||||
for chunk in magnets.chunked(into: 100) {
|
||||
group.addTask {
|
||||
try await self.checkCache(magnets: chunk)
|
||||
}
|
||||
}
|
||||
|
||||
var chunkedMagnets: [Magnet] = []
|
||||
for try await magnetArray in group {
|
||||
chunkedMagnets += magnetArray
|
||||
}
|
||||
|
||||
return chunkedMagnets
|
||||
}
|
||||
|
||||
return availableMagnets
|
||||
}
|
||||
|
||||
// Parent function for initial checking of the cache
|
||||
public func checkCache(magnets: [Magnet]) async throws -> [Magnet] {
|
||||
func checkCache(magnets: [Magnet]) async throws -> [Magnet] {
|
||||
var urlComponents = URLComponents(string: "\(baseApiUrl)/cache/check")!
|
||||
urlComponents.queryItems = magnets.map { URLQueryItem(name: "items[]", value: $0.hash) }
|
||||
guard let url = urlComponents.url else {
|
||||
throw PMError.InvalidUrl
|
||||
}
|
||||
|
||||
var request = URLRequest(url: url)
|
||||
|
||||
let data = try await performRequest(request: &request, requestName: #function)
|
||||
|
|
|
|||
|
|
@ -153,7 +153,7 @@ public class DebridManager: ObservableObject {
|
|||
}
|
||||
|
||||
if enabledDebrids.contains(.premiumize) {
|
||||
let availableMagnets = try await premiumize.checkCache(magnets: sendMagnets)
|
||||
let availableMagnets = try await premiumize.divideCacheRequests(magnets: sendMagnets)
|
||||
|
||||
// Split DDL requests into chunks of 10
|
||||
for chunk in availableMagnets.chunked(into: 10) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue