mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-25 02:05:19 +00:00
Add debugging logs for delivery confirmation
- Track message IDs through the delivery process - Log ACK generation and processing - Log status updates in ChatViewModel - Log read receipt generation and sending
This commit is contained in:
@@ -71,6 +71,8 @@ class DeliveryTracker {
|
||||
// Don't track broadcasts or certain message types
|
||||
guard message.isPrivate || message.room != nil else { return }
|
||||
|
||||
print("[DeliveryTracker] Tracking message \(message.id) to \(recipientNickname)")
|
||||
|
||||
let delivery = PendingDelivery(
|
||||
messageID: message.id,
|
||||
sentAt: Date(),
|
||||
@@ -101,13 +103,19 @@ class DeliveryTracker {
|
||||
pendingLock.lock()
|
||||
defer { pendingLock.unlock() }
|
||||
|
||||
print("[DeliveryTracker] Processing ACK for message \(ack.originalMessageID) from \(ack.recipientNickname)")
|
||||
|
||||
// Prevent duplicate ACK processing
|
||||
guard !receivedAckIDs.contains(ack.ackID) else { return }
|
||||
guard !receivedAckIDs.contains(ack.ackID) else {
|
||||
print("[DeliveryTracker] Already processed ACK \(ack.ackID)")
|
||||
return
|
||||
}
|
||||
receivedAckIDs.insert(ack.ackID)
|
||||
|
||||
// Find the pending delivery
|
||||
guard var delivery = pendingDeliveries[ack.originalMessageID] else {
|
||||
// Message might have already been delivered or timed out
|
||||
print("[DeliveryTracker] No pending delivery found for message \(ack.originalMessageID)")
|
||||
return
|
||||
}
|
||||
|
||||
@@ -148,6 +156,8 @@ class DeliveryTracker {
|
||||
guard !sentAckIDs.contains(message.id) else { return nil }
|
||||
sentAckIDs.insert(message.id)
|
||||
|
||||
print("[DeliveryTracker] Generating ACK for message \(message.id) from \(message.sender)")
|
||||
|
||||
return DeliveryAck(
|
||||
originalMessageID: message.id,
|
||||
recipientID: myPeerID,
|
||||
|
||||
@@ -902,15 +902,26 @@ class ChatViewModel: ObservableObject {
|
||||
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)
|
||||
if message.senderPeerID == peerID,
|
||||
case .delivered = message.deliveryStatus {
|
||||
// Create and send read receipt
|
||||
let receipt = ReadReceipt(
|
||||
originalMessageID: message.id,
|
||||
readerID: meshService.myPeerID,
|
||||
readerNickname: nickname
|
||||
)
|
||||
meshService.sendReadReceipt(receipt, to: peerID)
|
||||
if message.senderPeerID == peerID {
|
||||
if let status = message.deliveryStatus {
|
||||
switch status {
|
||||
case .delivered:
|
||||
// Create and send read receipt
|
||||
let receipt = ReadReceipt(
|
||||
originalMessageID: message.id,
|
||||
readerID: meshService.myPeerID,
|
||||
readerNickname: nickname
|
||||
)
|
||||
meshService.sendReadReceipt(receipt, to: peerID)
|
||||
print("[Delivery] Sending read receipt for message \(message.id)")
|
||||
case .read:
|
||||
// Already read, no need to send another receipt
|
||||
break
|
||||
default:
|
||||
// Message not yet delivered, can't mark as read
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1779,14 +1790,13 @@ extension ChatViewModel: BitchatDelegate {
|
||||
unreadPrivateMessages.remove(peerID)
|
||||
|
||||
// Send read receipt immediately since we're viewing the chat
|
||||
if message.deliveryStatus != nil {
|
||||
let receipt = ReadReceipt(
|
||||
originalMessageID: message.id,
|
||||
readerID: meshService.myPeerID,
|
||||
readerNickname: nickname
|
||||
)
|
||||
meshService.sendReadReceipt(receipt, to: peerID)
|
||||
}
|
||||
let receipt = ReadReceipt(
|
||||
originalMessageID: message.id,
|
||||
readerID: meshService.myPeerID,
|
||||
readerNickname: nickname
|
||||
)
|
||||
meshService.sendReadReceipt(receipt, to: peerID)
|
||||
print("[Delivery] Sending immediate read receipt for message \(message.id) from \(message.sender)")
|
||||
}
|
||||
} else if message.sender == nickname {
|
||||
// Our own message that was echoed back - ignore it since we already added it locally
|
||||
@@ -2080,11 +2090,13 @@ extension ChatViewModel: BitchatDelegate {
|
||||
|
||||
func didReceiveDeliveryAck(_ ack: DeliveryAck) {
|
||||
// Find the message and update its delivery status
|
||||
print("[Delivery] Received ACK for message \(ack.originalMessageID) from \(ack.recipientNickname)")
|
||||
updateMessageDeliveryStatus(ack.originalMessageID, status: .delivered(to: ack.recipientNickname, at: ack.timestamp))
|
||||
}
|
||||
|
||||
func didReceiveReadReceipt(_ receipt: ReadReceipt) {
|
||||
// Find the message and update its read status
|
||||
print("[Delivery] Received READ receipt for message \(receipt.originalMessageID) from \(receipt.readerNickname)")
|
||||
updateMessageDeliveryStatus(receipt.originalMessageID, status: .read(by: receipt.readerNickname, at: receipt.timestamp))
|
||||
}
|
||||
|
||||
@@ -2093,11 +2105,14 @@ extension ChatViewModel: BitchatDelegate {
|
||||
}
|
||||
|
||||
private func updateMessageDeliveryStatus(_ messageID: String, status: DeliveryStatus) {
|
||||
print("[Delivery] Updating message \(messageID) to status: \(status)")
|
||||
|
||||
// Update in main messages
|
||||
if let index = messages.firstIndex(where: { $0.id == messageID }) {
|
||||
var updatedMessage = messages[index]
|
||||
updatedMessage.deliveryStatus = status
|
||||
messages[index] = updatedMessage
|
||||
print("[Delivery] Updated message in main messages")
|
||||
}
|
||||
|
||||
// Update in private chats
|
||||
@@ -2107,6 +2122,7 @@ extension ChatViewModel: BitchatDelegate {
|
||||
updatedMessage.deliveryStatus = status
|
||||
chatMessages[index] = updatedMessage
|
||||
privateChats[peerID] = chatMessages
|
||||
print("[Delivery] Updated message in private chat with \(peerID)")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user