From 13a40a237aa59983f3b52f2b302ae98f94bb0f0f Mon Sep 17 00:00:00 2001 From: kingbri Date: Sat, 26 Aug 2023 11:29:19 -0400 Subject: [PATCH] Premiumize: Fix DDL fetching and debrid IA handling Signed-off-by: kingbri --- Ferrite/Models/PremiumizeModels.swift | 2 - Ferrite/ViewModels/DebridManager.swift | 83 ++++++++++++++------------ 2 files changed, 46 insertions(+), 39 deletions(-) diff --git a/Ferrite/Models/PremiumizeModels.swift b/Ferrite/Models/PremiumizeModels.swift index 21c928e..a6f30e7 100644 --- a/Ferrite/Models/PremiumizeModels.swift +++ b/Ferrite/Models/PremiumizeModels.swift @@ -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" } } diff --git a/Ferrite/ViewModels/DebridManager.swift b/Ferrite/ViewModels/DebridManager.swift index d5cae76..e7da300 100644 --- a/Ferrite/ViewModels/DebridManager.swift +++ b/Ferrite/ViewModels/DebridManager.swift @@ -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") } }