The overall UI of Ferrite has been changed to make animations smoother and streamline the experiences. A new search filter interface has been added for all iOS versions, but iOS 15 and up have smooth UI applied due to bugs with searchbars in iOS 14 (which shouldn't even have a searchbar in the first place). Also fix the plugin fetching logic to not listen to a combine publisher and instead use a notification that is easier to control. Signed-off-by: kingbri <bdashore3@proton.me>
99 lines
3.4 KiB
Swift
99 lines
3.4 KiB
Swift
//
|
|
// BatchChoiceView.swift
|
|
// Ferrite
|
|
//
|
|
// Created by Brian Dashore on 7/24/22.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
struct BatchChoiceView: View {
|
|
@EnvironmentObject var debridManager: DebridManager
|
|
@EnvironmentObject var scrapingModel: ScrapingViewModel
|
|
@EnvironmentObject var navModel: NavigationViewModel
|
|
|
|
let backgroundContext = PersistenceController.shared.backgroundContext
|
|
|
|
var body: some View {
|
|
NavView {
|
|
List {
|
|
switch debridManager.selectedDebridType {
|
|
case .realDebrid:
|
|
ForEach(debridManager.selectedRealDebridItem?.files ?? [], id: \.self) { file in
|
|
Button(file.name) {
|
|
debridManager.selectedRealDebridFile = file
|
|
|
|
queueCommonDownload(fileName: file.name)
|
|
}
|
|
}
|
|
case .allDebrid:
|
|
ForEach(debridManager.selectedAllDebridItem?.files ?? [], id: \.self) { file in
|
|
Button(file.fileName) {
|
|
debridManager.selectedAllDebridFile = file
|
|
|
|
queueCommonDownload(fileName: file.fileName)
|
|
}
|
|
}
|
|
case .premiumize:
|
|
ForEach(debridManager.selectedPremiumizeItem?.files ?? [], id: \.self) { file in
|
|
Button(file.name) {
|
|
debridManager.selectedPremiumizeFile = file
|
|
|
|
queueCommonDownload(fileName: file.name)
|
|
}
|
|
}
|
|
case .none:
|
|
EmptyView()
|
|
}
|
|
}
|
|
.backport.tint(.primary)
|
|
.listStyle(.insetGrouped)
|
|
.inlinedList(inset: -20)
|
|
.navigationTitle("Select a file")
|
|
.navigationBarTitleDisplayMode(.inline)
|
|
.toolbar {
|
|
ToolbarItem(placement: .navigationBarTrailing) {
|
|
Button("Done") {
|
|
navModel.currentChoiceSheet = nil
|
|
|
|
Task {
|
|
try? await Task.sleep(seconds: 1)
|
|
|
|
debridManager.clearSelectedDebridItems()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Common function to communicate betwen VMs and queue/display a download
|
|
func queueCommonDownload(fileName: String) {
|
|
debridManager.currentDebridTask = Task {
|
|
await debridManager.fetchDebridDownload(magnet: navModel.resultFromCloud ? nil : navModel.selectedMagnet)
|
|
|
|
if !debridManager.downloadUrl.isEmpty {
|
|
try? await Task.sleep(seconds: 1)
|
|
navModel.selectedBatchTitle = fileName
|
|
|
|
if var selectedHistoryInfo = navModel.selectedHistoryInfo {
|
|
selectedHistoryInfo.url = debridManager.downloadUrl
|
|
selectedHistoryInfo.subName = fileName
|
|
PersistenceController.shared.createHistory(selectedHistoryInfo, performSave: true)
|
|
}
|
|
|
|
navModel.runDebridAction(urlString: debridManager.downloadUrl, nil)
|
|
}
|
|
|
|
debridManager.clearSelectedDebridItems()
|
|
}
|
|
|
|
navModel.currentChoiceSheet = nil
|
|
}
|
|
}
|
|
|
|
struct BatchChoiceView_Previews: PreviewProvider {
|
|
static var previews: some View {
|
|
BatchChoiceView()
|
|
}
|
|
}
|