diff --git a/Ferrite.xcodeproj/project.pbxproj b/Ferrite.xcodeproj/project.pbxproj index 30a9729..b3dd605 100644 --- a/Ferrite.xcodeproj/project.pbxproj +++ b/Ferrite.xcodeproj/project.pbxproj @@ -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 = ""; }; 0C6771F929B3D1AE005D38D2 /* KodiModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KodiModels.swift; sourceTree = ""; }; 0C6771FB29B3E0DB005D38D2 /* HybridSecureField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HybridSecureField.swift; sourceTree = ""; }; + 0C6771FD29B521F1005D38D2 /* SettingsDebridInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsDebridInfoView.swift; sourceTree = ""; }; 0C68134F28BC1A2D00FAD890 /* GithubWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GithubWrapper.swift; sourceTree = ""; }; 0C68135128BC1A7C00FAD890 /* GithubModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GithubModels.swift; sourceTree = ""; }; 0C6C7C9A2931521B002DF910 /* AllDebridWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AllDebridWrapper.swift; sourceTree = ""; }; @@ -447,6 +449,7 @@ 0C95D8D728A55B03005E22B3 /* DefaultActionPickerView.swift */, 0C10848A28BD9A38008F0BA6 /* SettingsAppVersionView.swift */, 0C6771F529B3B602005D38D2 /* SettingsKodiView.swift */, + 0C6771FD29B521F1005D38D2 /* SettingsDebridInfoView.swift */, ); path = Settings; sourceTree = ""; @@ -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 */, diff --git a/Ferrite/Models/DebridManagerModels.swift b/Ferrite/Models/DebridManagerModels.swift index a32f3b5..60975a3 100644 --- a/Ferrite/Models/DebridManagerModels.swift +++ b/Ferrite/Models/DebridManagerModels.swift @@ -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 diff --git a/Ferrite/ViewModels/DebridManager.swift b/Ferrite/ViewModels/DebridManager.swift index b91e4a5..d253d4d 100644 --- a/Ferrite/ViewModels/DebridManager.swift +++ b/Ferrite/ViewModels/DebridManager.swift @@ -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 { diff --git a/Ferrite/Views/ComponentViews/Settings/SettingsDebridInfoView.swift b/Ferrite/Views/ComponentViews/Settings/SettingsDebridInfoView.swift new file mode 100644 index 0000000..dc53506 --- /dev/null +++ b/Ferrite/Views/ComponentViews/Settings/SettingsDebridInfoView.swift @@ -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) + } + } +} diff --git a/Ferrite/Views/SettingsView.swift b/Ferrite/Views/SettingsView.swift index 2c6f6da..7fc0dae 100644 --- a/Ferrite/Views/SettingsView.swift +++ b/Ferrite/Views/SettingsView.swift @@ -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) - } + ) } }