diff --git a/bitchat/Models/ReadReceipt.swift b/bitchat/Models/ReadReceipt.swift index 0884605d..402527b7 100644 --- a/bitchat/Models/ReadReceipt.swift +++ b/bitchat/Models/ReadReceipt.swift @@ -11,11 +11,11 @@ import Foundation struct ReadReceipt: Codable { let originalMessageID: String let receiptID: String - var readerID: String // Who read it + var readerID: PeerID // Who read it let readerNickname: String let timestamp: Date - init(originalMessageID: String, readerID: String, readerNickname: String) { + init(originalMessageID: String, readerID: PeerID, readerNickname: String) { self.originalMessageID = originalMessageID self.receiptID = UUID().uuidString self.readerID = readerID @@ -24,7 +24,7 @@ struct ReadReceipt: Codable { } // For binary decoding - private init(originalMessageID: String, receiptID: String, readerID: String, readerNickname: String, timestamp: Date) { + private init(originalMessageID: String, receiptID: String, readerID: PeerID, readerNickname: String, timestamp: Date) { self.originalMessageID = originalMessageID self.receiptID = receiptID self.readerID = readerID @@ -48,7 +48,7 @@ struct ReadReceipt: Codable { data.appendUUID(receiptID) // ReaderID as 8-byte hex string var readerData = Data() - var tempID = readerID + var tempID = readerID.id while tempID.count >= 2 && readerData.count < 8 { let hexByte = String(tempID.prefix(2)) if let byte = UInt8(hexByte, radix: 16) { @@ -78,8 +78,8 @@ struct ReadReceipt: Codable { let receiptID = dataCopy.readUUID(at: &offset) else { return nil } guard let readerIDData = dataCopy.readFixedBytes(at: &offset, count: 8) else { return nil } - let readerID = readerIDData.hexEncodedString() - guard PeerID(str: readerID).isValid else { return nil } + let readerID = PeerID(hexData: readerIDData) + guard readerID.isValid else { return nil } guard let timestamp = dataCopy.readDate(at: &offset), InputValidator.validateTimestamp(timestamp), diff --git a/bitchat/Services/PrivateChatManager.swift b/bitchat/Services/PrivateChatManager.swift index 4214519b..af8c806d 100644 --- a/bitchat/Services/PrivateChatManager.swift +++ b/bitchat/Services/PrivateChatManager.swift @@ -105,7 +105,7 @@ final class PrivateChatManager: ObservableObject { // Create read receipt using the simplified method let receipt = ReadReceipt( originalMessageID: message.id, - readerID: meshService?.myPeerID.id ?? "", + readerID: meshService?.myPeerID ?? PeerID(str: ""), readerNickname: meshService?.myNickname ?? "" ) diff --git a/bitchat/ViewModels/ChatViewModel.swift b/bitchat/ViewModels/ChatViewModel.swift index da8ef964..d695c50a 100644 --- a/bitchat/ViewModels/ChatViewModel.swift +++ b/bitchat/ViewModels/ChatViewModel.swift @@ -3493,7 +3493,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate { if !sentReadReceipts.contains(message.id) { // Use stable Noise key hex if available; else fall back to peerID let recipPeer = peerID.isHex ? peerID : (unifiedPeerService.getPeer(by: peerID)?.peerID ?? peerID) - let receipt = ReadReceipt(originalMessageID: message.id, readerID: meshService.myPeerID.id, readerNickname: nickname) + let receipt = ReadReceipt(originalMessageID: message.id, readerID: meshService.myPeerID, readerNickname: nickname) messageRouter.sendReadReceipt(receipt, to: recipPeer) sentReadReceipts.insert(message.id) } @@ -5839,7 +5839,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate { } if !sentReadReceipts.contains(message.id) { if let key { - let receipt = ReadReceipt(originalMessageID: message.id, readerID: meshService.myPeerID.id, readerNickname: nickname) + let receipt = ReadReceipt(originalMessageID: message.id, readerID: meshService.myPeerID, readerNickname: nickname) SecureLogger.debug("Viewing chat; sending READ ack for \(message.id.prefix(8))… via router", category: .session) messageRouter.sendReadReceipt(receipt, to: PeerID(hexData: key)) sentReadReceipts.insert(message.id) @@ -6282,7 +6282,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate { if !sentReadReceipts.contains(message.id) { let receipt = ReadReceipt( originalMessageID: message.id, - readerID: meshService.myPeerID.id, + readerID: meshService.myPeerID, readerNickname: nickname )