From 0553f929f614886a324ed9339b14b593ec806e27 Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Tue, 27 Jun 2023 00:02:17 +0100 Subject: [PATCH] Tweaks --- .../ConfigurationProxy.swift | 2 +- .../CrossPlatformAppDelegate.swift | 3 ++ Yggdrasil Network.xcodeproj/project.pbxproj | 4 +-- YggdrasilSwiftUI/PeersView.swift | 35 ++++++++++--------- YggdrasilSwiftUI/StatusView.swift | 15 ++++++-- 5 files changed, 38 insertions(+), 21 deletions(-) diff --git a/Yggdrasil Network Cross-Platform/ConfigurationProxy.swift b/Yggdrasil Network Cross-Platform/ConfigurationProxy.swift index 0180afc..2216490 100644 --- a/Yggdrasil Network Cross-Platform/ConfigurationProxy.swift +++ b/Yggdrasil Network Cross-Platform/ConfigurationProxy.swift @@ -64,7 +64,7 @@ class ConfigurationProxy: PlatformItemSource { self.set("Listen", to: [] as [String]) self.set("AdminListen", to: "none") self.set("IfName", to: "dummy") - // self.set("Peers", to: ["tcp://172.22.97.1.5190", "tls://172.22.97.1:5191"]) + self.set("Peers", to: ["tcp://172.22.97.1.5190", "tls://172.22.97.1:5191"]) if self.get("AutoStart") == nil { self.set("AutoStart", to: ["Any": false, "WiFi": false, "Mobile": false, "Ethernet": false] as [String: Bool]) diff --git a/Yggdrasil Network Cross-Platform/CrossPlatformAppDelegate.swift b/Yggdrasil Network Cross-Platform/CrossPlatformAppDelegate.swift index 03cf897..013dd0d 100644 --- a/Yggdrasil Network Cross-Platform/CrossPlatformAppDelegate.swift +++ b/Yggdrasil Network Cross-Platform/CrossPlatformAppDelegate.swift @@ -65,6 +65,7 @@ class CrossPlatformAppDelegate: PlatformAppDelegate, ObservableObject { } } + @Published var yggdrasilSupported: Bool = true @Published var yggdrasilConnected: Bool = false @Published var yggdrasilPublicKey: String = "N/A" @@ -122,11 +123,13 @@ class CrossPlatformAppDelegate: PlatformAppDelegate, ObservableObject { NETunnelProviderManager.loadAllFromPreferences { (savedManagers: [NETunnelProviderManager]?, error: Error?) in guard error == nil else { print("Failed to load VPN managers: \(error?.localizedDescription ?? "(no error)")") + self.yggdrasilSupported = false return } guard let savedManagers else { print("Expected to find saved managers but didn't") + self.yggdrasilSupported = false return } diff --git a/Yggdrasil Network.xcodeproj/project.pbxproj b/Yggdrasil Network.xcodeproj/project.pbxproj index 51d8b71..08ff9a1 100644 --- a/Yggdrasil Network.xcodeproj/project.pbxproj +++ b/Yggdrasil Network.xcodeproj/project.pbxproj @@ -546,7 +546,7 @@ isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; - CODE_SIGN_ENTITLEMENTS = YggdrasilNetworkExtension.entitlements; + CODE_SIGN_ENTITLEMENTS = "Yggdrasil Network Extension/YggdrasilNetworkExtension.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 32; @@ -578,7 +578,7 @@ isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; - CODE_SIGN_ENTITLEMENTS = YggdrasilNetworkExtension.entitlements; + CODE_SIGN_ENTITLEMENTS = "Yggdrasil Network Extension/YggdrasilNetworkExtension.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 32; diff --git a/YggdrasilSwiftUI/PeersView.swift b/YggdrasilSwiftUI/PeersView.swift index 2a00a49..546a896 100644 --- a/YggdrasilSwiftUI/PeersView.swift +++ b/YggdrasilSwiftUI/PeersView.swift @@ -11,8 +11,6 @@ struct PeersView: View { // @Binding public var yggdrasilConfiguration: ConfigurationProxy @ObservedObject private var appDelegate = Application.appDelegate - @State private var peers = ["Paul", "Taylor", "Adele"] - var body: some View { Form { Section(content: { @@ -24,7 +22,8 @@ struct PeersView: View { #if os(macOS) Spacer() Button(role: .destructive) { - print("Deleting") + // appDelegate.yggdrasilConfig.peers.remove { $0 == peerURI } + // self.delete(at: appDelegate.yggdrasilConfig.peers.firstIndex { $0 == peerURI }) } label: { Image(systemName: "xmark.circle.fill") } @@ -32,7 +31,20 @@ struct PeersView: View { #endif } } - .onDelete(perform: delete) + .onMove { indexSet, offset in + appDelegate.yggdrasilConfig.peers.move(fromOffsets: indexSet, toOffset: offset) + } + .onDelete { indexSet in + appDelegate.yggdrasilConfig.peers.remove(atOffsets: indexSet) + } + + Button { + appDelegate.yggdrasilConfig.peers.append("foo") + } label: { + Label("Add peer", systemImage: "plus") + } + .buttonStyle(.plain) + .foregroundColor(.accentColor) Text("Yggdrasil will automatically attempt to connect to configured peers when started. If you configure more than one peer, your device may carry traffic on behalf of other network nodes. Avoid this by configuring only a single peer. Data charges may apply when using mobile data.") .font(.system(size: 11)) @@ -62,26 +74,17 @@ struct PeersView: View { Text("Local connectivity") }) } - #if os(iOS) +#if os(iOS) .toolbar { - Button(role: nil, action: { - - }, label: { - Image(systemName: "plus") - }) - EditButton() + // EditButton() } - #endif +#endif .formStyle(.grouped) .navigationTitle("Peers") #if os(iOS) .navigationBarTitleDisplayMode(.large) #endif } - - func delete(at offsets: IndexSet) { - peers.remove(atOffsets: offsets) - } } struct PeersView_Previews: PreviewProvider { diff --git a/YggdrasilSwiftUI/StatusView.swift b/YggdrasilSwiftUI/StatusView.swift index ecacce3..0ef2ecd 100644 --- a/YggdrasilSwiftUI/StatusView.swift +++ b/YggdrasilSwiftUI/StatusView.swift @@ -20,7 +20,9 @@ struct StatusView: View { @State private var statusBadgeText: String = "Not enabled" private func getStatusBadgeColor() -> SwiftUI.Color { - if !appDelegate.yggdrasilEnabled { + if !appDelegate.yggdrasilSupported { + return .gray + } else if !appDelegate.yggdrasilEnabled { return .gray } else if !appDelegate.yggdrasilConnected { return .yellow @@ -30,7 +32,9 @@ struct StatusView: View { } private func getStatusBadgeText() -> String { - if !appDelegate.yggdrasilEnabled { + if !appDelegate.yggdrasilSupported { + return "Not supported on this device" + } else if !appDelegate.yggdrasilEnabled { return "Not enabled" } else if !appDelegate.yggdrasilConnected { return "No peers connected" @@ -44,12 +48,16 @@ struct StatusView: View { Section(content: { VStack(alignment: .leading) { Toggle("Enable Yggdrasil", isOn: $appDelegate.yggdrasilEnabled) + .disabled(!appDelegate.yggdrasilSupported) HStack { Image(systemName: "circlebadge.fill") .foregroundColor(statusBadgeColor) .onAppear(perform: { statusBadgeColor = getStatusBadgeColor() }) + .onChange(of: appDelegate.yggdrasilSupported) { newValue in + statusBadgeColor = getStatusBadgeColor() + } .onChange(of: appDelegate.yggdrasilEnabled) { newValue in statusBadgeColor = getStatusBadgeColor() } @@ -65,6 +73,9 @@ struct StatusView: View { .onAppear(perform: { statusBadgeText = getStatusBadgeText() }) + .onChange(of: appDelegate.yggdrasilSupported) { newValue in + statusBadgeText = getStatusBadgeText() + } .onChange(of: appDelegate.yggdrasilEnabled) { newValue in statusBadgeText = getStatusBadgeText() }