mirror of
https://github.com/meshtastic/Meshtastic-Apple.git
synced 2026-04-20 22:13:56 +00:00
Handle some nulls, properly identify and serialized assorted admin packets
This commit is contained in:
parent
21f96c334f
commit
630986487c
5 changed files with 51 additions and 37 deletions
|
|
@ -985,39 +985,50 @@ func nodeInfoAppPacket (packet: MeshPacket, context: NSManagedObjectContext) {
|
|||
}
|
||||
|
||||
func adminAppPacket (packet: MeshPacket, context: NSManagedObjectContext) {
|
||||
|
||||
if let cmmc = try? CannedMessageModuleConfig(serializedData: packet.decoded.payload) {
|
||||
|
||||
if let adminMessage = try? AdminMessage(serializedData: packet.decoded.payload) {
|
||||
|
||||
if adminMessage.payloadVariant == AdminMessage.OneOf_PayloadVariant.getCannedMessageModuleMessagesResponse(adminMessage.getCannedMessageModuleMessagesResponse) {
|
||||
|
||||
if !cmmc.messages.isEmpty {
|
||||
|
||||
let logString = String.localizedStringWithFormat(NSLocalizedString("mesh.log.cannedmessages.messages.received %@", comment: "Canned Messages Messages Received For: %@"), String(packet.from))
|
||||
MeshLogger.log("🥫 \(logString)")
|
||||
|
||||
let fetchNodeRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
fetchNodeRequest.predicate = NSPredicate(format: "num == %lld", Int64(packet.from))
|
||||
|
||||
do {
|
||||
let fetchedNode = try context.fetch(fetchNodeRequest) as! [NodeInfoEntity]
|
||||
if fetchedNode.count == 1 {
|
||||
let messages = String(cmmc.textFormatString())
|
||||
.replacingOccurrences(of: "11: ", with: "")
|
||||
.replacingOccurrences(of: "\"", with: "")
|
||||
.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
fetchedNode[0].cannedMessageConfig?.messages = messages
|
||||
if let cmmc = try? CannedMessageModuleConfig(serializedData: packet.decoded.payload) {
|
||||
|
||||
if !cmmc.messages.isEmpty {
|
||||
|
||||
let logString = String.localizedStringWithFormat(NSLocalizedString("mesh.log.cannedmessages.messages.received %@", comment: "Canned Messages Messages Received For: %@"), String(packet.from))
|
||||
MeshLogger.log("🥫 \(logString)")
|
||||
|
||||
let fetchNodeRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
fetchNodeRequest.predicate = NSPredicate(format: "num == %lld", Int64(packet.from))
|
||||
|
||||
do {
|
||||
try context.save()
|
||||
print("💾 Updated Canned Messages Messages For: \(fetchedNode[0].num)")
|
||||
let fetchedNode = try context.fetch(fetchNodeRequest) as! [NodeInfoEntity]
|
||||
if fetchedNode.count == 1 {
|
||||
let messages = String(cmmc.textFormatString())
|
||||
.replacingOccurrences(of: "11: ", with: "")
|
||||
.replacingOccurrences(of: "\"", with: "")
|
||||
.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
fetchedNode[0].cannedMessageConfig?.messages = messages
|
||||
do {
|
||||
try context.save()
|
||||
print("💾 Updated Canned Messages Messages For: \(fetchedNode[0].num)")
|
||||
} catch {
|
||||
context.rollback()
|
||||
let nsError = error as NSError
|
||||
print("💥 Error Saving NodeInfoEntity from POSITION_APP \(nsError)")
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
context.rollback()
|
||||
let nsError = error as NSError
|
||||
print("💥 Error Saving NodeInfoEntity from POSITION_APP \(nsError)")
|
||||
print("💥 Error Deserializing ADMIN_APP packet.")
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
print("💥 Error Deserializing POSITION_APP packet.")
|
||||
}
|
||||
}
|
||||
|
||||
else if adminMessage.payloadVariant == AdminMessage.OneOf_PayloadVariant.getChannelResponse(adminMessage.getChannelResponse) {
|
||||
print("I am a channel response")
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func positionPacket (packet: MeshPacket, context: NSManagedObjectContext) {
|
||||
|
|
|
|||
|
|
@ -61,11 +61,8 @@ public func clearTelemetry(destNum: Int64, metricsType: Int32, context: NSManage
|
|||
}
|
||||
|
||||
public func deleteChannelMessages(channel: ChannelEntity, context: NSManagedObjectContext) {
|
||||
let fetchChannelMessagesRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "MessageEntity")
|
||||
fetchChannelMessagesRequest.predicate = NSPredicate(format: "channel == %i AND toUser == nil AND admin == false", Int32(channel.id))
|
||||
fetchChannelMessagesRequest.includesPropertyValues = false
|
||||
do {
|
||||
let objects = try context.fetch(fetchChannelMessagesRequest) as! [NSManagedObject]
|
||||
let objects = channel.allPrivateMessages// try context.fetch(fetchChannelMessagesRequest) as! [NSManagedObject]
|
||||
for object in objects {
|
||||
context.delete(object)
|
||||
}
|
||||
|
|
@ -77,11 +74,8 @@ public func deleteChannelMessages(channel: ChannelEntity, context: NSManagedObje
|
|||
|
||||
public func deleteUserMessages(user: UserEntity, context: NSManagedObjectContext) {
|
||||
|
||||
let fetchUserMessagesRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "MessageEntity")
|
||||
fetchUserMessagesRequest.predicate = NSPredicate(format: "((toUser.num == %lld) OR (fromUser.num == %lld)) AND toUser != nil AND fromUser != nil AND admin == false", Int64(user.num), Int64(user.num))
|
||||
fetchUserMessagesRequest.includesPropertyValues = false
|
||||
do {
|
||||
let objects = try context.fetch(fetchUserMessagesRequest) as! [NSManagedObject]
|
||||
let objects = user.messageList//try context.fetch(fetchUserMessagesRequest) as! [NSManagedObject]
|
||||
for object in objects {
|
||||
context.delete(object)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -210,7 +210,7 @@ struct Connect: View {
|
|||
Button(role: .destructive, action: {
|
||||
|
||||
if bleManager.connectedPeripheral != nil && bleManager.connectedPeripheral.peripheral.state == CBPeripheralState.connected {
|
||||
bleManager.disconnectPeripheral()
|
||||
bleManager.disconnectPeripheral(reconnect: false)
|
||||
isPreferredRadio = false
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -126,8 +126,17 @@ struct Contacts: View {
|
|||
) {
|
||||
|
||||
Button(role: .destructive) {
|
||||
deleteChannelMessages(channel: channel, context: context)
|
||||
context.refresh(node!.myInfo!, mergeChanges: true)
|
||||
do {
|
||||
for message in channel.allPrivateMessages {
|
||||
context.delete(message)
|
||||
}
|
||||
try context.save()
|
||||
context.refresh(node!.myInfo!, mergeChanges: true)
|
||||
} catch let error as NSError {
|
||||
print("Error: \(error.localizedDescription)")
|
||||
}
|
||||
//deleteChannelMessages(channel: channel, context: context)
|
||||
|
||||
} label: {
|
||||
Text("delete")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ struct Channels: View {
|
|||
}
|
||||
}
|
||||
}
|
||||
if node?.myInfo?.channels?.array.count ?? 0 < 8 {
|
||||
if node?.myInfo?.channels?.array.count ?? 0 < 8 && node != nil {
|
||||
|
||||
Button {
|
||||
let key = generateChannelKey(size: 32)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue