Ferrite-backup/Ferrite/Views/SettingsView.swift
kingbri 2322d3af67 Debrid: Decentralize and add AllDebrid support
AllDebrid is another debrid provider. Add support to Ferrite in
addition to RealDebrid.

The overall debrid login backend has changed to accomodate for a more
agnostic app structure where more services can be added as needed.

Also add some cosmetic changes to search so filters can be added while
searching for a phrase.

Signed-off-by: kingbri <bdashore3@proton.me>
2022-11-27 18:18:09 -05:00

146 lines
6.2 KiB
Swift

//
// SettingsView.swift
// Ferrite
//
// Created by Brian Dashore on 7/11/22.
//
import Introspect
import SwiftUI
struct SettingsView: View {
@EnvironmentObject var debridManager: DebridManager
@EnvironmentObject var sourceManager: SourceManager
let backgroundContext = PersistenceController.shared.backgroundContext
@AppStorage("Updates.AutomaticNotifs") var autoUpdateNotifs = true
@AppStorage("Actions.DefaultDebrid") var defaultDebridAction: DefaultDebridActionType = .none
@AppStorage("Actions.DefaultMagnet") var defaultMagnetAction: DefaultMagnetActionType = .none
var body: some View {
NavView {
Form {
Section(header: InlineHeader("Debrid Services")) {
HStack {
Text("RealDebrid")
Spacer()
Button {
Task {
if debridManager.enabledDebrids.contains(.realDebrid) {
await debridManager.logoutDebrid(debridType: .realDebrid)
} else if !debridManager.realDebridAuthProcessing {
await debridManager.authenticateDebrid(debridType: .realDebrid)
}
}
} label: {
Text(debridManager.enabledDebrids.contains(.realDebrid) ? "Logout" : (debridManager.realDebridAuthProcessing ? "Processing" : "Login"))
.foregroundColor(debridManager.enabledDebrids.contains(.realDebrid) ? .red : .blue)
}
}
HStack {
Text("AllDebrid")
Spacer()
Button {
Task {
if debridManager.enabledDebrids.contains(.allDebrid) {
await debridManager.logoutDebrid(debridType: .allDebrid)
} else if !debridManager.realDebridAuthProcessing {
await debridManager.authenticateDebrid(debridType: .allDebrid)
}
}
} label: {
Text(debridManager.enabledDebrids.contains(.allDebrid) ? "Logout" : (debridManager.allDebridAuthProcessing ? "Processing" : "Login"))
.foregroundColor(debridManager.enabledDebrids.contains(.allDebrid) ? .red : .blue)
}
}
}
Section(header: Text("Source management")) {
NavigationLink("Source lists", destination: SettingsSourceListView())
}
Section(header: Text("Default actions")) {
if debridManager.enabledDebrids.count > 0 {
NavigationLink(
destination: DebridActionPickerView(),
label: {
HStack {
Text("Default debrid action")
Spacer()
Group {
switch defaultDebridAction {
case .none:
Text("User choice")
case .outplayer:
Text("Outplayer")
case .vlc:
Text("VLC")
case .infuse:
Text("Infuse")
case .shareDownload:
Text("Share")
}
}
.foregroundColor(.gray)
}
}
)
}
NavigationLink(
destination: MagnetActionPickerView(),
label: {
HStack {
Text("Default magnet action")
Spacer()
Group {
switch defaultMagnetAction {
case .none:
Text("User choice")
case .webtor:
Text("Webtor")
case .shareMagnet:
Text("Share")
}
}
.foregroundColor(.gray)
}
}
)
}
Section(header: Text("Backups")) {
NavigationLink(destination: BackupsView()) {
Text("Backups")
}
}
Section(header: Text("Updates")) {
Toggle(isOn: $autoUpdateNotifs) {
Text("Show update alerts")
}
NavigationLink("Version history", destination: SettingsAppVersionView())
}
Section(header: Text("Information")) {
ListRowLinkView(text: "Donate", link: "https://ko-fi.com/kingbri")
ListRowLinkView(text: "Report issues", link: "https://github.com/bdashore3/Ferrite/issues")
NavigationLink("About", destination: AboutView())
}
}
.sheet(isPresented: $debridManager.showWebView) {
LoginWebView(url: URL(string: debridManager.authUrl)!)
}
.navigationTitle("Settings")
}
}
}
struct SettingsView_Previews: PreviewProvider {
static var previews: some View {
SettingsView()
}
}