Premiumize: Fix DDL fetching and debrid IA handling

Signed-off-by: kingbri <bdashore3@proton.me>
This commit is contained in:
kingbri 2023-08-26 11:29:19 -04:00
parent 46e0687bd7
commit 13a40a237a
2 changed files with 46 additions and 39 deletions

View file

@ -45,11 +45,9 @@ public extension Premiumize {
let path: String let path: String
let size: Int let size: Int
let link: String let link: String
let streamLink: String
enum CodingKeys: String, CodingKey { enum CodingKeys: String, CodingKey {
case path, size, link case path, size, link
case streamLink = "stream_link"
} }
} }

View file

@ -193,50 +193,59 @@ public class DebridManager: ObservableObject {
// Common function to populate hashes for debrid services // Common function to populate hashes for debrid services
public func populateDebridIA(_ resultMagnets: [Magnet]) async { public func populateDebridIA(_ resultMagnets: [Magnet]) async {
do { let now = Date()
let now = Date()
// If a hash isn't found in the IA, update it // If a hash isn't found in the IA, update it
// If the hash is expired, remove it and update it // If the hash is expired, remove it and update it
let sendMagnets = resultMagnets.filter { magnet in let sendMagnets = resultMagnets.filter { magnet in
if let IAIndex = realDebridIAValues.firstIndex(where: { $0.magnet.hash == magnet.hash }), enabledDebrids.contains(.realDebrid) { if let IAIndex = realDebridIAValues.firstIndex(where: { $0.magnet.hash == magnet.hash }), enabledDebrids.contains(.realDebrid) {
if now.timeIntervalSince1970 > realDebridIAValues[IAIndex].expiryTimeStamp { if now.timeIntervalSince1970 > realDebridIAValues[IAIndex].expiryTimeStamp {
realDebridIAValues.remove(at: IAIndex) realDebridIAValues.remove(at: IAIndex)
return true
} else {
return false
}
} else if let IAIndex = allDebridIAValues.firstIndex(where: { $0.magnet.hash == magnet.hash }), enabledDebrids.contains(.allDebrid) {
if now.timeIntervalSince1970 > allDebridIAValues[IAIndex].expiryTimeStamp {
allDebridIAValues.remove(at: IAIndex)
return true
} else {
return false
}
} else if let IAIndex = premiumizeIAValues.firstIndex(where: { $0.magnet.hash == magnet.hash }), enabledDebrids.contains(.premiumize) {
if now.timeIntervalSince1970 > premiumizeIAValues[IAIndex].expiryTimeStamp {
premiumizeIAValues.remove(at: IAIndex)
return true
} else {
return false
}
} else {
return true return true
} else {
return false
}
} else if let IAIndex = allDebridIAValues.firstIndex(where: { $0.magnet.hash == magnet.hash }), enabledDebrids.contains(.allDebrid) {
if now.timeIntervalSince1970 > allDebridIAValues[IAIndex].expiryTimeStamp {
allDebridIAValues.remove(at: IAIndex)
return true
} else {
return false
}
} else if let IAIndex = premiumizeIAValues.firstIndex(where: { $0.magnet.hash == magnet.hash }), enabledDebrids.contains(.premiumize) {
if now.timeIntervalSince1970 > premiumizeIAValues[IAIndex].expiryTimeStamp {
premiumizeIAValues.remove(at: IAIndex)
return true
} else {
return false
}
} else {
return true
}
}
// Don't exit the function if the API fetch errors
if !sendMagnets.isEmpty {
if enabledDebrids.contains(.realDebrid) {
do {
let fetchedRealDebridIA = try await realDebrid.instantAvailability(magnets: sendMagnets)
realDebridIAValues += fetchedRealDebridIA
} catch {
await sendDebridError(error, prefix: "RealDebrid IA fetch error")
} }
} }
if !sendMagnets.isEmpty { if enabledDebrids.contains(.allDebrid) {
if enabledDebrids.contains(.realDebrid) { do {
let fetchedRealDebridIA = try await realDebrid.instantAvailability(magnets: sendMagnets)
realDebridIAValues += fetchedRealDebridIA
}
if enabledDebrids.contains(.allDebrid) {
let fetchedAllDebridIA = try await allDebrid.instantAvailability(magnets: sendMagnets) let fetchedAllDebridIA = try await allDebrid.instantAvailability(magnets: sendMagnets)
allDebridIAValues += fetchedAllDebridIA allDebridIAValues += fetchedAllDebridIA
} catch {
await sendDebridError(error, prefix: "AllDebrid IA fetch error")
} }
}
if enabledDebrids.contains(.premiumize) { if enabledDebrids.contains(.premiumize) {
do {
// Only strip magnets that don't have an associated link for PM // Only strip magnets that don't have an associated link for PM
let strippedResultMagnets: [Magnet] = resultMagnets.compactMap { let strippedResultMagnets: [Magnet] = resultMagnets.compactMap {
if let magnetLink = $0.link { if let magnetLink = $0.link {
@ -254,10 +263,10 @@ public class DebridManager: ObservableObject {
premiumizeIAValues += tempIA premiumizeIAValues += tempIA
} }
} catch {
await sendDebridError(error, prefix: "Premiumize IA fetch error")
} }
} }
} catch {
await sendDebridError(error, prefix: "Hash population error")
} }
} }