diff --git a/Ferrite/Models/ScrapingViewModel.swift b/Ferrite/Models/ScrapingViewModel.swift index a0abab1..897f6c4 100644 --- a/Ferrite/Models/ScrapingViewModel.swift +++ b/Ferrite/Models/ScrapingViewModel.swift @@ -11,6 +11,8 @@ import SwiftSoup public struct SearchResult: Hashable, Codable { let title: String + let source: String + let size: String let magnetLink: String let magnetHash: String? } @@ -21,6 +23,7 @@ public struct TorrentSource: Hashable, Codable { let rowQuery: String let linkQuery: String let titleQuery: String + let sizeQuery: String } class ScrapingViewModel: ObservableObject { @@ -40,11 +43,12 @@ class ScrapingViewModel: ObservableObject { //), TorrentSource( name: "AnimeTosho", - url: "https://mirror.animetosho.org/search?q=", + url: "https://animetosho.org/search?q=", rowQuery: "#content .home_list_entry", linkQuery: ".links > a:nth-child(4)", - titleQuery: ".link" - ) + titleQuery: ".link", + sizeQuery: ".size" + ) ] @Published var searchResults: [SearchResult] = [] @@ -102,10 +106,15 @@ class ScrapingViewModel: ObservableObject { let magnetHash = fetchMagnetHash(magnetLink: href) let title = try row.select(source.titleQuery).first() - let text = try title?.text() + let titleText = try title?.text() + + let size = try row.select(source.sizeQuery).first() + let sizeText = try size?.text() let result = SearchResult( - title: text ?? "No title provided", + title: titleText ?? "No title provided", + source: source.name, + size: sizeText ?? "?B", magnetLink: href, magnetHash: magnetHash ) diff --git a/Ferrite/Views/MagnetChoiceView.swift b/Ferrite/Views/MagnetChoiceView.swift index fccd564..257a2b9 100644 --- a/Ferrite/Views/MagnetChoiceView.swift +++ b/Ferrite/Views/MagnetChoiceView.swift @@ -23,7 +23,7 @@ struct MagnetChoiceView: View { var body: some View { NavView { Form { - if realDebridEnabled { + if realDebridEnabled, debridManager.realDebridHashes.contains(selectedResult?.magnetHash ?? "") { Section("Real Debrid options") { Button("Play on Outplayer") { guard let downloadUrl = URL(string: "outplayer://\(debridManager.realDebridDownloadUrl)") else { @@ -93,6 +93,16 @@ struct MagnetChoiceView: View { struct MagnetChoiceView_Previews: PreviewProvider { static var previews: some View { - MagnetChoiceView(selectedResult: .constant(SearchResult(title: "", magnetLink: "", magnetHash: nil))) + MagnetChoiceView( + selectedResult: + .constant( + SearchResult( + title: "", + source: "", + size: "", + magnetLink: "", + magnetHash: nil) + ) + ) } } diff --git a/Ferrite/Views/SearchResultsView.swift b/Ferrite/Views/SearchResultsView.swift index 06003ad..b80ed7e 100644 --- a/Ferrite/Views/SearchResultsView.swift +++ b/Ferrite/Views/SearchResultsView.swift @@ -19,12 +19,13 @@ struct SearchResultsView: View { @State var selectedResult: SearchResult? @State private var showExternalSheet = false + @State private var resultUsesRd = false var body: some View { List { ForEach(scrapingModel.searchResults, id: \.self) { result in VStack(alignment: .leading) { - Button(result.title) { + Button { selectedResult = result if debridManager.realDebridHashes.contains(result.magnetHash ?? ""), realDebridEnabled { @@ -35,20 +36,40 @@ struct SearchResultsView: View { } else { showExternalSheet.toggle() } + } label: { + Text(result.title) + .font(.callout) + .fixedSize(horizontal: false, vertical: true) } .sheet(isPresented: $showExternalSheet) { MagnetChoiceView(selectedResult: $selectedResult) } .tint(colorScheme == .light ? .black : .white) - .font(.callout) .padding(.bottom, 5) HStack { - if realDebridEnabled { - Text("Real Debrid available: \(debridManager.realDebridHashes.contains(result.magnetHash ?? "") ? "Yes" : "No")") - } + Text(result.source) Spacer() + + Text(result.size) + + if realDebridEnabled { + Text("RD") + .fontWeight(.bold) + .padding(2) + .background { + if debridManager.realDebridHashes.contains(result.magnetHash ?? "") { + Color.green + .cornerRadius(4) + .opacity(0.5) + } else { + Color.red + .cornerRadius(4) + .opacity(0.5) + } + } + } } .font(.caption) }