Add debugging and fix read receipts for messages without delivery status

- Add detailed logging to track read receipt generation
- Handle messages that don't have delivery status (older messages)
- Send read receipts for all unread messages when opening chat
This commit is contained in:
jack
2025-07-06 22:14:41 +02:00
parent 6a37c2cb0c
commit d162a89ac2
3 changed files with 142 additions and 1 deletions
+20 -1
View File
@@ -896,12 +896,19 @@ class ChatViewModel: ObservableObject {
}
private func markPrivateMessagesAsRead(from peerID: String) {
guard let messages = privateChats[peerID] else { return }
guard let messages = privateChats[peerID] else {
print("[Delivery] No messages found for peer \(peerID)")
return
}
print("[Delivery] Checking \(messages.count) messages from peer \(peerID) for read receipts")
// Find messages from the peer that haven't been read yet
for message in messages {
// Only send read receipts for messages from the other peer (not our own)
// and only if the status is delivered (not already read)
print("[Delivery] Message \(message.id) from \(message.sender), senderPeerID: \(message.senderPeerID ?? "nil"), status: \(message.deliveryStatus?.displayText ?? "none")")
if message.senderPeerID == peerID {
if let status = message.deliveryStatus {
switch status {
@@ -916,11 +923,23 @@ class ChatViewModel: ObservableObject {
print("[Delivery] Sending read receipt for message \(message.id)")
case .read:
// Already read, no need to send another receipt
print("[Delivery] Message \(message.id) already marked as read")
break
default:
// Message not yet delivered, can't mark as read
print("[Delivery] Message \(message.id) has status \(status.displayText), not sending read receipt")
break
}
} else {
// No delivery status - this might be an older message
// Send read receipt anyway for backwards compatibility
print("[Delivery] Message \(message.id) has no delivery status, sending read receipt anyway")
let receipt = ReadReceipt(
originalMessageID: message.id,
readerID: meshService.myPeerID,
readerNickname: nickname
)
meshService.sendReadReceipt(receipt, to: peerID)
}
}
}