mirror of
https://github.com/meshtastic/Meshtastic-Apple.git
synced 2026-04-20 22:13:56 +00:00
Remove duplicate mesh logging
This commit is contained in:
parent
77ab77e2c7
commit
99ac6ed6cf
5 changed files with 61 additions and 178 deletions
|
|
@ -348,7 +348,7 @@ class BLEManager: NSObject, CBPeripheralDelegate, ObservableObject {
|
|||
invalidVersion = true
|
||||
return
|
||||
} else {
|
||||
MeshLogger.log("ℹ️ Issuing Want Config to \(connectedPeripheral!.peripheral.name ?? NSLocalizedString("unknown", comment: "Unknown"))")
|
||||
MeshLogger.log("🛎️ Issuing Want Config to \(connectedPeripheral!.peripheral.name ?? NSLocalizedString("unknown", comment: "Unknown"))")
|
||||
//BLE Characteristics discovered, issue wantConfig
|
||||
var toRadio: ToRadio = ToRadio()
|
||||
configNonce += 1
|
||||
|
|
@ -484,16 +484,16 @@ class BLEManager: NSObject, CBPeripheralDelegate, ObservableObject {
|
|||
}
|
||||
}
|
||||
// Log any other unknownApp calls
|
||||
if !nowKnown { MeshLogger.log("ℹ️ MESH PACKET received for Unknown App UNHANDLED \(try! decodedInfo.packet.jsonString())") }
|
||||
if !nowKnown { MeshLogger.log("🌐 MESH PACKET received for Unknown App UNHANDLED \(try! decodedInfo.packet.jsonString())") }
|
||||
|
||||
case .textMessageApp:
|
||||
textMessageAppPacket(packet: decodedInfo.packet, 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())")
|
||||
MeshLogger.log("🌐 MESH PACKET received for Remote Hardware App UNHANDLED \(try! decodedInfo.packet.jsonString())")
|
||||
case .positionApp:
|
||||
positionPacket(packet: decodedInfo.packet, context: context!)
|
||||
case .waypointApp:
|
||||
MeshLogger.log("ℹ️ MESH PACKET received for Waypoint App UNHANDLED \(try! decodedInfo.packet.jsonString())")
|
||||
MeshLogger.log("🌐 MESH PACKET received for Waypoint App UNHANDLED \(try! decodedInfo.packet.jsonString())")
|
||||
case .nodeinfoApp:
|
||||
if !invalidVersion { nodeInfoAppPacket(packet: decodedInfo.packet, context: context!) }
|
||||
case .routingApp:
|
||||
|
|
@ -501,29 +501,29 @@ class BLEManager: NSObject, CBPeripheralDelegate, ObservableObject {
|
|||
case .adminApp:
|
||||
adminAppPacket(packet: decodedInfo.packet, context: context!)
|
||||
case .replyApp:
|
||||
MeshLogger.log("ℹ️ MESH PACKET received for Reply App UNHANDLED \(try! decodedInfo.packet.jsonString())")
|
||||
MeshLogger.log("🌐 MESH PACKET received for Reply App UNHANDLED \(try! decodedInfo.packet.jsonString())")
|
||||
case .ipTunnelApp:
|
||||
MeshLogger.log("ℹ️ MESH PACKET received for IP Tunnel App UNHANDLED \(try! decodedInfo.packet.jsonString())")
|
||||
MeshLogger.log("🌐 MESH PACKET received for IP Tunnel App UNHANDLED \(try! decodedInfo.packet.jsonString())")
|
||||
case .serialApp:
|
||||
MeshLogger.log("ℹ️ MESH PACKET received for Serial App UNHANDLED \(try! decodedInfo.packet.jsonString())")
|
||||
MeshLogger.log("🌐 MESH PACKET received for Serial App UNHANDLED \(try! decodedInfo.packet.jsonString())")
|
||||
case .storeForwardApp:
|
||||
MeshLogger.log("ℹ️ MESH PACKET received for Store Forward App UNHANDLED \(try! decodedInfo.packet.jsonString())")
|
||||
MeshLogger.log("🌐 MESH PACKET received for Store Forward App UNHANDLED \(try! decodedInfo.packet.jsonString())")
|
||||
case .rangeTestApp:
|
||||
MeshLogger.log("ℹ️ MESH PACKET received for Range Test App UNHANDLED \(try! decodedInfo.packet.jsonString())")
|
||||
MeshLogger.log("🌐 MESH PACKET received for Range Test App UNHANDLED \(try! decodedInfo.packet.jsonString())")
|
||||
case .telemetryApp:
|
||||
if !invalidVersion { telemetryPacket(packet: decodedInfo.packet, connectedNode: (self.connectedPeripheral != nil ? connectedPeripheral.num : 0), context: context!) }
|
||||
case .textMessageCompressedApp:
|
||||
MeshLogger.log("ℹ️ MESH PACKET received for Text Message Compressed App UNHANDLED \(try! decodedInfo.packet.jsonString())")
|
||||
MeshLogger.log("🌐 MESH PACKET received for Text Message Compressed App UNHANDLED \(try! decodedInfo.packet.jsonString())")
|
||||
case .zpsApp:
|
||||
MeshLogger.log("ℹ️ MESH PACKET received for ZPS App UNHANDLED \(try! decodedInfo.packet.jsonString())")
|
||||
MeshLogger.log("🌐 MESH PACKET received for ZPS App UNHANDLED \(try! decodedInfo.packet.jsonString())")
|
||||
case .privateApp:
|
||||
MeshLogger.log("ℹ️ MESH PACKET received for Private App UNHANDLED \(try! decodedInfo.packet.jsonString())")
|
||||
MeshLogger.log("🌐 MESH PACKET received for Private App UNHANDLED \(try! decodedInfo.packet.jsonString())")
|
||||
case .atakForwarder:
|
||||
MeshLogger.log("ℹ️ MESH PACKET received for ATAK Forwarder App UNHANDLED \(try! decodedInfo.packet.jsonString())")
|
||||
MeshLogger.log("🌐 MESH PACKET received for ATAK Forwarder App UNHANDLED \(try! decodedInfo.packet.jsonString())")
|
||||
case .simulatorApp:
|
||||
MeshLogger.log("ℹ️ MESH PACKET received for Simulator App UNHANDLED \(try! decodedInfo.packet.jsonString())")
|
||||
MeshLogger.log("🌐 MESH PACKET received for Simulator App UNHANDLED \(try! decodedInfo.packet.jsonString())")
|
||||
case .audioApp:
|
||||
MeshLogger.log("ℹ️ MESH PACKET received for Audio App UNHANDLED \(try! decodedInfo.packet.jsonString())")
|
||||
MeshLogger.log("🌐 MESH PACKET received for Audio App UNHANDLED \(try! decodedInfo.packet.jsonString())")
|
||||
case .tracerouteApp:
|
||||
if let routingMessage = try? RouteDiscovery(serializedData: decodedInfo.packet.decoded.payload) {
|
||||
|
||||
|
|
@ -540,7 +540,7 @@ class BLEManager: NSObject, CBPeripheralDelegate, ObservableObject {
|
|||
}
|
||||
}
|
||||
case .UNRECOGNIZED(_):
|
||||
MeshLogger.log("ℹ️ MESH PACKET received for Other App UNHANDLED \(try! decodedInfo.packet.jsonString())")
|
||||
MeshLogger.log("🌐 MESH PACKET received for Other App UNHANDLED \(try! decodedInfo.packet.jsonString())")
|
||||
case .max:
|
||||
print("MAX PORT NUM OF 511")
|
||||
}
|
||||
|
|
@ -809,43 +809,26 @@ class BLEManager: NSObject, CBPeripheralDelegate, ObservableObject {
|
|||
}
|
||||
}
|
||||
|
||||
public func sendShutdown(destNum: Int64) -> Bool {
|
||||
public func sendShutdown(fromUser: UserEntity, toUser: UserEntity) -> Bool {
|
||||
|
||||
var adminPacket = AdminMessage()
|
||||
adminPacket.shutdownSeconds = 10
|
||||
|
||||
var meshPacket: MeshPacket = MeshPacket()
|
||||
meshPacket.to = UInt32(connectedPeripheral.num)
|
||||
meshPacket.from = 0 //UInt32(connectedPeripheral.num)
|
||||
meshPacket.to = UInt32(toUser.num)
|
||||
meshPacket.from = UInt32(fromUser.num)
|
||||
meshPacket.id = UInt32.random(in: UInt32(UInt8.max)..<UInt32.max)
|
||||
meshPacket.priority = MeshPacket.Priority.reliable
|
||||
meshPacket.wantAck = true
|
||||
|
||||
var dataMessage = DataMessage()
|
||||
dataMessage.payload = try! adminPacket.serializedData()
|
||||
dataMessage.portnum = PortNum.adminApp
|
||||
meshPacket.decoded = dataMessage
|
||||
|
||||
var toRadio: ToRadio!
|
||||
toRadio = ToRadio()
|
||||
toRadio.packet = meshPacket
|
||||
|
||||
let binaryData: Data = try! toRadio.serializedData()
|
||||
|
||||
if connectedPeripheral!.peripheral.state == CBPeripheralState.connected {
|
||||
|
||||
do {
|
||||
try context!.save()
|
||||
MeshLogger.log("💾 Saved a Shutdown Admin Message for node: \(String(destNum))")
|
||||
connectedPeripheral.peripheral.writeValue(binaryData, for: TORADIO_characteristic, type: .withResponse)
|
||||
return true
|
||||
|
||||
} catch {
|
||||
context!.rollback()
|
||||
let nsError = error as NSError
|
||||
MeshLogger.log("💥 Error Inserting New Core Data MessageEntity: \(nsError)")
|
||||
}
|
||||
let messageDescription = "Sent Shutdown Admin Message to: \(toUser.longName ?? NSLocalizedString("unknown", comment: ""))"
|
||||
if sendAdminMessageToRadio(meshPacket: meshPacket, adminDescription: messageDescription, fromUser: fromUser, toUser: toUser) {
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
|
|
@ -1546,7 +1529,7 @@ class BLEManager: NSObject, CBPeripheralDelegate, ObservableObject {
|
|||
do {
|
||||
connectedPeripheral.peripheral.writeValue(binaryData, for: TORADIO_characteristic, type: .withResponse)
|
||||
try context!.save()
|
||||
MeshLogger.log("💾 \(adminDescription)")
|
||||
print("⚙️ \(adminDescription)")
|
||||
return true
|
||||
} catch {
|
||||
context!.rollback()
|
||||
|
|
|
|||
|
|
@ -49,41 +49,33 @@ func localConfig (config: Config, context:NSManagedObjectContext, nodeNum: Int64
|
|||
do {
|
||||
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest) as! [NodeInfoEntity]
|
||||
|
||||
// Found a node, save Device Config
|
||||
if !fetchedNode.isEmpty {
|
||||
|
||||
if fetchedNode[0].bluetoothConfig == nil {
|
||||
|
||||
let newBluetoothConfig = BluetoothConfigEntity(context: context)
|
||||
|
||||
newBluetoothConfig.enabled = config.bluetooth.enabled
|
||||
newBluetoothConfig.mode = Int32(config.bluetooth.mode.rawValue)
|
||||
newBluetoothConfig.fixedPin = Int32(config.bluetooth.fixedPin)
|
||||
|
||||
fetchedNode[0].bluetoothConfig = newBluetoothConfig
|
||||
|
||||
} else {
|
||||
|
||||
fetchedNode[0].bluetoothConfig?.enabled = config.bluetooth.enabled
|
||||
fetchedNode[0].bluetoothConfig?.mode = Int32(config.bluetooth.mode.rawValue)
|
||||
fetchedNode[0].bluetoothConfig?.fixedPin = Int32(config.bluetooth.fixedPin)
|
||||
}
|
||||
|
||||
do {
|
||||
try context.save()
|
||||
MeshLogger.log("💾 Updated Bluetooth Config for node number: \(String(nodeNum))")
|
||||
print("💾 Updated Bluetooth Config for node number: \(String(nodeNum))")
|
||||
} catch {
|
||||
context.rollback()
|
||||
let nsError = error as NSError
|
||||
MeshLogger.log("💥 Error Updating Core Data BluetoothConfigEntity: \(nsError)")
|
||||
print("💥 Error Updating Core Data BluetoothConfigEntity: \(nsError)")
|
||||
}
|
||||
} else {
|
||||
MeshLogger.log("💥 No Nodes found in local database matching node number \(nodeNum) unable to save Bluetooth Config")
|
||||
print("💥 No Nodes found in local database matching node number \(nodeNum) unable to save Bluetooth Config")
|
||||
}
|
||||
} catch {
|
||||
let nsError = error as NSError
|
||||
MeshLogger.log("💥 Fetching node for core data BluetoothConfigEntity failed: \(nsError)")
|
||||
print("💥 Fetching node for core data BluetoothConfigEntity failed: \(nsError)")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -98,9 +90,7 @@ func localConfig (config: Config, context:NSManagedObjectContext, nodeNum: Int64
|
|||
let fetchedNode = try context.fetch(fetchNodeInfoRequest) as! [NodeInfoEntity]
|
||||
// Found a node, save Device Config
|
||||
if !fetchedNode.isEmpty {
|
||||
|
||||
if fetchedNode[0].deviceConfig == nil {
|
||||
|
||||
let newDeviceConfig = DeviceConfigEntity(context: context)
|
||||
newDeviceConfig.role = Int32(config.device.role.rawValue)
|
||||
newDeviceConfig.serialEnabled = config.device.serialEnabled
|
||||
|
|
@ -115,20 +105,18 @@ func localConfig (config: Config, context:NSManagedObjectContext, nodeNum: Int64
|
|||
fetchedNode[0].deviceConfig?.buttonGpio = Int32(config.device.buttonGpio)
|
||||
fetchedNode[0].deviceConfig?.buzzerGpio = Int32(config.device.buzzerGpio)
|
||||
}
|
||||
|
||||
do {
|
||||
try context.save()
|
||||
MeshLogger.log("💾 Updated Device Config for node number: \(String(nodeNum))")
|
||||
print("💾 Updated Device Config for node number: \(String(nodeNum))")
|
||||
} catch {
|
||||
context.rollback()
|
||||
let nsError = error as NSError
|
||||
MeshLogger.log("💥 Error Updating Core Data DeviceConfigEntity: \(nsError)")
|
||||
print("💥 Error Updating Core Data DeviceConfigEntity: \(nsError)")
|
||||
}
|
||||
}
|
||||
|
||||
} catch {
|
||||
let nsError = error as NSError
|
||||
MeshLogger.log("💥 Fetching node for core data DeviceConfigEntity failed: \(nsError)")
|
||||
print("💥 Fetching node for core data DeviceConfigEntity failed: \(nsError)")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -170,7 +158,7 @@ func localConfig (config: Config, context:NSManagedObjectContext, nodeNum: Int64
|
|||
do {
|
||||
|
||||
try context.save()
|
||||
MeshLogger.log("💾 Updated Display Config for node number: \(String(nodeNum))")
|
||||
print("💾 Updated Display Config for node number: \(String(nodeNum))")
|
||||
|
||||
} catch {
|
||||
|
||||
|
|
@ -201,14 +189,10 @@ func localConfig (config: Config, context:NSManagedObjectContext, nodeNum: Int64
|
|||
do {
|
||||
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest) as! [NodeInfoEntity]
|
||||
|
||||
// Found a node, save LoRa Config
|
||||
if !fetchedNode.isEmpty {
|
||||
|
||||
if fetchedNode[0].loRaConfig == nil {
|
||||
|
||||
let newLoRaConfig = LoRaConfigEntity(context: context)
|
||||
|
||||
newLoRaConfig.regionCode = Int32(config.lora.region.rawValue)
|
||||
newLoRaConfig.usePreset = config.lora.usePreset
|
||||
newLoRaConfig.modemPreset = Int32(config.lora.modemPreset.rawValue)
|
||||
|
|
@ -221,9 +205,7 @@ func localConfig (config: Config, context:NSManagedObjectContext, nodeNum: Int64
|
|||
newLoRaConfig.txEnabled = config.lora.txEnabled
|
||||
newLoRaConfig.channelNum = Int32(config.lora.channelNum)
|
||||
fetchedNode[0].loRaConfig = newLoRaConfig
|
||||
|
||||
} else {
|
||||
|
||||
fetchedNode[0].loRaConfig?.regionCode = Int32(config.lora.region.rawValue)
|
||||
fetchedNode[0].loRaConfig?.usePreset = config.lora.usePreset
|
||||
fetchedNode[0].loRaConfig?.modemPreset = Int32(config.lora.modemPreset.rawValue)
|
||||
|
|
@ -236,10 +218,9 @@ func localConfig (config: Config, context:NSManagedObjectContext, nodeNum: Int64
|
|||
fetchedNode[0].loRaConfig?.txEnabled = config.lora.txEnabled
|
||||
fetchedNode[0].loRaConfig?.channelNum = Int32(config.lora.channelNum)
|
||||
}
|
||||
|
||||
do {
|
||||
try context.save()
|
||||
MeshLogger.log("💾 Updated LoRa Config for node number: \(String(nodeNum))")
|
||||
print("💾 Updated LoRa Config for node number: \(String(nodeNum))")
|
||||
} catch {
|
||||
context.rollback()
|
||||
let nsError = error as NSError
|
||||
|
|
@ -277,7 +258,7 @@ func localConfig (config: Config, context:NSManagedObjectContext, nodeNum: Int64
|
|||
|
||||
do {
|
||||
try context.save()
|
||||
MeshLogger.log("💾 Updated Network Config for node number: \(String(nodeNum))")
|
||||
print("💾 Updated Network Config for node number: \(String(nodeNum))")
|
||||
|
||||
} catch {
|
||||
context.rollback()
|
||||
|
|
@ -303,14 +284,10 @@ func localConfig (config: Config, context:NSManagedObjectContext, nodeNum: Int64
|
|||
do {
|
||||
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest) as! [NodeInfoEntity]
|
||||
|
||||
// Found a node, save LoRa Config
|
||||
if !fetchedNode.isEmpty {
|
||||
|
||||
if fetchedNode[0].positionConfig == nil {
|
||||
|
||||
let newPositionConfig = PositionConfigEntity(context: context)
|
||||
|
||||
newPositionConfig.smartPositionEnabled = config.position.positionBroadcastSmartEnabled
|
||||
newPositionConfig.deviceGpsEnabled = config.position.gpsEnabled
|
||||
newPositionConfig.fixedPosition = config.position.fixedPosition
|
||||
|
|
@ -318,11 +295,8 @@ func localConfig (config: Config, context:NSManagedObjectContext, nodeNum: Int64
|
|||
newPositionConfig.gpsAttemptTime = Int32(config.position.gpsAttemptTime)
|
||||
newPositionConfig.positionBroadcastSeconds = Int32(config.position.positionBroadcastSecs)
|
||||
newPositionConfig.positionFlags = Int32(config.position.positionFlags)
|
||||
|
||||
fetchedNode[0].positionConfig = newPositionConfig
|
||||
|
||||
} else {
|
||||
|
||||
fetchedNode[0].positionConfig?.smartPositionEnabled = config.position.positionBroadcastSmartEnabled
|
||||
fetchedNode[0].positionConfig?.deviceGpsEnabled = config.position.gpsEnabled
|
||||
fetchedNode[0].positionConfig?.fixedPosition = config.position.fixedPosition
|
||||
|
|
@ -331,25 +305,20 @@ func localConfig (config: Config, context:NSManagedObjectContext, nodeNum: Int64
|
|||
fetchedNode[0].positionConfig?.positionBroadcastSeconds = Int32(config.position.positionBroadcastSecs)
|
||||
fetchedNode[0].positionConfig?.positionFlags = Int32(config.position.positionFlags)
|
||||
}
|
||||
|
||||
do {
|
||||
try context.save()
|
||||
MeshLogger.log("💾 Updated Position Config for node number: \(String(nodeNum))")
|
||||
|
||||
print("💾 Updated Position Config for node number: \(String(nodeNum))")
|
||||
} catch {
|
||||
context.rollback()
|
||||
let nsError = error as NSError
|
||||
MeshLogger.log("💥 Error Updating Core Data PositionConfigEntity: \(nsError)")
|
||||
print("💥 Error Updating Core Data PositionConfigEntity: \(nsError)")
|
||||
}
|
||||
|
||||
} else {
|
||||
MeshLogger.log("💥 No Nodes found in local database matching node number \(nodeNum) unable to save Position Config")
|
||||
print("💥 No Nodes found in local database matching node number \(nodeNum) unable to save Position Config")
|
||||
}
|
||||
|
||||
} catch {
|
||||
|
||||
let nsError = error as NSError
|
||||
MeshLogger.log("💥 Fetching node for core data PositionConfigEntity failed: \(nsError)")
|
||||
print("💥 Fetching node for core data PositionConfigEntity failed: \(nsError)")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -403,7 +372,7 @@ func moduleConfig (config: ModuleConfig, context:NSManagedObjectContext, nodeNum
|
|||
|
||||
do {
|
||||
try context.save()
|
||||
MeshLogger.log("💾 Updated Canned Message Module Config for node number: \(String(nodeNum))")
|
||||
print("💾 Updated Canned Message Module Config for node number: \(String(nodeNum))")
|
||||
|
||||
} catch {
|
||||
context.rollback()
|
||||
|
|
@ -470,7 +439,7 @@ func moduleConfig (config: ModuleConfig, context:NSManagedObjectContext, nodeNum
|
|||
|
||||
do {
|
||||
try context.save()
|
||||
MeshLogger.log("💾 Updated External Notification Module Config for node number: \(String(nodeNum))")
|
||||
print("💾 Updated External Notification Module Config for node number: \(String(nodeNum))")
|
||||
|
||||
} catch {
|
||||
context.rollback()
|
||||
|
|
@ -499,25 +468,19 @@ func moduleConfig (config: ModuleConfig, context:NSManagedObjectContext, nodeNum
|
|||
do {
|
||||
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest) as! [NodeInfoEntity]
|
||||
|
||||
// Found a node, save MQTT Config
|
||||
if !fetchedNode.isEmpty {
|
||||
|
||||
if fetchedNode[0].mqttConfig == nil {
|
||||
|
||||
let newMQTTConfig = MQTTConfigEntity(context: context)
|
||||
|
||||
newMQTTConfig.enabled = config.mqtt.enabled
|
||||
newMQTTConfig.address = config.mqtt.address
|
||||
newMQTTConfig.address = config.mqtt.username
|
||||
newMQTTConfig.password = config.mqtt.password
|
||||
newMQTTConfig.encryptionEnabled = config.mqtt.encryptionEnabled
|
||||
newMQTTConfig.jsonEnabled = config.mqtt.jsonEnabled
|
||||
|
||||
fetchedNode[0].mqttConfig = newMQTTConfig
|
||||
|
||||
} else {
|
||||
|
||||
fetchedNode[0].mqttConfig?.enabled = config.mqtt.enabled
|
||||
fetchedNode[0].mqttConfig?.address = config.mqtt.address
|
||||
fetchedNode[0].mqttConfig?.address = config.mqtt.username
|
||||
|
|
@ -525,28 +488,20 @@ func moduleConfig (config: ModuleConfig, context:NSManagedObjectContext, nodeNum
|
|||
fetchedNode[0].mqttConfig?.encryptionEnabled = config.mqtt.encryptionEnabled
|
||||
fetchedNode[0].mqttConfig?.jsonEnabled = config.mqtt.jsonEnabled
|
||||
}
|
||||
|
||||
do {
|
||||
|
||||
try context.save()
|
||||
MeshLogger.log("💾 Updated MQTT Config for node number: \(String(nodeNum))")
|
||||
|
||||
print("💾 Updated MQTT Config for node number: \(String(nodeNum))")
|
||||
} catch {
|
||||
|
||||
context.rollback()
|
||||
|
||||
let nsError = error as NSError
|
||||
MeshLogger.log("💥 Error Updating Core Data MQTTConfigEntity: \(nsError)")
|
||||
print("💥 Error Updating Core Data MQTTConfigEntity: \(nsError)")
|
||||
}
|
||||
|
||||
} else {
|
||||
MeshLogger.log("💥 No Nodes found in local database matching node number \(nodeNum) unable to save MQTT Module Config")
|
||||
print("💥 No Nodes found in local database matching node number \(nodeNum) unable to save MQTT Module Config")
|
||||
}
|
||||
|
||||
} catch {
|
||||
|
||||
let nsError = error as NSError
|
||||
MeshLogger.log("💥 Fetching node for core data MQTTConfigEntity failed: \(nsError)")
|
||||
print("💥 Fetching node for core data MQTTConfigEntity failed: \(nsError)")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -573,23 +528,20 @@ func moduleConfig (config: ModuleConfig, context:NSManagedObjectContext, nodeNum
|
|||
fetchedNode[0].rangeTestConfig?.enabled = config.rangeTest.enabled
|
||||
fetchedNode[0].rangeTestConfig?.save = config.rangeTest.save
|
||||
}
|
||||
|
||||
do {
|
||||
try context.save()
|
||||
MeshLogger.log("💾 Updated Range Test Config for node number: \(String(nodeNum))")
|
||||
print("💾 Updated Range Test Config for node number: \(String(nodeNum))")
|
||||
} catch {
|
||||
context.rollback()
|
||||
let nsError = error as NSError
|
||||
MeshLogger.log("💥 Error Updating Core Data RangeTestConfigEntity: \(nsError)")
|
||||
print("💥 Error Updating Core Data RangeTestConfigEntity: \(nsError)")
|
||||
}
|
||||
|
||||
} else {
|
||||
MeshLogger.log("💥 No Nodes found in local database matching node number \(nodeNum) unable to save Range Test Module Config")
|
||||
print("💥 No Nodes found in local database matching node number \(nodeNum) unable to save Range Test Module Config")
|
||||
}
|
||||
|
||||
} catch {
|
||||
let nsError = error as NSError
|
||||
MeshLogger.log("💥 Fetching node for core data RangeTestConfigEntity failed: \(nsError)")
|
||||
print("💥 Fetching node for core data RangeTestConfigEntity failed: \(nsError)")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -631,7 +583,7 @@ func moduleConfig (config: ModuleConfig, context:NSManagedObjectContext, nodeNum
|
|||
|
||||
do {
|
||||
try context.save()
|
||||
MeshLogger.log("💾 Updated Serial Module Config for node number: \(String(nodeNum))")
|
||||
print("💾 Updated Serial Module Config for node number: \(String(nodeNum))")
|
||||
|
||||
} catch {
|
||||
|
||||
|
|
@ -689,7 +641,7 @@ func moduleConfig (config: ModuleConfig, context:NSManagedObjectContext, nodeNum
|
|||
|
||||
do {
|
||||
try context.save()
|
||||
MeshLogger.log("💾 Updated Telemetry Module Config for node number: \(String(nodeNum))")
|
||||
print("💾 Updated Telemetry Module Config for node number: \(String(nodeNum))")
|
||||
|
||||
} catch {
|
||||
context.rollback()
|
||||
|
|
@ -710,6 +662,7 @@ func moduleConfig (config: ModuleConfig, context:NSManagedObjectContext, nodeNum
|
|||
|
||||
func myInfoPacket (myInfo: MyNodeInfo, peripheralId: String, context: NSManagedObjectContext) -> MyInfoEntity? {
|
||||
|
||||
MeshLogger.log("ℹ️ MyInfo received: \(String(myInfo.myNodeNum))")
|
||||
let fetchMyInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "MyInfoEntity")
|
||||
fetchMyInfoRequest.predicate = NSPredicate(format: "myNodeNum == %lld", Int64(myInfo.myNodeNum))
|
||||
|
||||
|
|
@ -732,18 +685,15 @@ func myInfoPacket (myInfo: MyNodeInfo, peripheralId: String, context: NSManagedO
|
|||
myInfoEntity.messageTimeoutMsec = Int32(bitPattern: myInfo.messageTimeoutMsec)
|
||||
myInfoEntity.minAppVersion = Int32(bitPattern: myInfo.minAppVersion)
|
||||
myInfoEntity.maxChannels = Int32(bitPattern: myInfo.maxChannels)
|
||||
|
||||
do {
|
||||
try context.save()
|
||||
MeshLogger.log("💾 Saved a new myInfo for node number: \(String(myInfo.myNodeNum))")
|
||||
print("💾 Saved a new myInfo for node number: \(String(myInfo.myNodeNum))")
|
||||
return myInfoEntity
|
||||
|
||||
} catch {
|
||||
context.rollback()
|
||||
let nsError = error as NSError
|
||||
print("💥 Error Inserting New Core Data MyInfoEntity: \(nsError)")
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
fetchedMyInfo[0].peripheralId = peripheralId
|
||||
|
|
@ -760,9 +710,8 @@ func myInfoPacket (myInfo: MyNodeInfo, peripheralId: String, context: NSManagedO
|
|||
|
||||
do {
|
||||
try context.save()
|
||||
MeshLogger.log("💾 Updated myInfo for node number: \(String(myInfo.myNodeNum))")
|
||||
print("💾 Updated myInfo for node number: \(String(myInfo.myNodeNum))")
|
||||
return fetchedMyInfo[0]
|
||||
|
||||
} catch {
|
||||
context.rollback()
|
||||
let nsError = error as NSError
|
||||
|
|
@ -770,7 +719,6 @@ func myInfoPacket (myInfo: MyNodeInfo, peripheralId: String, context: NSManagedO
|
|||
}
|
||||
}
|
||||
} catch {
|
||||
|
||||
print("💥 Fetch MyInfo Error")
|
||||
}
|
||||
return nil
|
||||
|
|
@ -780,15 +728,14 @@ func channelPacket (channel: Channel, fromNum: Int64, context: NSManagedObjectCo
|
|||
|
||||
if channel.isInitialized && channel.hasSettings && channel.role != Channel.Role.disabled {
|
||||
|
||||
MeshLogger.log("🎛️ Channel received: \(channel.settings.name)")
|
||||
let fetchedMyInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "MyInfoEntity")
|
||||
fetchedMyInfoRequest.predicate = NSPredicate(format: "myNodeNum == %lld", fromNum)
|
||||
|
||||
do {
|
||||
|
||||
let fetchedMyInfo = try context.fetch(fetchedMyInfoRequest) as! [MyInfoEntity]
|
||||
|
||||
if fetchedMyInfo.count == 1 {
|
||||
|
||||
let newChannel = ChannelEntity(context: context)
|
||||
newChannel.id = Int32(channel.index)
|
||||
newChannel.index = Int32(channel.index)
|
||||
|
|
@ -809,15 +756,12 @@ func channelPacket (channel: Channel, fromNum: Int64, context: NSManagedObjectCo
|
|||
} catch {
|
||||
print("Failed to save channel")
|
||||
}
|
||||
MeshLogger.log("💾 Updated MyInfo channel \(channel.index) from Channel App Packet For: \(fetchedMyInfo[0].myNodeNum)")
|
||||
print("💾 Updated MyInfo channel \(channel.index) from Channel App Packet For: \(fetchedMyInfo[0].myNodeNum)")
|
||||
} else if channel.role.rawValue > 0 {
|
||||
print("💥 Trying to save a channel to a MyInfo that does not exist: \(fromNum)")
|
||||
}
|
||||
|
||||
} catch {
|
||||
|
||||
context.rollback()
|
||||
|
||||
let nsError = error as NSError
|
||||
print("💥 Error Saving MyInfo Channel from ADMIN_APP \(nsError)")
|
||||
}
|
||||
|
|
@ -841,14 +785,11 @@ func nodeInfoPacket (nodeInfo: NodeInfo, channel: UInt32, context: NSManagedObje
|
|||
newNode.channel = Int32(channel)
|
||||
|
||||
if nodeInfo.hasDeviceMetrics {
|
||||
|
||||
let telemetry = TelemetryEntity(context: context)
|
||||
|
||||
telemetry.batteryLevel = Int32(nodeInfo.deviceMetrics.batteryLevel)
|
||||
telemetry.voltage = nodeInfo.deviceMetrics.voltage
|
||||
telemetry.channelUtilization = nodeInfo.deviceMetrics.channelUtilization
|
||||
telemetry.airUtilTx = nodeInfo.deviceMetrics.airUtilTx
|
||||
|
||||
var newTelemetries = [TelemetryEntity]()
|
||||
newTelemetries.append(telemetry)
|
||||
newNode.telemetries? = NSOrderedSet(array: newTelemetries)
|
||||
|
|
@ -856,9 +797,7 @@ func nodeInfoPacket (nodeInfo: NodeInfo, channel: UInt32, context: NSManagedObje
|
|||
|
||||
newNode.lastHeard = Date(timeIntervalSince1970: TimeInterval(Int64(nodeInfo.lastHeard)))
|
||||
newNode.snr = nodeInfo.snr
|
||||
|
||||
if nodeInfo.hasUser {
|
||||
|
||||
let newUser = UserEntity(context: context)
|
||||
newUser.userId = nodeInfo.user.id
|
||||
newUser.num = Int64(nodeInfo.num)
|
||||
|
|
@ -870,7 +809,6 @@ func nodeInfoPacket (nodeInfo: NodeInfo, channel: UInt32, context: NSManagedObje
|
|||
}
|
||||
|
||||
if nodeInfo.position.latitudeI > 0 || nodeInfo.position.longitudeI > 0 {
|
||||
|
||||
let position = PositionEntity(context: context)
|
||||
position.seqNo = Int32(nodeInfo.position.seqNumber)
|
||||
position.latitudeI = nodeInfo.position.latitudeI
|
||||
|
|
@ -880,7 +818,6 @@ func nodeInfoPacket (nodeInfo: NodeInfo, channel: UInt32, context: NSManagedObje
|
|||
position.speed = Int32(nodeInfo.position.groundSpeed)
|
||||
position.heading = Int32(nodeInfo.position.groundTrack)
|
||||
position.time = Date(timeIntervalSince1970: TimeInterval(Int64(nodeInfo.position.time)))
|
||||
|
||||
var newPostions = [PositionEntity]()
|
||||
newPostions.append(position)
|
||||
newNode.positions? = NSOrderedSet(array: newPostions)
|
||||
|
|
@ -896,30 +833,22 @@ func nodeInfoPacket (nodeInfo: NodeInfo, channel: UInt32, context: NSManagedObje
|
|||
if fetchedMyInfo.count > 0 {
|
||||
newNode.myInfo = fetchedMyInfo[0]
|
||||
}
|
||||
|
||||
do {
|
||||
|
||||
try context.save()
|
||||
|
||||
if nodeInfo.hasUser {
|
||||
MeshLogger.log("💾 BLE FROMRADIO received and nodeInfo inserted for \(nodeInfo.user.longName)")
|
||||
MeshLogger.log("📟 Node info received for: \(nodeInfo.user.longName)")
|
||||
} else {
|
||||
MeshLogger.log("💾 BLE FROMRADIO received and nodeInfo inserted for \(nodeInfo.num)")
|
||||
MeshLogger.log("📟 Node info received for: \(nodeInfo.num)")
|
||||
}
|
||||
return newNode
|
||||
|
||||
} catch {
|
||||
|
||||
context.rollback()
|
||||
|
||||
let nsError = error as NSError
|
||||
print("💥 Error Saving Core Data NodeInfoEntity: \(nsError)")
|
||||
}
|
||||
|
||||
} catch {
|
||||
print("💥 Fetch MyInfo Error")
|
||||
}
|
||||
|
||||
} else if nodeInfo.hasUser && nodeInfo.num > 0 {
|
||||
|
||||
fetchedNode[0].id = Int64(nodeInfo.num)
|
||||
|
|
@ -960,11 +889,8 @@ func nodeInfoPacket (nodeInfo: NodeInfo, channel: UInt32, context: NSManagedObje
|
|||
position.altitude = nodeInfo.position.altitude
|
||||
position.satsInView = Int32(nodeInfo.position.satsInView)
|
||||
position.time = Date(timeIntervalSince1970: TimeInterval(Int64(nodeInfo.position.time)))
|
||||
|
||||
let mutablePositions = fetchedNode[0].positions!.mutableCopy() as! NSMutableOrderedSet
|
||||
|
||||
fetchedNode[0].positions = mutablePositions.copy() as? NSOrderedSet
|
||||
|
||||
}
|
||||
|
||||
// Look for a MyInfo
|
||||
|
|
@ -972,44 +898,31 @@ func nodeInfoPacket (nodeInfo: NodeInfo, channel: UInt32, context: NSManagedObje
|
|||
fetchMyInfoRequest.predicate = NSPredicate(format: "myNodeNum == %lld", Int64(nodeInfo.num))
|
||||
|
||||
do {
|
||||
|
||||
let fetchedMyInfo = try context.fetch(fetchMyInfoRequest) as! [MyInfoEntity]
|
||||
if fetchedMyInfo.count > 0 {
|
||||
|
||||
fetchedNode[0].myInfo = fetchedMyInfo[0]
|
||||
}
|
||||
|
||||
do {
|
||||
|
||||
try context.save()
|
||||
|
||||
if nodeInfo.hasUser {
|
||||
MeshLogger.log("💾 BLE FROMRADIO received and nodeInfo inserted for \(nodeInfo.user.longName)")
|
||||
|
||||
MeshLogger.log("📟 Node info received for: \(nodeInfo.user.longName)")
|
||||
} else {
|
||||
MeshLogger.log("💾 BLE FROMRADIO received and nodeInfo inserted for \(nodeInfo.num)")
|
||||
MeshLogger.log("📟 Node info received for: \(nodeInfo.num)")
|
||||
}
|
||||
|
||||
return fetchedNode[0]
|
||||
|
||||
} catch {
|
||||
|
||||
context.rollback()
|
||||
|
||||
let nsError = error as NSError
|
||||
print("💥 Error Saving Core Data NodeInfoEntity: \(nsError)")
|
||||
}
|
||||
|
||||
} catch {
|
||||
print("💥 Fetch MyInfo Error")
|
||||
}
|
||||
}
|
||||
|
||||
} catch {
|
||||
|
||||
print("💥 Fetch NodeInfoEntity Error")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -362,9 +362,7 @@ struct NodeDetail: View {
|
|||
isPresented: $showingShutdownConfirm
|
||||
) {
|
||||
Button("Shutdown Node?", role: .destructive) {
|
||||
|
||||
if !bleManager.sendShutdown(destNum: node.num) {
|
||||
|
||||
if !bleManager.sendShutdown(fromUser: node.user!, toUser: node.user!) {
|
||||
print("Shutdown Failed")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ struct AdminMessageList: View {
|
|||
Image(systemName: "checkmark.square")
|
||||
.foregroundColor(.gray)
|
||||
.font(.caption)
|
||||
Text("acknowledged: \(Date(timeIntervalSince1970: TimeInterval(am.ackTimestamp)).formattedDate(format: "h:mm:ss a"))")
|
||||
Text("routing.acknowledged").foregroundColor(.gray).font(.caption) + Text(": \(Date(timeIntervalSince1970: TimeInterval(am.ackTimestamp)).formattedDate(format: "h:mm:ss a"))")
|
||||
.foregroundColor(.gray)
|
||||
.font(.caption)
|
||||
|
||||
|
|
@ -56,13 +56,10 @@ struct AdminMessageList: View {
|
|||
}
|
||||
.navigationTitle("admin.log")
|
||||
.navigationBarItems(trailing:
|
||||
|
||||
ZStack {
|
||||
|
||||
ConnectedDevice(bluetoothOn: bleManager.isSwitchedOn, deviceConnected: bleManager.connectedPeripheral != nil, name: (bleManager.connectedPeripheral != nil) ? bleManager.connectedPeripheral.shortName : "????")
|
||||
})
|
||||
.onAppear {
|
||||
|
||||
self.bleManager.context = context
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,36 +14,28 @@ struct MeshLog: View {
|
|||
List(logs, id: \.self, rowContent: Text.init)
|
||||
.task {
|
||||
do {
|
||||
|
||||
let url = logFile!
|
||||
logs.removeAll()
|
||||
|
||||
var lineCount = 0
|
||||
let lineLimit = 500
|
||||
|
||||
// Get the number of lines
|
||||
for try await _ in url.lines {
|
||||
lineCount += 1
|
||||
}
|
||||
|
||||
// Set the record to start with if we have more lines than the limit
|
||||
var startingLog = 0
|
||||
if lineCount > lineLimit {
|
||||
startingLog = lineCount - lineLimit
|
||||
}
|
||||
|
||||
var lineNumber = 0
|
||||
|
||||
for try await log in url.lines {
|
||||
if lineNumber >= startingLog {
|
||||
|
||||
logs.append(log)
|
||||
document.logFile.append("\(log) \n")
|
||||
}
|
||||
lineNumber += 1
|
||||
}
|
||||
logs.reverse()
|
||||
|
||||
} catch {
|
||||
// Stop adding logs when an error is thrown
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue