Ferrite-backup/Ferrite/Views/SourceListView.swift
kingbri 9d5a0d0120 Ferrite: Format
Signed-off-by: kingbri <bdashore3@gmail.com>
2022-08-04 21:33:59 -04:00

80 lines
2.7 KiB
Swift

//
// SourceListView.swift
// Ferrite
//
// Created by Brian Dashore on 7/24/22.
//
import SwiftUI
struct SourceListView: View {
@EnvironmentObject var sourceManager: SourceManager
let backgroundContext = PersistenceController.shared.backgroundContext
@FetchRequest(
entity: TorrentSource.entity(),
sortDescriptors: []
) var sources: FetchedResults<TorrentSource>
@State private var availableSourceLength = 0
var body: some View {
NavView {
List {
if !sources.isEmpty {
Section("Installed") {
ForEach(sources, id: \.self) { source in
Toggle(isOn: Binding<Bool>(
get: { source.enabled },
set: {
source.enabled = $0
PersistenceController.shared.save()
}
)) {
Text(source.name ?? "Unknown Source")
}
}
.onDelete { offsets in
for index in offsets {
if let source = sources[safe: index] {
PersistenceController.shared.delete(source, context: backgroundContext)
}
}
}
}
}
if sourceManager.availableSources.contains(where: { avail in
!sources.contains(where: { avail.name == $0.name })
}) {
Section("Catalog") {
ForEach(sourceManager.availableSources, id: \.self) { availableSource in
if !sources.contains(where: { availableSource.name == $0.name }) {
HStack {
Text(availableSource.name ?? "Unnamed source")
Spacer()
Button("Install") {
sourceManager.installSource(sourceJson: availableSource)
}
}
}
}
}
}
}
.task {
await sourceManager.fetchSourcesFromUrl()
}
.navigationTitle("Sources")
}
}
}
struct SourceListView_Previews: PreviewProvider {
static var previews: some View {
SourceListView()
}
}