mirror of
https://github.com/meshtastic/Meshtastic-Apple.git
synced 2026-04-20 22:13:56 +00:00
Handle bad packets better
This commit is contained in:
parent
5406ed6155
commit
3a71984155
3 changed files with 53 additions and 23 deletions
|
|
@ -391,8 +391,15 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph
|
|||
}
|
||||
|
||||
var decodedInfo = FromRadio()
|
||||
decodedInfo = try! FromRadio(serializedData: characteristic.value!)
|
||||
|
||||
|
||||
do {
|
||||
|
||||
decodedInfo = try FromRadio(serializedData: characteristic.value!)
|
||||
|
||||
} catch {
|
||||
|
||||
print(characteristic.value!)
|
||||
}
|
||||
switch decodedInfo.packet.decoded.portnum {
|
||||
|
||||
// Handle Any local only packets we get over BLE
|
||||
|
|
|
|||
|
|
@ -633,7 +633,7 @@ func nodeInfoAppPacket (packet: MeshPacket, meshLogging: Bool, context: NSManage
|
|||
}
|
||||
|
||||
} else {
|
||||
return
|
||||
//return
|
||||
}
|
||||
do {
|
||||
|
||||
|
|
@ -725,7 +725,7 @@ func positionPacket (packet: MeshPacket, meshLogging: Bool, context: NSManagedOb
|
|||
|
||||
} else {
|
||||
|
||||
return
|
||||
//return
|
||||
}
|
||||
do {
|
||||
|
||||
|
|
@ -923,14 +923,27 @@ func textMessageAppPacket(packet: MeshPacket, connectedNode: Int64, meshLogging:
|
|||
newMessage.messagePayload = messageText
|
||||
newMessage.fromUser?.objectWillChange.send()
|
||||
newMessage.toUser?.objectWillChange.send()
|
||||
|
||||
var messageSaved = false
|
||||
|
||||
do {
|
||||
do {
|
||||
|
||||
try context.save()
|
||||
try context.save()
|
||||
|
||||
if meshLogging { MeshLogger.log("💾 Saved a new message for \(newMessage.messageId)") }
|
||||
|
||||
if newMessage.toUser != nil && newMessage.toUser!.num == broadcastNodeNum || connectedNode == newMessage.toUser!.num {
|
||||
if meshLogging { MeshLogger.log("💾 Saved a new message for \(newMessage.messageId)") }
|
||||
|
||||
messageSaved = true
|
||||
|
||||
} catch {
|
||||
|
||||
context.rollback()
|
||||
|
||||
let nsError = error as NSError
|
||||
print("💥 Failed to save new MessageEntity \(nsError)")
|
||||
}
|
||||
do {
|
||||
|
||||
if messageSaved && (newMessage.toUser != nil && newMessage.toUser!.num == broadcastNodeNum || connectedNode == newMessage.toUser!.num) {
|
||||
|
||||
// Create an iOS Notification for the received message and schedule it immediately
|
||||
let manager = LocalNotificationManager()
|
||||
|
|
@ -942,19 +955,15 @@ func textMessageAppPacket(packet: MeshPacket, connectedNode: Int64, meshLogging:
|
|||
subtitle: "AKA \(newMessage.fromUser?.shortName ?? "???")",
|
||||
content: messageText)
|
||||
]
|
||||
manager.schedule()
|
||||
if meshLogging { MeshLogger.log("💬 iOS Notification Scheduled for text message from \(newMessage.fromUser?.longName ?? "Unknown") \(messageText)") }
|
||||
|
||||
}
|
||||
|
||||
manager.schedule()
|
||||
if meshLogging { MeshLogger.log("💬 iOS Notification Scheduled for text message from \(newMessage.fromUser?.longName ?? "Unknown") \(messageText)") }
|
||||
}
|
||||
|
||||
} catch {
|
||||
|
||||
} catch {
|
||||
|
||||
context.rollback()
|
||||
|
||||
let nsError = error as NSError
|
||||
print("💥 Failed to save new MessageEntity \(nsError)")
|
||||
}
|
||||
|
||||
|
||||
} catch {
|
||||
|
||||
print("💥 Fetch Message To and From Users Error")
|
||||
|
|
|
|||
|
|
@ -18,6 +18,8 @@ struct Connect: View {
|
|||
@Environment(\.managedObjectContext) var context
|
||||
@EnvironmentObject var bleManager: BLEManager
|
||||
@EnvironmentObject var userSettings: UserSettings
|
||||
|
||||
@State var initialLoad: Bool = true
|
||||
|
||||
@State var isPreferredRadio: Bool = false
|
||||
|
||||
|
|
@ -269,10 +271,22 @@ struct Connect: View {
|
|||
}
|
||||
.navigationViewStyle(StackNavigationViewStyle())
|
||||
.onAppear(perform: {
|
||||
|
||||
if initialLoad {
|
||||
|
||||
self.bleManager.context = context
|
||||
self.bleManager.userSettings = userSettings
|
||||
|
||||
self.bleManager.context = context
|
||||
self.bleManager.userSettings = userSettings
|
||||
|
||||
// Ask for notification permission
|
||||
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { success, error in
|
||||
if success {
|
||||
print("All set!")
|
||||
} else if let error = error {
|
||||
print(error.localizedDescription)
|
||||
}
|
||||
}
|
||||
initialLoad = false
|
||||
}
|
||||
if self.bleManager.connectedPeripheral != nil && userSettings.preferredPeripheralId == self.bleManager.connectedPeripheral.peripheral.identifier.uuidString {
|
||||
isPreferredRadio = true
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue