diff --git a/Ferrite/API/RealDebridWrapper.swift b/Ferrite/API/RealDebridWrapper.swift index b7b2880..6cd3d62 100644 --- a/Ferrite/API/RealDebridWrapper.swift +++ b/Ferrite/API/RealDebridWrapper.swift @@ -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? diff --git a/Ferrite/Views/ComponentViews/SearchResult/SearchResultButtonView.swift b/Ferrite/Views/ComponentViews/SearchResult/SearchResultButtonView.swift index d523bee..18f0f62 100644 --- a/Ferrite/Views/ComponentViews/SearchResult/SearchResultButtonView.swift +++ b/Ferrite/Views/ComponentViews/SearchResult/SearchResultButtonView.swift @@ -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 = "" + } + } + } }