mirror of
https://github.com/Ferrite-iOS/Ferrite.git
synced 2026-01-11 20:10:27 +00:00
Premiumize: Fix DDL fetching and debrid IA handling
Signed-off-by: kingbri <bdashore3@proton.me>
This commit is contained in:
parent
46e0687bd7
commit
13a40a237a
2 changed files with 46 additions and 39 deletions
|
|
@ -45,11 +45,9 @@ public extension Premiumize {
|
|||
let path: String
|
||||
let size: Int
|
||||
let link: String
|
||||
let streamLink: String
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case path, size, link
|
||||
case streamLink = "stream_link"
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -193,50 +193,59 @@ public class DebridManager: ObservableObject {
|
|||
|
||||
// Common function to populate hashes for debrid services
|
||||
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 the hash is expired, remove it and update it
|
||||
let sendMagnets = resultMagnets.filter { magnet in
|
||||
if let IAIndex = realDebridIAValues.firstIndex(where: { $0.magnet.hash == magnet.hash }), enabledDebrids.contains(.realDebrid) {
|
||||
if now.timeIntervalSince1970 > realDebridIAValues[IAIndex].expiryTimeStamp {
|
||||
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 {
|
||||
// If a hash isn't found in the IA, update it
|
||||
// If the hash is expired, remove it and update it
|
||||
let sendMagnets = resultMagnets.filter { magnet in
|
||||
if let IAIndex = realDebridIAValues.firstIndex(where: { $0.magnet.hash == magnet.hash }), enabledDebrids.contains(.realDebrid) {
|
||||
if now.timeIntervalSince1970 > realDebridIAValues[IAIndex].expiryTimeStamp {
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
// 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(.realDebrid) {
|
||||
let fetchedRealDebridIA = try await realDebrid.instantAvailability(magnets: sendMagnets)
|
||||
realDebridIAValues += fetchedRealDebridIA
|
||||
}
|
||||
|
||||
if enabledDebrids.contains(.allDebrid) {
|
||||
if enabledDebrids.contains(.allDebrid) {
|
||||
do {
|
||||
let fetchedAllDebridIA = try await allDebrid.instantAvailability(magnets: sendMagnets)
|
||||
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
|
||||
let strippedResultMagnets: [Magnet] = resultMagnets.compactMap {
|
||||
if let magnetLink = $0.link {
|
||||
|
|
@ -254,10 +263,10 @@ public class DebridManager: ObservableObject {
|
|||
|
||||
premiumizeIAValues += tempIA
|
||||
}
|
||||
} catch {
|
||||
await sendDebridError(error, prefix: "Premiumize IA fetch error")
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
await sendDebridError(error, prefix: "Hash population error")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue