Replicate Diagnostics in Settings (#342)

As the only link to "Diagnostics" appears in the profile screen, when
there are no profiles the screen is unreachable. Replicate the same
entry in Settings.
This commit is contained in:
Davide De Rosa 2023-08-06 20:27:16 +02:00 committed by GitHub
parent 04e090e26f
commit f159252e24
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 54 additions and 35 deletions

View File

@ -31,7 +31,7 @@
0E0F4C6629C84CF60022E884 /* LogoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E0F4C6529C84CF60022E884 /* LogoView.swift */; }; 0E0F4C6629C84CF60022E884 /* LogoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E0F4C6529C84CF60022E884 /* LogoView.swift */; };
0E1AD5CC2A2682DA002AE6E6 /* AppError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E1AD5CB2A2682DA002AE6E6 /* AppError.swift */; }; 0E1AD5CC2A2682DA002AE6E6 /* AppError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E1AD5CB2A2682DA002AE6E6 /* AppError.swift */; };
0E1AD5CE2A268645002AE6E6 /* Errors+L10n.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E1AD5CD2A268645002AE6E6 /* Errors+L10n.swift */; }; 0E1AD5CE2A268645002AE6E6 /* Errors+L10n.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E1AD5CD2A268645002AE6E6 /* Errors+L10n.swift */; };
0E1B5F5C29C506AD00FE7D18 /* ProfileView+Diagnostics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E1B5F5B29C506AC00FE7D18 /* ProfileView+Diagnostics.swift */; }; 0E1B5F5C29C506AD00FE7D18 /* DiagnosticsSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E1B5F5B29C506AC00FE7D18 /* DiagnosticsSection.swift */; };
0E1F5628287F0ECB00F8ADD7 /* ProviderProfileItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E1F5627287F0ECB00F8ADD7 /* ProviderProfileItem.swift */; }; 0E1F5628287F0ECB00F8ADD7 /* ProviderProfileItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E1F5627287F0ECB00F8ADD7 /* ProviderProfileItem.swift */; };
0E1F562B287F0EF100F8ADD7 /* ProviderProfileItem+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E1F5629287F0EEE00F8ADD7 /* ProviderProfileItem+ViewModel.swift */; }; 0E1F562B287F0EF100F8ADD7 /* ProviderProfileItem+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E1F5629287F0EEE00F8ADD7 /* ProviderProfileItem+ViewModel.swift */; };
0E293851285A70AC002A6E0E /* AppPreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E293850285A70AC002A6E0E /* AppPreference.swift */; }; 0E293851285A70AC002A6E0E /* AppPreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E293850285A70AC002A6E0E /* AppPreference.swift */; };
@ -319,7 +319,7 @@
0E0F4C6529C84CF60022E884 /* LogoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogoView.swift; sourceTree = "<group>"; }; 0E0F4C6529C84CF60022E884 /* LogoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogoView.swift; sourceTree = "<group>"; };
0E1AD5CB2A2682DA002AE6E6 /* AppError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppError.swift; sourceTree = "<group>"; }; 0E1AD5CB2A2682DA002AE6E6 /* AppError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppError.swift; sourceTree = "<group>"; };
0E1AD5CD2A268645002AE6E6 /* Errors+L10n.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Errors+L10n.swift"; sourceTree = "<group>"; }; 0E1AD5CD2A268645002AE6E6 /* Errors+L10n.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Errors+L10n.swift"; sourceTree = "<group>"; };
0E1B5F5B29C506AC00FE7D18 /* ProfileView+Diagnostics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ProfileView+Diagnostics.swift"; sourceTree = "<group>"; }; 0E1B5F5B29C506AC00FE7D18 /* DiagnosticsSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiagnosticsSection.swift; sourceTree = "<group>"; };
0E1C0A52238FFF97009FC087 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = "<group>"; }; 0E1C0A52238FFF97009FC087 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = "<group>"; };
0E1F5627287F0ECB00F8ADD7 /* ProviderProfileItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProviderProfileItem.swift; sourceTree = "<group>"; }; 0E1F5627287F0ECB00F8ADD7 /* ProviderProfileItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProviderProfileItem.swift; sourceTree = "<group>"; };
0E1F5629287F0EEE00F8ADD7 /* ProviderProfileItem+ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ProviderProfileItem+ViewModel.swift"; sourceTree = "<group>"; }; 0E1F5629287F0EEE00F8ADD7 /* ProviderProfileItem+ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ProviderProfileItem+ViewModel.swift"; sourceTree = "<group>"; };
@ -645,6 +645,7 @@
0EF2213027E674BD001D0BD7 /* AddProviderViewModel.swift */, 0EF2213027E674BD001D0BD7 /* AddProviderViewModel.swift */,
0E71ACF827C12E4800F85C4B /* CreditsView.swift */, 0E71ACF827C12E4800F85C4B /* CreditsView.swift */,
0E71ACF627C107C900F85C4B /* DebugLogView.swift */, 0E71ACF627C107C900F85C4B /* DebugLogView.swift */,
0E1B5F5B29C506AC00FE7D18 /* DiagnosticsSection.swift */,
0E5683B827C2825D00EAF1CD /* DiagnosticsView.swift */, 0E5683B827C2825D00EAF1CD /* DiagnosticsView.swift */,
0ED1D6DB27DBA41700983466 /* DiagnosticsView+OpenVPN.swift */, 0ED1D6DB27DBA41700983466 /* DiagnosticsView+OpenVPN.swift */,
0ED1D6DD27DBA42100983466 /* DiagnosticsView+WireGuard.swift */, 0ED1D6DD27DBA42100983466 /* DiagnosticsView+WireGuard.swift */,
@ -671,7 +672,6 @@
0ED30DD127EA1F650057D8A3 /* PaywallView+Purchase.swift */, 0ED30DD127EA1F650057D8A3 /* PaywallView+Purchase.swift */,
0E44689527B051C300A14CE4 /* ProfileView.swift */, 0E44689527B051C300A14CE4 /* ProfileView.swift */,
0E92D7C527F103300033CB7B /* ProfileView+Configuration.swift */, 0E92D7C527F103300033CB7B /* ProfileView+Configuration.swift */,
0E1B5F5B29C506AC00FE7D18 /* ProfileView+Diagnostics.swift */,
0E92D7C827F1042A0033CB7B /* ProfileView+Extra.swift */, 0E92D7C827F1042A0033CB7B /* ProfileView+Extra.swift */,
0E3CD482280DAE92007075C0 /* ProfileView+MainMenu.swift */, 0E3CD482280DAE92007075C0 /* ProfileView+MainMenu.swift */,
0E3B7FD927E51A0200C66F13 /* ProfileView+Provider.swift */, 0E3B7FD927E51A0200C66F13 /* ProfileView+Provider.swift */,
@ -1491,7 +1491,7 @@
0E2A8D4F27B04BBA00207D04 /* OrganizerView.swift in Sources */, 0E2A8D4F27B04BBA00207D04 /* OrganizerView.swift in Sources */,
0E49F6BB27D7638300385834 /* EndpointAdvancedView+OpenVPN.swift in Sources */, 0E49F6BB27D7638300385834 /* EndpointAdvancedView+OpenVPN.swift in Sources */,
0E71ACEF27C106B500F85C4B /* ProviderPresetView.swift in Sources */, 0E71ACEF27C106B500F85C4B /* ProviderPresetView.swift in Sources */,
0E1B5F5C29C506AD00FE7D18 /* ProfileView+Diagnostics.swift in Sources */, 0E1B5F5C29C506AD00FE7D18 /* DiagnosticsSection.swift in Sources */,
0EF2212F27E66F60001D0BD7 /* AddProfileView.swift in Sources */, 0EF2212F27E66F60001D0BD7 /* AddProfileView.swift in Sources */,
0E96D2FC2871D94E005EFBCF /* DefaultLightProfileManager.swift in Sources */, 0E96D2FC2871D94E005EFBCF /* DefaultLightProfileManager.swift in Sources */,
0EF0FAF627DD0211007EB181 /* PaywallView.swift in Sources */, 0EF0FAF627DD0211007EB181 /* PaywallView.swift in Sources */,

