Debrid: Fix cache alert
Change the returned error to one that's unique to caching. Also make deleteTorrents optional to delete the first torrent if necessary since that's always being cached. Signed-off-by: kingbri <bdashore3@proton.me>
This commit is contained in:
parent
ec8455c08d
commit
91f124130c
7 changed files with 38 additions and 11 deletions
|
|
@ -323,7 +323,11 @@ public class AllDebrid: PollingDebridSource, ObservableObject {
|
||||||
return cloudTorrents
|
return cloudTorrents
|
||||||
}
|
}
|
||||||
|
|
||||||
public func deleteTorrent(torrentId: String) async throws {
|
public func deleteTorrent(torrentId: String?) async throws {
|
||||||
|
guard let torrentId else {
|
||||||
|
throw DebridError.FailedRequest(description: "The torrentID \(String(describing: torrentId)) is invalid")
|
||||||
|
}
|
||||||
|
|
||||||
let queryItems = [
|
let queryItems = [
|
||||||
URLQueryItem(name: "id", value: torrentId)
|
URLQueryItem(name: "id", value: torrentId)
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -359,5 +359,5 @@ public class Premiumize: OAuthDebridSource, ObservableObject {
|
||||||
[]
|
[]
|
||||||
}
|
}
|
||||||
|
|
||||||
public func deleteTorrent(torrentId: String) async throws {}
|
public func deleteTorrent(torrentId: String?) async throws {}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -408,9 +408,9 @@ public class RealDebrid: PollingDebridSource, ObservableObject {
|
||||||
if let torrentLink = rawResponse.links[safe: linkIndex ?? -1], rawResponse.status == "downloaded" {
|
if let torrentLink = rawResponse.links[safe: linkIndex ?? -1], rawResponse.status == "downloaded" {
|
||||||
return torrentLink
|
return torrentLink
|
||||||
} else if rawResponse.status == "downloading" || rawResponse.status == "queued" {
|
} else if rawResponse.status == "downloading" || rawResponse.status == "queued" {
|
||||||
throw DebridError.EmptyTorrents
|
throw DebridError.IsCaching
|
||||||
} else {
|
} else {
|
||||||
throw DebridError.EmptyData
|
throw DebridError.EmptyTorrents
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -454,8 +454,23 @@ public class RealDebrid: PollingDebridSource, ObservableObject {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Deletes a torrent download from RD
|
// Deletes a torrent download from RD
|
||||||
public func deleteTorrent(torrentId: String) async throws {
|
public func deleteTorrent(torrentId: String?) async throws {
|
||||||
var request = URLRequest(url: URL(string: "\(baseApiUrl)/torrents/delete/\(torrentId)")!)
|
let deleteId: String
|
||||||
|
|
||||||
|
if let torrentId {
|
||||||
|
deleteId = torrentId
|
||||||
|
} else {
|
||||||
|
// Refresh the torrent cloud
|
||||||
|
// The first file is the currently caching one
|
||||||
|
let _ = try await getUserTorrents()
|
||||||
|
guard let firstTorrent = cloudTorrents[safe: -1] else {
|
||||||
|
throw DebridError.EmptyTorrents
|
||||||
|
}
|
||||||
|
|
||||||
|
deleteId = firstTorrent.torrentId
|
||||||
|
}
|
||||||
|
|
||||||
|
var request = URLRequest(url: URL(string: "\(baseApiUrl)/torrents/delete/\(deleteId)")!)
|
||||||
request.httpMethod = "DELETE"
|
request.httpMethod = "DELETE"
|
||||||
|
|
||||||
try await performRequest(request: &request, requestName: #function)
|
try await performRequest(request: &request, requestName: #function)
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,7 @@ public enum DebridError: Error {
|
||||||
case InvalidToken
|
case InvalidToken
|
||||||
case EmptyData
|
case EmptyData
|
||||||
case EmptyTorrents
|
case EmptyTorrents
|
||||||
|
case IsCaching
|
||||||
case FailedRequest(description: String)
|
case FailedRequest(description: String)
|
||||||
case AuthQuery(description: String)
|
case AuthQuery(description: String)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ public protocol DebridSource: AnyObservableObject {
|
||||||
|
|
||||||
// User torrent functions
|
// User torrent functions
|
||||||
func getUserTorrents() async throws -> [DebridCloudTorrent]
|
func getUserTorrents() async throws -> [DebridCloudTorrent]
|
||||||
func deleteTorrent(torrentId: String) async throws
|
func deleteTorrent(torrentId: String?) async throws
|
||||||
}
|
}
|
||||||
|
|
||||||
public protocol PollingDebridSource: DebridSource {
|
public protocol PollingDebridSource: DebridSource {
|
||||||
|
|
|
||||||
|
|
@ -483,8 +483,14 @@ public class DebridManager: ObservableObject {
|
||||||
// TODO: Add common fetch cloud method
|
// TODO: Add common fetch cloud method
|
||||||
//await fetchRdCloud(bypassTTL: true)
|
//await fetchRdCloud(bypassTTL: true)
|
||||||
} catch {
|
} catch {
|
||||||
// TODO: Fix error types and unify errors
|
switch error {
|
||||||
print("Error \(error)")
|
case DebridError.IsCaching:
|
||||||
|
showDeleteAlert.toggle()
|
||||||
|
default:
|
||||||
|
await sendDebridError(error, prefix: "\(debridSource.id) download error", cancelString: "Download cancelled")
|
||||||
|
}
|
||||||
|
|
||||||
|
logManager?.hideIndeterminateToast()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -127,13 +127,14 @@ struct SearchResultButtonView: View {
|
||||||
.alert("Caching file", isPresented: $debridManager.showDeleteAlert) {
|
.alert("Caching file", isPresented: $debridManager.showDeleteAlert) {
|
||||||
Button("Yes", role: .destructive) {
|
Button("Yes", role: .destructive) {
|
||||||
Task {
|
Task {
|
||||||
await debridManager.deleteRdTorrent()
|
try? await debridManager.selectedDebridSource?.deleteTorrent(torrentId: nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Button("Cancel", role: .cancel) {}
|
Button("Cancel", role: .cancel) {}
|
||||||
} message: {
|
} message: {
|
||||||
Text(
|
Text(
|
||||||
"RealDebrid is currently caching this file. Would you like to delete it? \n\n" +
|
"\(String(describing: debridManager.selectedDebridSource?.id)) is currently caching this file. " +
|
||||||
|
"Would you like to delete it? \n\n" +
|
||||||
"Progress can be checked on the RealDebrid website."
|
"Progress can be checked on the RealDebrid website."
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue