Settings: Add debrid info views

Add some extra info for debrid services so they look similar to the
Kodi view.

Signed-off-by: kingbri <bdashore3@proton.me>
This commit is contained in:
kingbri 2023-03-05 15:21:58 -05:00
parent b8799be896
commit d504369e98
5 changed files with 89 additions and 47 deletions

View file

@ -59,6 +59,7 @@
0C6771F629B3B602005D38D2 /* SettingsKodiView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C6771F529B3B602005D38D2 /* SettingsKodiView.swift */; };
0C6771FA29B3D1AE005D38D2 /* KodiModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C6771F929B3D1AE005D38D2 /* KodiModels.swift */; };
0C6771FC29B3E0DB005D38D2 /* HybridSecureField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C6771FB29B3E0DB005D38D2 /* HybridSecureField.swift */; };
0C6771FE29B521F1005D38D2 /* SettingsDebridInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C6771FD29B521F1005D38D2 /* SettingsDebridInfoView.swift */; };
0C68135028BC1A2D00FAD890 /* GithubWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C68134F28BC1A2D00FAD890 /* GithubWrapper.swift */; };
0C68135228BC1A7C00FAD890 /* GithubModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C68135128BC1A7C00FAD890 /* GithubModels.swift */; };
0C6C7C9B2931521B002DF910 /* AllDebridWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C6C7C9A2931521B002DF910 /* AllDebridWrapper.swift */; };
@ -186,6 +187,7 @@
0C6771F529B3B602005D38D2 /* SettingsKodiView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsKodiView.swift; sourceTree = "<group>"; };
0C6771F929B3D1AE005D38D2 /* KodiModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KodiModels.swift; sourceTree = "<group>"; };
0C6771FB29B3E0DB005D38D2 /* HybridSecureField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HybridSecureField.swift; sourceTree = "<group>"; };
0C6771FD29B521F1005D38D2 /* SettingsDebridInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsDebridInfoView.swift; sourceTree = "<group>"; };
0C68134F28BC1A2D00FAD890 /* GithubWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GithubWrapper.swift; sourceTree = "<group>"; };
0C68135128BC1A7C00FAD890 /* GithubModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GithubModels.swift; sourceTree = "<group>"; };
0C6C7C9A2931521B002DF910 /* AllDebridWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AllDebridWrapper.swift; sourceTree = "<group>"; };
@ -447,6 +449,7 @@
0C95D8D728A55B03005E22B3 /* DefaultActionPickerView.swift */,
0C10848A28BD9A38008F0BA6 /* SettingsAppVersionView.swift */,
0C6771F529B3B602005D38D2 /* SettingsKodiView.swift */,
0C6771FD29B521F1005D38D2 /* SettingsDebridInfoView.swift */,
);
path = Settings;
sourceTree = "<group>";
@ -779,6 +782,7 @@
0C750744289B003E004B3906 /* SourceRssParser+CoreDataClass.swift in Sources */,
0C794B69289DACC800DD1CC8 /* InstalledPluginButtonView.swift in Sources */,
0C79DC082899AF3C003F1C5A /* SourceSeedLeech+CoreDataProperties.swift in Sources */,
0C6771FE29B521F1005D38D2 /* SettingsDebridInfoView.swift in Sources */,
0CD4CAC628C980EB0046E1DC /* HistoryActionsView.swift in Sources */,
0C422E7E293542EA00486D65 /* PremiumizeWrapper.swift in Sources */,
0CA148DD288903F000DE2211 /* ScrapingViewModel.swift in Sources */,

View file

@ -33,6 +33,17 @@ public enum DebridType: Int, Codable, Hashable, CaseIterable {
return abbreviated ? "PM" : "Premiumize"
}
}
func website() -> String {
switch self {
case .realDebrid:
return "https://real-debrid.com"
case .allDebrid:
return "https://alldebrid.com"
case .premiumize:
return "https://premiumize.me"
}
}
}
// Wrapper struct for magnet links to contain both the link and hash for easy access

View file

@ -323,6 +323,17 @@ public class DebridManager: ObservableObject {
}
}
public func getAuthProcessingBool(debridType: DebridType) -> Bool {
switch debridType {
case .realDebrid:
return realDebridAuthProcessing
case .allDebrid:
return allDebridAuthProcessing
case .premiumize:
return premiumizeAuthProcessing
}
}
// Callback to finish debrid auth since functions can be split
func completeDebridAuth(_ debridType: DebridType, success: Bool = true) {
if enabledDebrids.count == 1, success {

View file

@ -0,0 +1,52 @@
//
// DebridInfoView.swift
// Ferrite
//
// Created by Brian Dashore on 3/5/23.
//
import SwiftUI
struct SettingsDebridInfoView: View {
@EnvironmentObject var debridManager: DebridManager
let debridType: DebridType
var body: some View {
NavView {
List {
Section(header: InlineHeader("Description")) {
VStack(alignment: .leading, spacing: 10) {
Text("\(debridType.toString()) is a debrid service that is used for unrestricting downloads and media playback. You must pay to access the service.")
Link("Website", destination: URL(string: debridType.website()) ?? URL(string: "https://kingbri.dev/ferrite")!)
}
}
Section(
header: InlineHeader("Login status"),
footer: Text("A WebView will show up to prompt you for credentials")
) {
Button {
Task {
if debridManager.enabledDebrids.contains(debridType) {
await debridManager.logoutDebrid(debridType: debridType)
} else if !debridManager.getAuthProcessingBool(debridType: debridType) {
await debridManager.authenticateDebrid(debridType: debridType)
}
}
} label: {
Text(
debridManager.enabledDebrids.contains(debridType)
? "Logout"
: (debridManager.getAuthProcessingBool(debridType: debridType) ? "Processing" : "Login")
)
.foregroundColor(debridManager.enabledDebrids.contains(debridType) ? .red : .blue)
}
}
}
.navigationTitle(debridType.toString())
.navigationBarTitleDisplayMode(.inline)
}
}
}

View file

@ -32,55 +32,19 @@ struct SettingsView: 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)
ForEach(DebridType.allCases, id: \.self) { debridType in
NavigationLink(
destination: SettingsDebridInfoView(
debridType: debridType
), label: {
HStack {
Text(debridType.toString())
Spacer()
Text(debridManager.enabledDebrids.contains(debridType) ? "Enabled" : "Disabled")
.foregroundColor(.secondary)
}
}
} 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.allDebridAuthProcessing {
await debridManager.authenticateDebrid(debridType: .allDebrid)
}
}
} label: {
Text(debridManager.enabledDebrids.contains(.allDebrid) ? "Logout" : (debridManager.allDebridAuthProcessing ? "Processing" : "Login"))
.foregroundColor(debridManager.enabledDebrids.contains(.allDebrid) ? .red : .blue)
}
}
HStack {
Text("Premiumize")
Spacer()
Button {
Task {
if debridManager.enabledDebrids.contains(.premiumize) {
await debridManager.logoutDebrid(debridType: .premiumize)
} else if !debridManager.premiumizeAuthProcessing {
await debridManager.authenticateDebrid(debridType: .premiumize)
}
}
} label: {
Text(debridManager.enabledDebrids.contains(.premiumize) ? "Logout" : (debridManager.premiumizeAuthProcessing ? "Processing" : "Login"))
.foregroundColor(debridManager.enabledDebrids.contains(.premiumize) ? .red : .blue)
}
)
}
}