From 4f7af1a4e8cee7708a7e9de847334316d0110ac4 Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Tue, 29 Aug 2023 08:48:28 -0700 Subject: [PATCH] Pseudo working read messages and order by most recently received message contacts --- Meshtastic/Helpers/BLEManager.swift | 3 +++ Meshtastic/Helpers/MeshPackets.swift | 1 + .../MeshtasticDataModelV17.xcdatamodel/contents | 4 ++-- Meshtastic/Persistence/UserEntityExtension.swift | 1 - Meshtastic/Views/Messages/Contacts.swift | 4 ++-- Meshtastic/Views/Messages/UserMessageList.swift | 4 ++-- 6 files changed, 10 insertions(+), 7 deletions(-) diff --git a/Meshtastic/Helpers/BLEManager.swift b/Meshtastic/Helpers/BLEManager.swift index 375bf513..03cd0bd9 100644 --- a/Meshtastic/Helpers/BLEManager.swift +++ b/Meshtastic/Helpers/BLEManager.swift @@ -705,6 +705,9 @@ class BLEManager: NSObject, CBPeripheralDelegate, MqttClientProxyManagerDelegate newMessage.receivedACK = false if toUserNum > 0 { newMessage.toUser = fetchedUsers.first(where: { $0.num == toUserNum }) + newMessage.toUser?.lastMessage = Date() + newMessage.read = true + newMessage.toUser?.objectWillChange.send() } newMessage.fromUser = fetchedUsers.first(where: { $0.num == fromUserNum }) newMessage.isEmoji = isEmoji diff --git a/Meshtastic/Helpers/MeshPackets.swift b/Meshtastic/Helpers/MeshPackets.swift index 637b5bd9..642c9ed1 100644 --- a/Meshtastic/Helpers/MeshPackets.swift +++ b/Meshtastic/Helpers/MeshPackets.swift @@ -746,6 +746,7 @@ func textMessageAppPacket(packet: MeshPacket, connectedNode: Int64, context: NSM } newMessage.messagePayload = messageText newMessage.messagePayloadMarkdown = generateMessageMarkdown(message: messageText) + newMessage.fromUser?.lastMessage = Date() newMessage.fromUser?.objectWillChange.send() newMessage.toUser?.objectWillChange.send() diff --git a/Meshtastic/Meshtastic.xcdatamodeld/MeshtasticDataModelV17.xcdatamodel/contents b/Meshtastic/Meshtastic.xcdatamodeld/MeshtasticDataModelV17.xcdatamodel/contents index 4a6286e4..ce9aea5b 100644 --- a/Meshtastic/Meshtastic.xcdatamodeld/MeshtasticDataModelV17.xcdatamodel/contents +++ b/Meshtastic/Meshtastic.xcdatamodeld/MeshtasticDataModelV17.xcdatamodel/contents @@ -1,5 +1,5 @@ - + @@ -328,7 +328,7 @@ - + diff --git a/Meshtastic/Persistence/UserEntityExtension.swift b/Meshtastic/Persistence/UserEntityExtension.swift index 14cc6de1..ae4450ca 100644 --- a/Meshtastic/Persistence/UserEntityExtension.swift +++ b/Meshtastic/Persistence/UserEntityExtension.swift @@ -23,4 +23,3 @@ extension UserEntity { return unreadMessages.count } } - diff --git a/Meshtastic/Views/Messages/Contacts.swift b/Meshtastic/Views/Messages/Contacts.swift index 9a23cd74..6de47558 100644 --- a/Meshtastic/Views/Messages/Contacts.swift +++ b/Meshtastic/Views/Messages/Contacts.swift @@ -14,7 +14,7 @@ struct Contacts: View { @EnvironmentObject var bleManager: BLEManager @FetchRequest( - sortDescriptors: [NSSortDescriptor(key: "lastMessage", ascending: true)], + sortDescriptors: [NSSortDescriptor(key: "lastMessage", ascending: false)], animation: .default) private var users: FetchedResults @@ -151,6 +151,7 @@ struct Contacts: View { } } Section(header: Text("direct.messages")) { + ForEach(users) { (user: UserEntity) in let mostRecent = user.messageList.last @@ -169,7 +170,6 @@ struct Contacts: View { } CircleText(text: user.shortName ?? "???", color: Color(UIColor(hex: UInt32(user.num))), circleSize: 45, fontSize: (user.shortName ?? "???").isEmoji() ? 32 : (user.shortName?.count ?? 0 == 4 ? 14 : (user.shortName?.count ?? 0 == 3 ? 18 : 22)), brightness: 0.0, textColor: UIColor(hex: UInt32(user.num)).isLight() ? .black : .white) - .brightness(0.2) VStack(alignment: .leading){ HStack{ diff --git a/Meshtastic/Views/Messages/UserMessageList.swift b/Meshtastic/Views/Messages/UserMessageList.swift index afdbcc5e..c85d11d5 100644 --- a/Meshtastic/Views/Messages/UserMessageList.swift +++ b/Meshtastic/Views/Messages/UserMessageList.swift @@ -218,11 +218,11 @@ struct UserMessageList: View { } .onAppear { if !message.read { - print("\(message.messageId) read") message.read = true + message.toUser?.objectWillChange.send() do { try context.save() - deleteMessageId = 0 + print("Read message \(message.messageId) ") } catch { print("Failed to read message \(message.messageId)") }