mirror of
https://github.com/Ferrite-iOS/Ferrite.git
synced 2026-01-11 20:10:27 +00:00
Debrid: Add context menu option to download to debrid
This is a manual button so users can download an item to their preferred debrid service. If the item is cached in the debrid, it will download instantly and display the result to the user. Otherwise, the caching alert is shown. Signed-off-by: kingbri <bdashore3@proton.me>
This commit is contained in:
parent
e5a872e09f
commit
4fb5f77718
2 changed files with 59 additions and 24 deletions
|
|
@ -13,7 +13,11 @@ class RealDebrid: PollingDebridSource, ObservableObject {
|
|||
let website = "https://real-debrid.com"
|
||||
let description: String? = "RealDebrid is a debrid service that is used for downloads and media playback. " +
|
||||
"You must pay to access this service. \n\n" +
|
||||
"This service does not inform if a magnet link in a user's cloud library is a batch before downloading."
|
||||
"It is not recommended to use this service since media cache checks are not possible via the API. " +
|
||||
"Ferrite's instant availability solely looks at a user's magnet library. \n\n" +
|
||||
"If you must use this service, it is recommended to download search results manually using the context menu. \n\n" +
|
||||
"This service does not inform if a magnet link is a batch before downloading."
|
||||
|
||||
let cachedStatus: [String] = ["downloaded"]
|
||||
var authTask: Task<Void, Error>?
|
||||
|
||||
|
|
|
|||
|
|
@ -37,29 +37,7 @@ struct SearchResultButtonView: View {
|
|||
case .full:
|
||||
if debridManager.selectDebridResult(magnet: result.magnet) {
|
||||
debridManager.currentDebridTask = Task {
|
||||
await debridManager.fetchDebridDownload(magnet: result.magnet)
|
||||
|
||||
// Bump to batch
|
||||
if debridManager.requiresUnrestrict {
|
||||
navModel.selectedHistoryInfo = historyEntry
|
||||
navModel.currentChoiceSheet = .batch
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
if !debridManager.downloadUrl.isEmpty {
|
||||
historyEntry.url = debridManager.downloadUrl
|
||||
PersistenceController.shared.createHistory(historyEntry, performSave: true)
|
||||
|
||||
pluginManager.runDefaultAction(
|
||||
urlString: debridManager.downloadUrl,
|
||||
navModel: navModel
|
||||
)
|
||||
|
||||
if navModel.currentChoiceSheet != .action {
|
||||
debridManager.downloadUrl = ""
|
||||
}
|
||||
}
|
||||
await downloadToDebrid()
|
||||
}
|
||||
}
|
||||
case .partial:
|
||||
|
|
@ -121,6 +99,28 @@ struct SearchResultButtonView: View {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
Button {
|
||||
if debridManager.currentDebridTask == nil {
|
||||
if !debridManager.selectDebridResult(magnet: result.magnet) {
|
||||
debridManager.selectedDebridItem = DebridIA(
|
||||
magnet: result.magnet,
|
||||
expiryTimeStamp: Date().timeIntervalSince1970 + 200,
|
||||
files: []
|
||||
)
|
||||
}
|
||||
|
||||
debridManager.currentDebridTask = Task {
|
||||
await downloadToDebrid()
|
||||
|
||||
// Re-populate the IA cache
|
||||
await debridManager.populateDebridIA([result.magnet])
|
||||
}
|
||||
}
|
||||
} label: {
|
||||
Text("Download to Debrid")
|
||||
Image(systemName: "arrow.down.circle")
|
||||
}
|
||||
}
|
||||
.alert("Caching file", isPresented: $debridManager.showDeleteAlert) {
|
||||
Button("Yes", role: .destructive) {
|
||||
|
|
@ -166,4 +166,35 @@ struct SearchResultButtonView: View {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Common function to download
|
||||
func downloadToDebrid() async {
|
||||
var historyEntry = HistoryEntryJson(
|
||||
name: result.title,
|
||||
source: result.source
|
||||
)
|
||||
|
||||
await debridManager.fetchDebridDownload(magnet: result.magnet)
|
||||
navModel.selectedTitle = result.title ?? ""
|
||||
|
||||
if debridManager.requiresUnrestrict {
|
||||
navModel.currentChoiceSheet = .batch
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
if !debridManager.downloadUrl.isEmpty {
|
||||
historyEntry.url = debridManager.downloadUrl
|
||||
PersistenceController.shared.createHistory(historyEntry, performSave: true)
|
||||
|
||||
pluginManager.runDefaultAction(
|
||||
urlString: debridManager.downloadUrl,
|
||||
navModel: navModel
|
||||
)
|
||||
|
||||
if navModel.currentChoiceSheet != .action {
|
||||
debridManager.downloadUrl = ""
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue