mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-26 19:25:23 +00:00
Fix read receipts using wrong peer ID
- Read receipts were being sent to the current ephemeral peer ID instead of the message's senderPeerID - This caused read receipts to be lost when peer IDs changed between sessions - Now using message.senderPeerID consistently for all read receipt sending - Added detailed logging to track which peer ID receives the read receipt
This commit is contained in:
@@ -708,6 +708,7 @@ class BluetoothMeshService: NSObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func sendReadReceipt(_ receipt: ReadReceipt, to recipientID: String) {
|
func sendReadReceipt(_ receipt: ReadReceipt, to recipientID: String) {
|
||||||
|
print("[DeliveryTracker] Sending read receipt for message \(receipt.originalMessageID) to \(recipientID)")
|
||||||
messageQueue.async { [weak self] in
|
messageQueue.async { [weak self] in
|
||||||
guard let self = self else { return }
|
guard let self = self else { return }
|
||||||
|
|
||||||
@@ -737,6 +738,7 @@ class BluetoothMeshService: NSObject {
|
|||||||
ttl: 3 // Limited TTL for receipts
|
ttl: 3 // Limited TTL for receipts
|
||||||
)
|
)
|
||||||
|
|
||||||
|
print("[DeliveryTracker] Broadcasting read receipt packet to \(recipientID)")
|
||||||
// Send immediately without delay
|
// Send immediately without delay
|
||||||
self.broadcastPacket(packet)
|
self.broadcastPacket(packet)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -914,13 +914,18 @@ class ChatViewModel: ObservableObject {
|
|||||||
switch status {
|
switch status {
|
||||||
case .delivered:
|
case .delivered:
|
||||||
// Create and send read receipt
|
// Create and send read receipt
|
||||||
let receipt = ReadReceipt(
|
// Use the senderPeerID from the message to ensure it goes to the right peer
|
||||||
originalMessageID: message.id,
|
if let messageSenderID = message.senderPeerID {
|
||||||
readerID: meshService.myPeerID,
|
let receipt = ReadReceipt(
|
||||||
readerNickname: nickname
|
originalMessageID: message.id,
|
||||||
)
|
readerID: meshService.myPeerID,
|
||||||
meshService.sendReadReceipt(receipt, to: peerID)
|
readerNickname: nickname
|
||||||
print("[Delivery] Sending read receipt for message \(message.id)")
|
)
|
||||||
|
meshService.sendReadReceipt(receipt, to: messageSenderID)
|
||||||
|
print("[Delivery] Sending read receipt for message \(message.id) to peer \(messageSenderID)")
|
||||||
|
} else {
|
||||||
|
print("[Delivery] Cannot send read receipt for message \(message.id) - no senderPeerID")
|
||||||
|
}
|
||||||
case .read:
|
case .read:
|
||||||
// Already read, no need to send another receipt
|
// Already read, no need to send another receipt
|
||||||
print("[Delivery] Message \(message.id) already marked as read")
|
print("[Delivery] Message \(message.id) already marked as read")
|
||||||
@@ -934,12 +939,17 @@ class ChatViewModel: ObservableObject {
|
|||||||
// No delivery status - this might be an older message
|
// No delivery status - this might be an older message
|
||||||
// Send read receipt anyway for backwards compatibility
|
// Send read receipt anyway for backwards compatibility
|
||||||
print("[Delivery] Message \(message.id) has no delivery status, sending read receipt anyway")
|
print("[Delivery] Message \(message.id) has no delivery status, sending read receipt anyway")
|
||||||
let receipt = ReadReceipt(
|
if let messageSenderID = message.senderPeerID {
|
||||||
originalMessageID: message.id,
|
let receipt = ReadReceipt(
|
||||||
readerID: meshService.myPeerID,
|
originalMessageID: message.id,
|
||||||
readerNickname: nickname
|
readerID: meshService.myPeerID,
|
||||||
)
|
readerNickname: nickname
|
||||||
meshService.sendReadReceipt(receipt, to: peerID)
|
)
|
||||||
|
meshService.sendReadReceipt(receipt, to: messageSenderID)
|
||||||
|
print("[Delivery] Sending read receipt for old message \(message.id) to peer \(messageSenderID)")
|
||||||
|
} else {
|
||||||
|
print("[Delivery] Cannot send read receipt for old message \(message.id) - no senderPeerID")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1816,13 +1826,18 @@ extension ChatViewModel: BitchatDelegate {
|
|||||||
unreadPrivateMessages.remove(peerID)
|
unreadPrivateMessages.remove(peerID)
|
||||||
|
|
||||||
// Send read receipt immediately since we're viewing the chat
|
// Send read receipt immediately since we're viewing the chat
|
||||||
let receipt = ReadReceipt(
|
// Use the senderPeerID from the message, not the current peerID
|
||||||
originalMessageID: message.id,
|
if let messageSenderID = message.senderPeerID {
|
||||||
readerID: meshService.myPeerID,
|
let receipt = ReadReceipt(
|
||||||
readerNickname: nickname
|
originalMessageID: message.id,
|
||||||
)
|
readerID: meshService.myPeerID,
|
||||||
meshService.sendReadReceipt(receipt, to: peerID)
|
readerNickname: nickname
|
||||||
print("[Delivery] Sending immediate read receipt for message \(message.id) from \(message.sender)")
|
)
|
||||||
|
meshService.sendReadReceipt(receipt, to: messageSenderID)
|
||||||
|
print("[Delivery] Sending immediate read receipt for message \(message.id) from \(message.sender) to peer \(messageSenderID)")
|
||||||
|
} else {
|
||||||
|
print("[Delivery] Cannot send read receipt - message has no senderPeerID")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if message.sender == nickname {
|
} else if message.sender == nickname {
|
||||||
// Our own message that was echoed back - ignore it since we already added it locally
|
// Our own message that was echoed back - ignore it since we already added it locally
|
||||||
|
|||||||
Reference in New Issue
Block a user