From f4c4df81821289de56ee596dca20313065cd762f Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Sat, 4 Jun 2022 07:41:52 -0700 Subject: [PATCH] Fix message view rendering issues for acts and incoming messages --- Meshtastic Client.xcodeproj/project.pbxproj | 4 +++ MeshtasticClient/Helpers/BLEManager.swift | 2 ++ MeshtasticClient/Helpers/MeshPackets.swift | 2 ++ .../Persistence/UserEntityExtension.swift | 16 ++++++++++++ MeshtasticClient/Protobufs/config.pb.swift | 26 ------------------- .../Views/Messages/UserMessageList.swift | 6 ++--- 6 files changed, 26 insertions(+), 30 deletions(-) create mode 100644 MeshtasticClient/Persistence/UserEntityExtension.swift diff --git a/Meshtastic Client.xcodeproj/project.pbxproj b/Meshtastic Client.xcodeproj/project.pbxproj index c8959e3b..2a7c36dd 100644 --- a/Meshtastic Client.xcodeproj/project.pbxproj +++ b/Meshtastic Client.xcodeproj/project.pbxproj @@ -59,6 +59,7 @@ DDC3B274283F411B00AC321C /* LastHeardText.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDC3B273283F411B00AC321C /* LastHeardText.swift */; }; DDC4D568275499A500A4208E /* Persistence.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDC4D567275499A500A4208E /* Persistence.swift */; }; DDD94A502845C8F5004A87A0 /* DateTimeText.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDD94A4F2845C8F5004A87A0 /* DateTimeText.swift */; }; + DDD9E4E4284B208E003777C5 /* UserEntityExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDD9E4E3284B208E003777C5 /* UserEntityExtension.swift */; }; DDF924CA26FBB953009FE055 /* ConnectedDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDF924C926FBB953009FE055 /* ConnectedDevice.swift */; }; /* End PBXBuildFile section */ @@ -140,6 +141,7 @@ DDC4D567275499A500A4208E /* Persistence.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Persistence.swift; sourceTree = ""; }; DDCA31312826009C00207175 /* PassKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PassKit.framework; path = System/Library/Frameworks/PassKit.framework; sourceTree = SDKROOT; }; DDD94A4F2845C8F5004A87A0 /* DateTimeText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateTimeText.swift; sourceTree = ""; }; + DDD9E4E3284B208E003777C5 /* UserEntityExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserEntityExtension.swift; sourceTree = ""; }; DDF924C926FBB953009FE055 /* ConnectedDevice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectedDevice.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -384,6 +386,7 @@ children = ( DDC4D567275499A500A4208E /* Persistence.swift */, DD5394FD276BA0EF00AD86B1 /* PositionEntityExtension.swift */, + DDD9E4E3284B208E003777C5 /* UserEntityExtension.swift */, ); path = Persistence; sourceTree = ""; @@ -576,6 +579,7 @@ DD47E3D626F17ED900029299 /* CircleText.swift in Sources */, DDC2E18F26CE25FE0042C5E4 /* ContentView.swift in Sources */, DD17E5DE277D49D400010EC2 /* storeforward.pb.swift in Sources */, + DDD9E4E4284B208E003777C5 /* UserEntityExtension.swift in Sources */, C9A88B55278B503C00BD810A /* MapViewModule.swift in Sources */, DDAF8C6326ED0A230058C060 /* admin.pb.swift in Sources */, C9483F6D2773017500998F6B /* MapView.swift in Sources */, diff --git a/MeshtasticClient/Helpers/BLEManager.swift b/MeshtasticClient/Helpers/BLEManager.swift index ae9eb44d..5f0165d5 100644 --- a/MeshtasticClient/Helpers/BLEManager.swift +++ b/MeshtasticClient/Helpers/BLEManager.swift @@ -427,6 +427,8 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph if meshLoggingEnabled { MeshLogger.log("ℹ️ MESH PACKET received for Remote Hardware App UNHANDLED \(try! decodedInfo.packet.jsonString())") } case .positionApp: positionPacket(packet: decodedInfo.packet, meshLogging: meshLoggingEnabled, context: context!) + case .waypointApp: + if meshLoggingEnabled { MeshLogger.log("ℹ️ MESH PACKET received for Waypoint App UNHANDLED \(try! decodedInfo.packet.jsonString())") } case .nodeinfoApp: nodeInfoAppPacket(packet: decodedInfo.packet, meshLogging: meshLoggingEnabled, context: context!) case .routingApp: diff --git a/MeshtasticClient/Helpers/MeshPackets.swift b/MeshtasticClient/Helpers/MeshPackets.swift index 3ed4edad..e84abb0c 100644 --- a/MeshtasticClient/Helpers/MeshPackets.swift +++ b/MeshtasticClient/Helpers/MeshPackets.swift @@ -430,6 +430,8 @@ func routingPacket (packet: MeshPacket, meshLogging: Bool, context: NSManagedObj fetchedMessage!.ackSNR = packet.rxSnr fetchedMessage!.ackTimestamp = Int32(packet.rxTime) fetchedMessage!.objectWillChange.send() + fetchedMessage!.fromUser?.objectWillChange.send() + fetchedMessage!.toUser?.objectWillChange.send() } try context.save() diff --git a/MeshtasticClient/Persistence/UserEntityExtension.swift b/MeshtasticClient/Persistence/UserEntityExtension.swift new file mode 100644 index 00000000..23283eef --- /dev/null +++ b/MeshtasticClient/Persistence/UserEntityExtension.swift @@ -0,0 +1,16 @@ +// +// UserEntityExtension.swift +// MeshtasticClient +// +// Created by Garth Vander Houwen on 6/3/22. +// + +import Foundation + +extension UserEntity { + + var messageList: [MessageEntity] { + + self.value(forKey: "allMessages") as! [MessageEntity] + } +} diff --git a/MeshtasticClient/Protobufs/config.pb.swift b/MeshtasticClient/Protobufs/config.pb.swift index e411e8ea..4a1bff42 100644 --- a/MeshtasticClient/Protobufs/config.pb.swift +++ b/MeshtasticClient/Protobufs/config.pb.swift @@ -283,20 +283,6 @@ struct Config { /// window. var gpsAttemptTime: UInt32 = 0 - /// - /// Shall we accept 2D GPS fixes? By default, only 3D fixes are accepted - /// (during a 2D fix, altitude values are unreliable and will be excluded) - var gpsAccept2D: Bool = false - - /// - /// GPS maximum DOP accepted (dilution of precision) - /// Set a rejection threshold for GPS readings based on their precision, - /// relative to the GPS rated accuracy (which is typically ~3m) - /// Solutions above this value will be treated as retryable errors! - /// Useful range is between 1 - 64 (3m - <~200m) - /// By default (if zero), accept all GPS readings - var gpsMaxDop: UInt32 = 0 - /// /// Bit field of boolean configuration options for POSITION messages /// (bitwise OR of PositionFlags) @@ -1294,8 +1280,6 @@ extension Config.PositionConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageIm 5: .standard(proto: "gps_disabled"), 6: .standard(proto: "gps_update_interval"), 7: .standard(proto: "gps_attempt_time"), - 8: .standard(proto: "gps_accept_2d"), - 9: .standard(proto: "gps_max_dop"), 10: .standard(proto: "position_flags"), ] @@ -1311,8 +1295,6 @@ extension Config.PositionConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageIm case 5: try { try decoder.decodeSingularBoolField(value: &self.gpsDisabled) }() case 6: try { try decoder.decodeSingularUInt32Field(value: &self.gpsUpdateInterval) }() case 7: try { try decoder.decodeSingularUInt32Field(value: &self.gpsAttemptTime) }() - case 8: try { try decoder.decodeSingularBoolField(value: &self.gpsAccept2D) }() - case 9: try { try decoder.decodeSingularUInt32Field(value: &self.gpsMaxDop) }() case 10: try { try decoder.decodeSingularUInt32Field(value: &self.positionFlags) }() default: break } @@ -1338,12 +1320,6 @@ extension Config.PositionConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageIm if self.gpsAttemptTime != 0 { try visitor.visitSingularUInt32Field(value: self.gpsAttemptTime, fieldNumber: 7) } - if self.gpsAccept2D != false { - try visitor.visitSingularBoolField(value: self.gpsAccept2D, fieldNumber: 8) - } - if self.gpsMaxDop != 0 { - try visitor.visitSingularUInt32Field(value: self.gpsMaxDop, fieldNumber: 9) - } if self.positionFlags != 0 { try visitor.visitSingularUInt32Field(value: self.positionFlags, fieldNumber: 10) } @@ -1357,8 +1333,6 @@ extension Config.PositionConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageIm if lhs.gpsDisabled != rhs.gpsDisabled {return false} if lhs.gpsUpdateInterval != rhs.gpsUpdateInterval {return false} if lhs.gpsAttemptTime != rhs.gpsAttemptTime {return false} - if lhs.gpsAccept2D != rhs.gpsAccept2D {return false} - if lhs.gpsMaxDop != rhs.gpsMaxDop {return false} if lhs.positionFlags != rhs.positionFlags {return false} if lhs.unknownFields != rhs.unknownFields {return false} return true diff --git a/MeshtasticClient/Views/Messages/UserMessageList.swift b/MeshtasticClient/Views/Messages/UserMessageList.swift index 80ae8b81..e6abebef 100644 --- a/MeshtasticClient/Views/Messages/UserMessageList.swift +++ b/MeshtasticClient/Views/Messages/UserMessageList.swift @@ -40,20 +40,18 @@ struct UserMessageList: View { let hasTapbackSupport = minimumVersion.compare(firmwareVersion, options: .numeric) == .orderedAscending || minimumVersion.compare(firmwareVersion, options: .numeric) == .orderedSame VStack { - - let allMessages = user.value(forKey: "allMessages") as! [MessageEntity] ScrollViewReader { scrollView in ScrollView { - if allMessages.count > 0 { + if user.messageList.count > 0 { HStack{ // Padding at the top of the message list }.padding(.bottom) - ForEach( allMessages ) { (message: MessageEntity) in + ForEach( user.messageList ) { (message: MessageEntity) in let currentUser: Bool = (bleManager.connectedPeripheral == nil) ? false : ((bleManager.connectedPeripheral != nil && bleManager.connectedPeripheral.num == message.fromUser?.num) ? true : false )