From be1bc2055aaa237cfef46540c08f0eaf96269e6f Mon Sep 17 00:00:00 2001 From: Ethan Dickson Date: Tue, 11 Mar 2025 18:06:56 +1100 Subject: [PATCH] feat: add start vpn on launch setting --- Coder-Desktop/Coder-Desktop/Coder_DesktopApp.swift | 3 +++ Coder-Desktop/Coder-Desktop/State.swift | 8 ++++++++ .../Coder-Desktop/Views/Settings/GeneralTab.swift | 9 +++++++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/Coder-Desktop/Coder-Desktop/Coder_DesktopApp.swift b/Coder-Desktop/Coder-Desktop/Coder_DesktopApp.swift index 1d379e9..23b31a2 100644 --- a/Coder-Desktop/Coder-Desktop/Coder_DesktopApp.swift +++ b/Coder-Desktop/Coder-Desktop/Coder_DesktopApp.swift @@ -58,6 +58,9 @@ class AppDelegate: NSObject, NSApplicationDelegate { if await !vpn.loadNetworkExtensionConfig() { state.reconfigure() } + if state.startVPNOnLaunch { + await vpn.start() + } } // TODO: Start the daemon only once a file sync is configured Task { diff --git a/Coder-Desktop/Coder-Desktop/State.swift b/Coder-Desktop/Coder-Desktop/State.swift index 3e723c9..fd6182e 100644 --- a/Coder-Desktop/Coder-Desktop/State.swift +++ b/Coder-Desktop/Coder-Desktop/State.swift @@ -54,6 +54,13 @@ class AppState: ObservableObject { } } + @Published var startVPNOnLaunch: Bool = UserDefaults.standard.bool(forKey: Keys.startVPNOnLaunch) { + didSet { + guard persistent else { return } + UserDefaults.standard.set(startVPNOnLaunch, forKey: Keys.startVPNOnLaunch) + } + } + func tunnelProviderProtocol() -> NETunnelProviderProtocol? { if !hasSession { return nil } let proto = NETunnelProviderProtocol() @@ -133,6 +140,7 @@ class AppState: ObservableObject { static let useLiteralHeaders = "UseLiteralHeaders" static let literalHeaders = "LiteralHeaders" static let stopVPNOnQuit = "StopVPNOnQuit" + static let startVPNOnLaunch = "StartVPNOnLaunch" } } diff --git a/Coder-Desktop/Coder-Desktop/Views/Settings/GeneralTab.swift b/Coder-Desktop/Coder-Desktop/Views/Settings/GeneralTab.swift index 27aecab..532d0f0 100644 --- a/Coder-Desktop/Coder-Desktop/Views/Settings/GeneralTab.swift +++ b/Coder-Desktop/Coder-Desktop/Views/Settings/GeneralTab.swift @@ -6,11 +6,16 @@ struct GeneralTab: View { var body: some View { Form { Section { - LaunchAtLogin.Toggle("Launch at Login") + LaunchAtLogin.Toggle("Launch at login") } Section { Toggle(isOn: $state.stopVPNOnQuit) { - Text("Stop Coder Connect on Quit") + Text("Stop Coder Connect on quit") + } + } + Section { + Toggle(isOn: $state.startVPNOnLaunch) { + Text("Start Coder Connect on launch") } } }.formStyle(.grouped)