Different services can send different statuses for if a file is cached or not. Therefore, make this scoped to the debrid service rather than expecting everything to state "downloaded". Also it feels pretty blank if the disclosure groups are gone when a cloud array is empty, so remove those checks. Signed-off-by: kingbri <bdashore3@proton.me>
97 lines
4 KiB
Swift
97 lines
4 KiB
Swift
//
|
|
// CloudMagnetView.swift
|
|
// Ferrite
|
|
//
|
|
// Created by Brian Dashore on 6/6/24.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
struct CloudMagnetView: View {
|
|
@EnvironmentObject var navModel: NavigationViewModel
|
|
@EnvironmentObject var debridManager: DebridManager
|
|
@EnvironmentObject var pluginManager: PluginManager
|
|
|
|
@Store var debridSource: DebridSource
|
|
|
|
@Binding var searchText: String
|
|
|
|
var body: some View {
|
|
DisclosureGroup("Magnets") {
|
|
ForEach(debridSource.cloudMagnets.filter {
|
|
searchText.isEmpty ? true : $0.fileName.lowercased().contains(searchText.lowercased())
|
|
}, id: \.self) { cloudMagnet in
|
|
Button {
|
|
if debridSource.cachedStatus.contains(cloudMagnet.status), !cloudMagnet.links.isEmpty {
|
|
navModel.resultFromCloud = true
|
|
navModel.selectedTitle = cloudMagnet.fileName
|
|
|
|
var historyInfo = HistoryEntryJson(
|
|
name: cloudMagnet.fileName,
|
|
source: debridSource.id
|
|
)
|
|
|
|
Task {
|
|
let magnet = Magnet(hash: cloudMagnet.hash, link: nil)
|
|
await debridManager.populateDebridIA([magnet])
|
|
if debridManager.selectDebridResult(magnet: magnet) {
|
|
// Is this a batch?
|
|
|
|
if cloudMagnet.links.count == 1 {
|
|
await debridManager.fetchDebridDownload(magnet: magnet)
|
|
|
|
// Bump to batch
|
|
if debridManager.requiresUnrestrict {
|
|
navModel.selectedHistoryInfo = historyInfo
|
|
navModel.currentChoiceSheet = .batch
|
|
|
|
return
|
|
}
|
|
|
|
if !debridManager.downloadUrl.isEmpty {
|
|
historyInfo.url = debridManager.downloadUrl
|
|
PersistenceController.shared.createHistory(historyInfo, performSave: true)
|
|
|
|
pluginManager.runDefaultAction(
|
|
urlString: debridManager.downloadUrl,
|
|
navModel: navModel
|
|
)
|
|
}
|
|
} else {
|
|
navModel.selectedMagnet = magnet
|
|
navModel.selectedHistoryInfo = historyInfo
|
|
navModel.currentChoiceSheet = .batch
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} label: {
|
|
VStack(alignment: .leading, spacing: 10) {
|
|
Text(cloudMagnet.fileName)
|
|
.font(.callout)
|
|
.fixedSize(horizontal: false, vertical: true)
|
|
.lineLimit(4)
|
|
|
|
HStack {
|
|
Text(cloudMagnet.status.capitalizingFirstLetter())
|
|
Spacer()
|
|
DebridLabelView(debridSource: debridSource, cloudLinks: cloudMagnet.links)
|
|
}
|
|
.font(.caption)
|
|
}
|
|
}
|
|
.disabledAppearance(navModel.currentChoiceSheet != nil, dimmedOpacity: 0.7, animation: .easeOut(duration: 0.2))
|
|
.tint(.primary)
|
|
}
|
|
.onDelete { offsets in
|
|
for index in offsets {
|
|
if let cloudMagnet = debridSource.cloudMagnets[safe: index] {
|
|
Task {
|
|
await debridManager.deleteUserMagnet(cloudMagnet)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|