View File

@ -1,5 +1,5 @@
// //
// ProfileView+Diagnostics.swift // DiagnosticsSection.swift
// Passepartout // Passepartout
// //
// Created by Davide De Rosa on 3/17/23. // Created by Davide De Rosa on 3/17/23.
@ -26,20 +26,15 @@
import PassepartoutLibrary import PassepartoutLibrary
import SwiftUI import SwiftUI
extension ProfileView { struct DiagnosticsSection: View {
struct DiagnosticsSection: View { @ObservedObject var currentProfile: ObservableProfile
@ObservedObject var currentProfile: ObservableProfile
var body: some View { var body: some View {
Section { Section {
NavigationLink { NavigationLink {
DiagnosticsView( DiagnosticsView(profile: currentProfile.value)
vpnProtocol: currentProfile.value.currentVPNProtocol, } label: {
providerName: currentProfile.value.header.providerName Text(L10n.Diagnostics.title)
)
} label: {
Text(L10n.Diagnostics.title)
}
} }
} }
} }

View File

@ -118,7 +118,7 @@ private extension DiagnosticsView.OpenVPNView {
var debugLogSection: some View { var debugLogSection: some View {
Section { Section {
DiagnosticsView.DebugLogSection(appLogURL: appLogURL, tunnelLogURL: tunnelLogURL) DiagnosticsView.DebugLogGroup(appLogURL: appLogURL, tunnelLogURL: tunnelLogURL)
Toggle(L10n.Diagnostics.Items.MasksPrivateData.caption, isOn: $vpnManager.masksPrivateData) Toggle(L10n.Diagnostics.Items.MasksPrivateData.caption, isOn: $vpnManager.masksPrivateData)
} header: { } header: {
Text(L10n.DebugLog.title) Text(L10n.DebugLog.title)

View File

@ -41,7 +41,7 @@ extension DiagnosticsView {
var body: some View { var body: some View {
List { List {
Section { Section {
DebugLogSection(appLogURL: appLogURL, tunnelLogURL: tunnelLogURL) DebugLogGroup(appLogURL: appLogURL, tunnelLogURL: tunnelLogURL)
} header: { } header: {
Text(L10n.DebugLog.title) Text(L10n.DebugLog.title)
} }

View File

@ -27,29 +27,52 @@ import PassepartoutLibrary
import SwiftUI import SwiftUI
struct DiagnosticsView: View { struct DiagnosticsView: View {
let vpnProtocol: VPNProtocolType let profile: Profile
let providerName: ProviderName?
var body: some View { var body: some View {
Group { Group {
switch vpnProtocol { if !profile.isPlaceholder {
case .openVPN: vpnView
DiagnosticsView.OpenVPNView( } else {
providerName: providerName genericView
)
case .wireGuard:
DiagnosticsView.WireGuardView(
providerName: providerName
)
} }
}.navigationTitle(L10n.Diagnostics.title) }.navigationTitle(L10n.Diagnostics.title)
} }
} }
private extension DiagnosticsView {
var vpnView: some View {
Group {
switch profile.currentVPNProtocol {
case .openVPN:
DiagnosticsView.OpenVPNView(
providerName: profile.header.providerName
)
case .wireGuard:
DiagnosticsView.WireGuardView(
providerName: profile.header.providerName
)
}
}
}
var genericView: some View {
List {
Section {
DebugLogGroup(
appLogURL: Passepartout.shared.logger.logFile,
tunnelLogURL: nil
)
} header: {
Text(L10n.DebugLog.title)
}
}
}
}
extension DiagnosticsView { extension DiagnosticsView {
struct DebugLogSection: View { struct DebugLogGroup: View {
let appLogURL: URL? let appLogURL: URL?
let tunnelLogURL: URL? let tunnelLogURL: URL?
@ -65,7 +88,7 @@ extension DiagnosticsView {
// MARK: - // MARK: -
private extension DiagnosticsView.DebugLogSection { private extension DiagnosticsView.DebugLogGroup {
var appLink: some View { var appLink: some View {
navigationLink( navigationLink(
withTitle: L10n.Diagnostics.Items.AppLog.title, withTitle: L10n.Diagnostics.Items.AppLog.title,

View File

@ -47,6 +47,7 @@ struct SettingsView: View {
#if !targetEnvironment(macCatalyst) #if !targetEnvironment(macCatalyst)
preferencesSection preferencesSection
#endif #endif
DiagnosticsSection(currentProfile: profileManager.currentProfile)
aboutSection aboutSection
}.toolbar { }.toolbar {
themeCloseItem(presentationMode: presentationMode) themeCloseItem(presentationMode: presentationMode)