diff --git a/ApplicationLibrary/Views/Dashboard/ActiveDashboardView.swift b/ApplicationLibrary/Views/Dashboard/ActiveDashboardView.swift index 2eade72..daff14d 100644 --- a/ApplicationLibrary/Views/Dashboard/ActiveDashboardView.swift +++ b/ApplicationLibrary/Views/Dashboard/ActiveDashboardView.swift @@ -120,8 +120,10 @@ public struct ActiveDashboardView: View { } catch { alert = Alert(error) + return } } + environments.emptyProfiles = profileList.isEmpty } private nonisolated func doReloadSystemProxy() async { diff --git a/ApplicationLibrary/Views/Dashboard/StartStopButton.swift b/ApplicationLibrary/Views/Dashboard/StartStopButton.swift index c5ffa7f..b42a253 100644 --- a/ApplicationLibrary/Views/Dashboard/StartStopButton.swift +++ b/ApplicationLibrary/Views/Dashboard/StartStopButton.swift @@ -36,6 +36,7 @@ public struct StartStopButton: View { #endif } } + .disabled(environments.emptyProfiles) } private struct Button0: View { diff --git a/ApplicationLibrary/Views/Profile/ProfileView.swift b/ApplicationLibrary/Views/Profile/ProfileView.swift index bc73b3f..824bc1c 100644 --- a/ApplicationLibrary/Views/Profile/ProfileView.swift +++ b/ApplicationLibrary/Views/Profile/ProfileView.swift @@ -207,6 +207,7 @@ public struct ProfileView: View { return } } + environments.emptyProfiles = profileList.isEmpty } private func updateProfile(_ profile: Profile) async { @@ -254,6 +255,7 @@ public struct ProfileView: View { profileList[index].origin } profileList.remove(atOffsets: profileIndex) + environments.emptyProfiles = profileList.isEmpty Task { do { _ = try await ProfileManager.delete(profileToDelete) diff --git a/Library/Network/ExtensionEnvironments.swift b/Library/Network/ExtensionEnvironments.swift index 1076251..60601fc 100644 --- a/Library/Network/ExtensionEnvironments.swift +++ b/Library/Network/ExtensionEnvironments.swift @@ -5,6 +5,7 @@ public class ExtensionEnvironments: ObservableObject { @Published public var logClient = CommandClient(.log) @Published public var extensionProfileLoading = true @Published public var extensionProfile: ExtensionProfile? + @Published public var emptyProfiles = false public let profileUpdate = ObjectWillChangePublisher() public let selectedProfileUpdate = ObjectWillChangePublisher() diff --git a/Library/Network/ExtensionProvider.swift b/Library/Network/ExtensionProvider.swift index 89dbaab..764100b 100644 --- a/Library/Network/ExtensionProvider.swift +++ b/Library/Network/ExtensionProvider.swift @@ -77,11 +77,11 @@ open class ExtensionProvider: NEPacketTunnelProvider { do { profile = try await ProfileManager.get(Int64(SharedPreferences.selectedProfileID.get())) } catch { - writeFatalError("(packet-tunnel) error: missing default profile: \(error.localizedDescription)") + writeFatalError("(packet-tunnel) error: read selected profile: \(error.localizedDescription)") return } guard let profile else { - writeFatalError("(packet-tunnel) error: missing default profile") + writeFatalError("(packet-tunnel) error: missing selected profile") return } let configContent: String