Remove duplicate mesh logging

This commit is contained in:
Garth Vander Houwen 2022-12-30 19:21:22 -08:00
parent 77ab77e2c7
commit 99ac6ed6cf
5 changed files with 61 additions and 178 deletions

View file

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

View file

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

View file

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

View file

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

View file

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