mirror of
https://github.com/Ferrite-iOS/Ferrite.git
synced 2026-01-11 20:10:27 +00:00
Debrid: Add new IA method for AllDebrid and fix cache fetch
The new AllDebrid IA method follows the same behavior as RealDebrid. Only add user magnets into the IA if they're actually cached and not caching into the service. Signed-off-by: kingbri <bdashore3@proton.me>
This commit is contained in:
parent
dd54ec027b
commit
ecf92239d2
2 changed files with 26 additions and 25 deletions
|
|
@ -192,31 +192,22 @@ class AllDebrid: PollingDebridSource, ObservableObject {
|
|||
}
|
||||
}
|
||||
|
||||
if sendMagnets.isEmpty {
|
||||
return
|
||||
}
|
||||
// Fetch the user magnets to the latest version
|
||||
try await getUserMagnets()
|
||||
|
||||
let queryItems = sendMagnets.map { URLQueryItem(name: "magnets[]", value: $0.hash) }
|
||||
var request = try URLRequest(url: buildRequestURL(urlString: "\(baseApiUrl)/magnet/instant", queryItems: queryItems))
|
||||
|
||||
let data = try await performRequest(request: &request, requestName: #function)
|
||||
let rawResponse = try jsonDecoder.decode(ADResponse<InstantAvailabilityResponse>.self, from: data).data
|
||||
|
||||
let filteredMagnets = rawResponse.magnets.filter { $0.instant == true && $0.files != nil }
|
||||
let availableHashes = filteredMagnets.map { magnetResp in
|
||||
// Force unwrap is OK here since the filter caught any nil values
|
||||
let files = magnetResp.files!.enumerated().map { index, magnetFile in
|
||||
DebridIAFile(id: index, name: magnetFile.name)
|
||||
for cloudMagnet in cloudMagnets {
|
||||
if cachedStatus.contains(cloudMagnet.status),
|
||||
sendMagnets.contains(where: { $0.hash == cloudMagnet.hash })
|
||||
{
|
||||
IAValues.append(
|
||||
DebridIA(
|
||||
magnet: Magnet(hash: cloudMagnet.hash, link: nil),
|
||||
expiryTimeStamp: Date().timeIntervalSince1970 + 300,
|
||||
files: []
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
return DebridIA(
|
||||
magnet: Magnet(hash: magnetResp.hash, link: magnetResp.magnet),
|
||||
expiryTimeStamp: Date().timeIntervalSince1970 + 300,
|
||||
files: files
|
||||
)
|
||||
}
|
||||
|
||||
IAValues += availableHashes
|
||||
}
|
||||
|
||||
// MARK: - Downloading
|
||||
|
|
@ -225,7 +216,9 @@ class AllDebrid: PollingDebridSource, ObservableObject {
|
|||
func getRestrictedFile(magnet: Magnet, ia: DebridIA?, iaFile: DebridIAFile?) async throws -> (restrictedFile: DebridIAFile?, newIA: DebridIA?) {
|
||||
let selectedMagnetId: String
|
||||
|
||||
if let existingMagnet = cloudMagnets.first(where: { $0.hash == magnet.hash && cachedStatus.contains($0.status) }) {
|
||||
if let existingMagnet = cloudMagnets.first(where: {
|
||||
$0.hash == magnet.hash && cachedStatus.contains($0.status)
|
||||
}) {
|
||||
selectedMagnetId = existingMagnet.id
|
||||
} else {
|
||||
let magnetId = try await addMagnet(magnet: magnet)
|
||||
|
|
@ -261,6 +254,10 @@ class AllDebrid: PollingDebridSource, ObservableObject {
|
|||
let rawResponse = try jsonDecoder.decode(ADResponse<AddMagnetResponse>.self, from: data).data
|
||||
|
||||
if let magnet = rawResponse.magnets[safe: 0] {
|
||||
if !magnet.ready {
|
||||
throw DebridError.IsCaching
|
||||
}
|
||||
|
||||
return magnet.id
|
||||
} else {
|
||||
throw DebridError.InvalidResponse
|
||||
|
|
|
|||
|
|
@ -274,7 +274,9 @@ class RealDebrid: PollingDebridSource, ObservableObject {
|
|||
try await getUserMagnets()
|
||||
|
||||
for cloudMagnet in cloudMagnets {
|
||||
if sendMagnets.contains(where: { $0.hash == cloudMagnet.hash }) {
|
||||
if cachedStatus.contains(cloudMagnet.status),
|
||||
sendMagnets.contains(where: { $0.hash == cloudMagnet.hash })
|
||||
{
|
||||
IAValues.append(
|
||||
DebridIA(
|
||||
magnet: Magnet(hash: cloudMagnet.hash, link: nil),
|
||||
|
|
@ -294,7 +296,9 @@ class RealDebrid: PollingDebridSource, ObservableObject {
|
|||
|
||||
do {
|
||||
// Don't queue a new job if the magnet already exists in the user's library
|
||||
if let existingCloudMagnet = cloudMagnets.first(where: { $0.hash == magnet.hash && $0.status == "downloaded" }) {
|
||||
if let existingCloudMagnet = cloudMagnets.first(where: {
|
||||
$0.hash == magnet.hash && cachedStatus.contains($0.status)
|
||||
}) {
|
||||
selectedMagnetId = existingCloudMagnet.id
|
||||
} else {
|
||||
selectedMagnetId = try await addMagnet(magnet: magnet)
|
||||
|
|
|
|||
Loading…
Reference in a new issue