From 55c90a815ccb38dd6b893b712778c566c6cad91c Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Fri, 23 Aug 2024 19:49:06 -0700 Subject: [PATCH 1/5] Add some text for the new admin channel settings, show missing ack text --- Localizable.xcstrings | 6 ++++++ Meshtastic/Views/Messages/ChannelMessageList.swift | 6 +++++- Meshtastic/Views/Settings/AppSettings.swift | 3 +++ Meshtastic/Views/Settings/Channels.swift | 2 +- Meshtastic/Views/Settings/Config/SecurityConfig.swift | 3 ++- 5 files changed, 17 insertions(+), 3 deletions(-) diff --git a/Localizable.xcstrings b/Localizable.xcstrings index c518a26f..debce7c6 100644 --- a/Localizable.xcstrings +++ b/Localizable.xcstrings @@ -16404,6 +16404,9 @@ }, "Pin B" : { + }, + "PKI based node administration, requires firmware version 2.5+" : { + }, "Please connect to a radio to configure settings." : { @@ -18889,6 +18892,9 @@ }, "Security Config" : { + }, + "Security Config Settings require a firmware version 2.5+" : { + }, "Select a channel" : { diff --git a/Meshtastic/Views/Messages/ChannelMessageList.swift b/Meshtastic/Views/Messages/ChannelMessageList.swift index 74a4538a..5e0bcd04 100644 --- a/Meshtastic/Views/Messages/ChannelMessageList.swift +++ b/Meshtastic/Views/Messages/ChannelMessageList.swift @@ -94,7 +94,11 @@ struct ChannelMessageList: View { Text("Waiting to be acknowledged. . .").font( .caption2) .foregroundColor(.orange) - } else if isDetectionSensorMessage { + } else if !isDetectionSensorMessage { + Text("\(ackErrorVal?.display ?? "Empty Ack Error")").fixedSize(horizontal: false, vertical: true) + .foregroundStyle(ackErrorVal?.color ?? Color.red) + .font(.caption2) + } else { let messageDate = message.timestamp Text(" \(messageDate.formattedDate(format: MessageText.dateFormatString))").font(.caption2).foregroundColor(.gray) } diff --git a/Meshtastic/Views/Settings/AppSettings.swift b/Meshtastic/Views/Settings/AppSettings.swift index ef3bc384..02286655 100644 --- a/Meshtastic/Views/Settings/AppSettings.swift +++ b/Meshtastic/Views/Settings/AppSettings.swift @@ -28,6 +28,9 @@ struct AppSettings: View { Label("Administration", systemImage: "gearshape.2") } .toggleStyle(SwitchToggleStyle(tint: .accentColor)) + Text("PKI based node administration, requires firmware version 2.5+") + .foregroundStyle(.secondary) + .font(.caption) } Section(header: Text("environment")) { VStack(alignment: .leading) { diff --git a/Meshtastic/Views/Settings/Channels.swift b/Meshtastic/Views/Settings/Channels.swift index bec86958..ce48b658 100644 --- a/Meshtastic/Views/Settings/Channels.swift +++ b/Meshtastic/Views/Settings/Channels.swift @@ -146,7 +146,7 @@ struct Channels: View { ChannelForm(channelIndex: $channelIndex, channelName: $channelName, channelKeySize: $channelKeySize, channelKey: $channelKey, channelRole: $channelRole, uplink: $uplink, downlink: $downlink, positionPrecision: $positionPrecision, preciseLocation: $preciseLocation, positionsEnabled: $positionsEnabled, hasChanges: $hasChanges, hasValidKey: $hasValidKey, supportedVersion: $supportedVersion) .presentationDetents([.large]) .presentationDragIndicator(.visible) - .onAppear { + .onFirstAppear { supportedVersion = bleManager.connectedVersion == "0.0.0" || self.minimumVersion.compare(bleManager.connectedVersion, options: .numeric) == .orderedAscending || minimumVersion.compare(bleManager.connectedVersion, options: .numeric) == .orderedSame } HStack { diff --git a/Meshtastic/Views/Settings/Config/SecurityConfig.swift b/Meshtastic/Views/Settings/Config/SecurityConfig.swift index 597324e0..e07ed945 100644 --- a/Meshtastic/Views/Settings/Config/SecurityConfig.swift +++ b/Meshtastic/Views/Settings/Config/SecurityConfig.swift @@ -37,7 +37,8 @@ struct SecurityConfig: View { VStack { Form { ConfigHeader(title: "Security", config: \.securityConfig, node: node, onAppear: setSecurityValues) - + Text("Security Config Settings require a firmware version 2.5+") + .font(.title3) Section(header: Text("Admin & Direct Message Keys")) { VStack(alignment: .leading) { Label("Public Key", systemImage: "key") From fa872a9d221b4969827091279e5d22918e9cc1c3 Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Fri, 23 Aug 2024 20:10:57 -0700 Subject: [PATCH 2/5] Assorted cleanup --- Meshtastic/Views/Messages/UserList.swift | 2 +- .../Nodes/Helpers/Map/PositionPopover.swift | 4 +++- .../Views/Nodes/Helpers/NodeListFilter.swift | 20 +++++++++---------- Meshtastic/Views/Nodes/NodeList.swift | 2 +- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/Meshtastic/Views/Messages/UserList.swift b/Meshtastic/Views/Messages/UserList.swift index cb3582ab..bf953d5b 100644 --- a/Meshtastic/Views/Messages/UserList.swift +++ b/Meshtastic/Views/Messages/UserList.swift @@ -227,7 +227,7 @@ struct UserList: View { .onChange(of: maxDistance) { _ in searchUserList() } - .onFirstAppear { + .onAppear { searchUserList() } .safeAreaInset(edge: .bottom, alignment: .leading) { diff --git a/Meshtastic/Views/Nodes/Helpers/Map/PositionPopover.swift b/Meshtastic/Views/Nodes/Helpers/Map/PositionPopover.swift index 6a717629..3f0a528b 100644 --- a/Meshtastic/Views/Nodes/Helpers/Map/PositionPopover.swift +++ b/Meshtastic/Views/Nodes/Helpers/Map/PositionPopover.swift @@ -232,7 +232,9 @@ struct PositionPopover: View { } BatteryGauge(node: position.nodePosition!) } - LoRaSignalStrengthMeter(snr: position.nodePosition?.snr ?? 0.0, rssi: position.nodePosition?.rssi ?? 0, preset: ModemPresets(rawValue: UserDefaults.modemPreset) ?? ModemPresets.longFast, compact: false) + if position.nodePosition?.hopsAway ?? 0 == 0 && !(position.nodePosition?.viaMqtt ?? false) { + LoRaSignalStrengthMeter(snr: position.nodePosition?.snr ?? 0.0, rssi: position.nodePosition?.rssi ?? 0, preset: ModemPresets(rawValue: UserDefaults.modemPreset) ?? ModemPresets.longFast, compact: false) + } Spacer() } } diff --git a/Meshtastic/Views/Nodes/Helpers/NodeListFilter.swift b/Meshtastic/Views/Nodes/Helpers/NodeListFilter.swift index 66d88b28..210e58d1 100644 --- a/Meshtastic/Views/Nodes/Helpers/NodeListFilter.swift +++ b/Meshtastic/Views/Nodes/Helpers/NodeListFilter.swift @@ -91,18 +91,18 @@ struct NodeListFilter: View { .toggleStyle(SwitchToggleStyle(tint: .accentColor)) .listRowSeparator(.visible) - Toggle(isOn: $isEnvironment) { - - Label { - Text("Environment") - } icon: { - Image(systemName: "cloud.sun") - .symbolRenderingMode(.multicolor) + if filterTitle == "Node Filters" { + Toggle(isOn: $isEnvironment) { + Label { + Text("Environment") + } icon: { + Image(systemName: "cloud.sun") + .symbolRenderingMode(.multicolor) + } } + .toggleStyle(SwitchToggleStyle(tint: .accentColor)) + .listRowSeparator(.visible) } - .toggleStyle(SwitchToggleStyle(tint: .accentColor)) - .listRowSeparator(.visible) - Toggle(isOn: $distanceFilter) { Label { diff --git a/Meshtastic/Views/Nodes/NodeList.swift b/Meshtastic/Views/Nodes/NodeList.swift index e252aa95..67636328 100644 --- a/Meshtastic/Views/Nodes/NodeList.swift +++ b/Meshtastic/Views/Nodes/NodeList.swift @@ -344,7 +344,7 @@ struct NodeList: View { self.selectedNode = nil } } - .onFirstAppear { + .onAppear { Task { await searchNodeList() } From 05ea8e658649da190101803db41921efed771bee Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Fri, 23 Aug 2024 20:19:24 -0700 Subject: [PATCH 3/5] Remove saving borked position as a node info --- Meshtastic/Persistence/UpdateCoreData.swift | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/Meshtastic/Persistence/UpdateCoreData.swift b/Meshtastic/Persistence/UpdateCoreData.swift index 6f2520ee..ba96ec9a 100644 --- a/Meshtastic/Persistence/UpdateCoreData.swift +++ b/Meshtastic/Persistence/UpdateCoreData.swift @@ -384,12 +384,7 @@ func upsertPositionPacket (packet: MeshPacket, context: NSManagedObjectContext) } } } else { - - if (try? NodeInfo(serializedData: packet.decoded.payload)) != nil { - upsertNodeInfoPacket(packet: packet, context: context) - } else { - Logger.data.error("💥 Empty POSITION_APP Packet: \((try? packet.jsonString()) ?? "JSON Decode Failure", privacy: .public)") - } + Logger.data.error("💥 Empty POSITION_APP Packet: \((try? packet.jsonString()) ?? "JSON Decode Failure", privacy: .public)") } } } catch { From 53d15a4a33d13126e56ef530c507368d2ffb465f Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Fri, 23 Aug 2024 20:25:58 -0700 Subject: [PATCH 4/5] Dont show acks for received messages --- Meshtastic/Views/Messages/ChannelMessageList.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Meshtastic/Views/Messages/ChannelMessageList.swift b/Meshtastic/Views/Messages/ChannelMessageList.swift index 5e0bcd04..91a922c9 100644 --- a/Meshtastic/Views/Messages/ChannelMessageList.swift +++ b/Meshtastic/Views/Messages/ChannelMessageList.swift @@ -94,7 +94,7 @@ struct ChannelMessageList: View { Text("Waiting to be acknowledged. . .").font( .caption2) .foregroundColor(.orange) - } else if !isDetectionSensorMessage { + } else if currentUser && !isDetectionSensorMessage { Text("\(ackErrorVal?.display ?? "Empty Ack Error")").fixedSize(horizontal: false, vertical: true) .foregroundStyle(ackErrorVal?.color ?? Color.red) .font(.caption2) From 1253f84cf370cf3571cc0da1570b4dc4809b7651 Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Fri, 23 Aug 2024 20:40:35 -0700 Subject: [PATCH 5/5] Bump version --- Meshtastic.xcodeproj/project.pbxproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Meshtastic.xcodeproj/project.pbxproj b/Meshtastic.xcodeproj/project.pbxproj index e267102e..1d2c8a20 100644 --- a/Meshtastic.xcodeproj/project.pbxproj +++ b/Meshtastic.xcodeproj/project.pbxproj @@ -1645,7 +1645,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 2.5.1; + MARKETING_VERSION = 2.5.2; PRODUCT_BUNDLE_IDENTIFIER = gvh.MeshtasticClient; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTS_MACCATALYST = YES; @@ -1680,7 +1680,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 2.5.1; + MARKETING_VERSION = 2.5.2; PRODUCT_BUNDLE_IDENTIFIER = gvh.MeshtasticClient; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTS_MACCATALYST = YES; @@ -1712,7 +1712,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 2.5.1; + MARKETING_VERSION = 2.5.2; PRODUCT_BUNDLE_IDENTIFIER = gvh.MeshtasticClient.Widgets; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1745,7 +1745,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 2.5.1; + MARKETING_VERSION = 2.5.2; PRODUCT_BUNDLE_IDENTIFIER = gvh.MeshtasticClient.Widgets; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = "";