diff --git a/Meshtastic/Extensions/UserDefaults.swift b/Meshtastic/Extensions/UserDefaults.swift index fb73d0cd..16ce02b8 100644 --- a/Meshtastic/Extensions/UserDefaults.swift +++ b/Meshtastic/Extensions/UserDefaults.swift @@ -9,6 +9,7 @@ import Foundation extension UserDefaults { enum Keys: String, CaseIterable { + case enableRangeTest case meshtasticUsername case preferredPeripheralId case provideLocation @@ -25,6 +26,13 @@ extension UserDefaults { func reset() { Keys.allCases.forEach { removeObject(forKey: $0.rawValue) } } + static var blockRangeTest: Bool { + get { + UserDefaults.standard.bool(forKey: "blockRangeTest") + } set { + UserDefaults.standard.set(newValue, forKey: "blockRangeTest") + } + } static var meshtasticUsername: String { get { UserDefaults.standard.string(forKey: "meshtasticUsername") ?? "" diff --git a/Meshtastic/Helpers/BLEManager.swift b/Meshtastic/Helpers/BLEManager.swift index ec12488a..efc6eb51 100644 --- a/Meshtastic/Helpers/BLEManager.swift +++ b/Meshtastic/Helpers/BLEManager.swift @@ -531,7 +531,7 @@ class BLEManager: NSObject, CBPeripheralDelegate, MqttClientProxyManagerDelegate if !nowKnown { MeshLogger.log("🕸️ MESH PACKET received for Unknown App UNHANDLED \((try? decodedInfo.packet.jsonString()) ?? "JSON Decode Failure")") } case .textMessageApp, .detectionSensorApp: - textMessageAppPacket(packet: decodedInfo.packet, connectedNode: (self.connectedPeripheral != nil ? connectedPeripheral.num : 0), context: context!) + textMessageAppPacket(packet: decodedInfo.packet, blockRangeTest: UserDefaults.blockRangeTest, connectedNode: (self.connectedPeripheral != nil ? connectedPeripheral.num : 0), context: context!) case .remoteHardwareApp: MeshLogger.log("🕸️ MESH PACKET received for Remote Hardware App UNHANDLED \((try? decodedInfo.packet.jsonString()) ?? "JSON Decode Failure")") case .positionApp: @@ -553,8 +553,8 @@ class BLEManager: NSObject, CBPeripheralDelegate, MqttClientProxyManagerDelegate case .storeForwardApp: storeAndForwardPacket(packet: decodedInfo.packet, connectedNodeNum: (self.connectedPeripheral != nil ? connectedPeripheral.num : 0), context: context!) case .rangeTestApp: - if wantRangeTestPackets { - textMessageAppPacket(packet: decodedInfo.packet, connectedNode: (self.connectedPeripheral != nil ? connectedPeripheral.num : 0), context: context!) + if wantRangeTestPackets && !UserDefaults.blockRangeTest { + textMessageAppPacket(packet: decodedInfo.packet, blockRangeTest: false, connectedNode: (self.connectedPeripheral != nil ? connectedPeripheral.num : 0), context: context!) } else { MeshLogger.log("🕸️ MESH PACKET received for Range Test App UNHANDLED \((try? decodedInfo.packet.jsonString()) ?? "JSON Decode Failure")") diff --git a/Meshtastic/Helpers/MeshPackets.swift b/Meshtastic/Helpers/MeshPackets.swift index 15c011f1..0abe318a 100644 --- a/Meshtastic/Helpers/MeshPackets.swift +++ b/Meshtastic/Helpers/MeshPackets.swift @@ -711,9 +711,13 @@ func telemetryPacket(packet: MeshPacket, connectedNode: Int64, context: NSManage } } -func textMessageAppPacket(packet: MeshPacket, connectedNode: Int64, context: NSManagedObjectContext) { +func textMessageAppPacket(packet: MeshPacket, blockRangeTest: Bool, connectedNode: Int64, context: NSManagedObjectContext) { if let messageText = String(bytes: packet.decoded.payload, encoding: .utf8) { + + if blockRangeTest && messageText.starts(with: "seq ") { + return + } MeshLogger.log("💬 \("mesh.log.textmessage.received".localized)") diff --git a/Meshtastic/Views/Settings/AppSettings.swift b/Meshtastic/Views/Settings/AppSettings.swift index ad094258..02c33fc9 100644 --- a/Meshtastic/Views/Settings/AppSettings.swift +++ b/Meshtastic/Views/Settings/AppSettings.swift @@ -12,6 +12,7 @@ struct AppSettings: View { @StateObject var locationHelper = LocationHelper() @State var meshtasticUsername: String = UserDefaults.meshtasticUsername @State var provideLocation: Bool = UserDefaults.provideLocation + @State var blockRangeTest: Bool = UserDefaults.blockRangeTest @State var provideLocationInterval: Int = UserDefaults.provideLocationInterval @State private var isPresentingCoreDataResetConfirm = false @State private var isPresentingDeleteMapTilesConfirm = false @@ -28,6 +29,13 @@ struct AppSettings: View { .disableAutocorrection(true) .listRowSeparator(.visible) } + Section(header: Text("options")) { + + Toggle(isOn: $blockRangeTest) { + Label("range.test.blocked", systemImage: "x.circle") + } + .toggleStyle(SwitchToggleStyle(tint: .accentColor)) + } Section(header: Text("phone.gps")) { let accuracy = Measurement(value: locationHelper.locationManager.location?.horizontalAccuracy ?? 300, unit: UnitLength.meters) let altitiude = Measurement(value: locationHelper.locationManager.location?.altitude ?? 0, unit: UnitLength.meters) @@ -115,16 +123,16 @@ struct AppSettings: View { print("delete all tiles") } } - ForEach(MapTileServer.allCases, id: \.self) { tsl in - Button { - tileManager.remove(for: tsl) - totalDownloadedTileSize = tileManager.getAllDownloadedSize() - } label: { - Label("Delete \(tsl.description) Tiles", systemImage: "trash") - .foregroundColor(.red) - .font(.footnote) - } - } +// ForEach(MapTileServer.allCases, id: \.self) { tsl in +// Button { +// tileManager.remove(for: tsl) +// totalDownloadedTileSize = tileManager.getAllDownloadedSize() +// } label: { +// Label("Delete \(tsl.description) Tiles", systemImage: "trash") +// .foregroundColor(.red) +// .font(.footnote) +// } +// } } } } @@ -140,6 +148,9 @@ struct AppSettings: View { .onAppear { self.bleManager.context = context } + .onChange(of: blockRangeTest) { newBlockRangeTest in + UserDefaults.blockRangeTest = newBlockRangeTest + } .onChange(of: (meshtasticUsername)) { newMeshtasticUsername in UserDefaults.meshtasticUsername = newMeshtasticUsername } diff --git a/de.lproj/Localizable.strings b/de.lproj/Localizable.strings index 90b285a7..da1df4b6 100644 --- a/de.lproj/Localizable.strings +++ b/de.lproj/Localizable.strings @@ -214,6 +214,7 @@ "provide.location"="Standort im Mesh veröffentlichen"; "radio.configuration"="Geräteeinstellungen"; "range.test"="Entfernungstest"; +"range.test.blocked"="Block Range Test"; "range.test.config"="Entfernungstest Konfiguration"; "reboot"="Reboot"; "reboot.node"="Node neustarten?"; diff --git a/en.lproj/Localizable.strings b/en.lproj/Localizable.strings index 1f296093..0e0a85e5 100644 --- a/en.lproj/Localizable.strings +++ b/en.lproj/Localizable.strings @@ -217,6 +217,7 @@ "provide.location"="Share location"; "radio.configuration"="Radio Configuration"; "range.test"="Range Test"; +"range.test.blocked"="Block Range Test"; "range.test.config"="Range Test Config"; "reply"="Reply"; "reboot"="Reboot"; diff --git a/pl.lproj/Localizable.strings b/pl.lproj/Localizable.strings index da664afb..1a68c0c2 100644 --- a/pl.lproj/Localizable.strings +++ b/pl.lproj/Localizable.strings @@ -215,6 +215,7 @@ "provide.location"="Udostępnij lokalizację"; "radio.configuration"="Konfiguracja radia"; "range.test"="Test zasięgu"; +"range.test.blocked"="Block Range Test"; "range.test.config"="Konfiguracja testu zasięgu"; "reply"="Odpowiedz"; "reboot"="Uruchom ponownie"; diff --git a/zh-Hans.lproj/Localizable.strings b/zh-Hans.lproj/Localizable.strings index b57c4fa2..1347ce6a 100644 --- a/zh-Hans.lproj/Localizable.strings +++ b/zh-Hans.lproj/Localizable.strings @@ -214,6 +214,7 @@ "provide.location"="提供定位到 Mesh 网络"; "radio.configuration"="电台配置"; "range.test"="拉距测试"; +"range.test.blocked"="Block Range Test"; "range.test.config"="拉距测试配置"; "reply"="回复"; "reboot"="重启";