mirror of
https://github.com/Ferrite-iOS/Ferrite.git
synced 2026-05-08 03:01:00 +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 {
|
// Fetch the user magnets to the latest version
|
||||||
return
|
try await getUserMagnets()
|
||||||
}
|
|
||||||
|
|
||||||
let queryItems = sendMagnets.map { URLQueryItem(name: "magnets[]", value: $0.hash) }
|
for cloudMagnet in cloudMagnets {
|
||||||
var request = try URLRequest(url: buildRequestURL(urlString: "\(baseApiUrl)/magnet/instant", queryItems: queryItems))
|
if cachedStatus.contains(cloudMagnet.status),
|
||||||
|
sendMagnets.contains(where: { $0.hash == cloudMagnet.hash })
|
||||||
let data = try await performRequest(request: &request, requestName: #function)
|
{
|
||||||
let rawResponse = try jsonDecoder.decode(ADResponse<InstantAvailabilityResponse>.self, from: data).data
|
IAValues.append(
|
||||||
|
DebridIA(
|
||||||
let filteredMagnets = rawResponse.magnets.filter { $0.instant == true && $0.files != nil }
|
magnet: Magnet(hash: cloudMagnet.hash, link: nil),
|
||||||
let availableHashes = filteredMagnets.map { magnetResp in
|
expiryTimeStamp: Date().timeIntervalSince1970 + 300,
|
||||||
// Force unwrap is OK here since the filter caught any nil values
|
files: []
|
||||||
let files = magnetResp.files!.enumerated().map { index, magnetFile in
|
)
|
||||||
DebridIAFile(id: index, name: magnetFile.name)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
return DebridIA(
|
|
||||||
magnet: Magnet(hash: magnetResp.hash, link: magnetResp.magnet),
|
|
||||||
expiryTimeStamp: Date().timeIntervalSince1970 + 300,
|
|
||||||
files: files
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
IAValues += availableHashes
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Downloading
|
// MARK: - Downloading
|
||||||
|
|
@ -225,7 +216,9 @@ class AllDebrid: PollingDebridSource, ObservableObject {
|
||||||
func getRestrictedFile(magnet: Magnet, ia: DebridIA?, iaFile: DebridIAFile?) async throws -> (restrictedFile: DebridIAFile?, newIA: DebridIA?) {
|
func getRestrictedFile(magnet: Magnet, ia: DebridIA?, iaFile: DebridIAFile?) async throws -> (restrictedFile: DebridIAFile?, newIA: DebridIA?) {
|
||||||
let selectedMagnetId: String
|
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
|
selectedMagnetId = existingMagnet.id
|
||||||
} else {
|
} else {
|
||||||
let magnetId = try await addMagnet(magnet: magnet)
|
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
|
let rawResponse = try jsonDecoder.decode(ADResponse<AddMagnetResponse>.self, from: data).data
|
||||||
|
|
||||||
if let magnet = rawResponse.magnets[safe: 0] {
|
if let magnet = rawResponse.magnets[safe: 0] {
|
||||||
|
if !magnet.ready {
|
||||||
|
throw DebridError.IsCaching
|
||||||
|
}
|
||||||
|
|
||||||
return magnet.id
|
return magnet.id
|
||||||
} else {
|
} else {
|
||||||
throw DebridError.InvalidResponse
|
throw DebridError.InvalidResponse
|
||||||
|
|
|
||||||
|
|
@ -274,7 +274,9 @@ class RealDebrid: PollingDebridSource, ObservableObject {
|
||||||
try await getUserMagnets()
|
try await getUserMagnets()
|
||||||
|
|
||||||
for cloudMagnet in cloudMagnets {
|
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(
|
IAValues.append(
|
||||||
DebridIA(
|
DebridIA(
|
||||||
magnet: Magnet(hash: cloudMagnet.hash, link: nil),
|
magnet: Magnet(hash: cloudMagnet.hash, link: nil),
|
||||||
|
|
@ -294,7 +296,9 @@ class RealDebrid: PollingDebridSource, ObservableObject {
|
||||||
|
|
||||||
do {
|
do {
|
||||||
// Don't queue a new job if the magnet already exists in the user's library
|
// 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
|
selectedMagnetId = existingCloudMagnet.id
|
||||||
} else {
|
} else {
|
||||||
selectedMagnetId = try await addMagnet(magnet: magnet)
|
selectedMagnetId = try await addMagnet(magnet: magnet)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue