This commit is contained in:
Neil Alexander 2023-06-27 00:02:17 +01:00
parent c70dd740f9
commit 0553f929f6
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944
5 changed files with 38 additions and 21 deletions

View file

@ -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])

View file

@ -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
}

View file

@ -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;

View file

@ -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 {

View file

@ -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()
}