fix: prevent phantom empty messages during sync

- Add content validation to skip empty or whitespace-only messages
- Apply validation in both channel and regular message handling
- Add validation at retry service level to prevent queuing empty messages
- This fixes the phantom space issue between synced messages
This commit is contained in:
Nelson Campos
2025-07-07 23:36:10 -03:00
parent 9c60d46745
commit a3fa7a892f
2 changed files with 26 additions and 9 deletions
@@ -61,6 +61,11 @@ class MessageRetryService {
originalMessageID: String? = nil, originalMessageID: String? = nil,
originalTimestamp: Date? = nil originalTimestamp: Date? = nil
) { ) {
// Don't queue empty or whitespace-only messages
guard !content.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty else {
return
}
// Don't queue if we're at capacity // Don't queue if we're at capacity
guard retryQueue.count < maxQueueSize else { guard retryQueue.count < maxQueueSize else {
return return
+21 -9
View File
@@ -2727,8 +2727,11 @@ extension ChatViewModel: BitchatDelegate {
// Check if this is our own message being echoed back // Check if this is our own message being echoed back
if finalMessage.sender != nickname && finalMessage.sender != "system" { if finalMessage.sender != nickname && finalMessage.sender != "system" {
channelMessages[channel]?.append(finalMessage) // Skip empty or whitespace-only messages
channelMessages[channel]?.sort { $0.timestamp < $1.timestamp } if !finalMessage.content.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
channelMessages[channel]?.append(finalMessage)
channelMessages[channel]?.sort { $0.timestamp < $1.timestamp }
}
} else if finalMessage.sender != "system" { } else if finalMessage.sender != "system" {
// Our own message - check if we already have it (by ID and content) // Our own message - check if we already have it (by ID and content)
let messageExists = channelMessages[channel]?.contains { existingMsg in let messageExists = channelMessages[channel]?.contains { existingMsg in
@@ -2746,8 +2749,11 @@ extension ChatViewModel: BitchatDelegate {
} ?? false } ?? false
if !messageExists { if !messageExists {
// This is a message we sent from another device or it's missing locally // This is a message we sent from another device or it's missing locally
channelMessages[channel]?.append(finalMessage) // Skip empty or whitespace-only messages
channelMessages[channel]?.sort { $0.timestamp < $1.timestamp } if !finalMessage.content.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
channelMessages[channel]?.append(finalMessage)
channelMessages[channel]?.sort { $0.timestamp < $1.timestamp }
}
} }
} else { } else {
// System message - always add // System message - always add
@@ -2805,9 +2811,12 @@ extension ChatViewModel: BitchatDelegate {
// Check if this is our own message being echoed back // Check if this is our own message being echoed back
if finalMessage.sender != nickname && finalMessage.sender != "system" { if finalMessage.sender != nickname && finalMessage.sender != "system" {
messages.append(finalMessage) // Skip empty or whitespace-only messages
// Sort messages by timestamp to ensure proper ordering if !finalMessage.content.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
messages.sort { $0.timestamp < $1.timestamp } messages.append(finalMessage)
// Sort messages by timestamp to ensure proper ordering
messages.sort { $0.timestamp < $1.timestamp }
}
} else if finalMessage.sender != "system" { } else if finalMessage.sender != "system" {
// Our own message - check if we already have it (by ID and content) // Our own message - check if we already have it (by ID and content)
let messageExists = messages.contains { existingMsg in let messageExists = messages.contains { existingMsg in
@@ -2825,8 +2834,11 @@ extension ChatViewModel: BitchatDelegate {
} }
if !messageExists { if !messageExists {
// This is a message we sent from another device or it's missing locally // This is a message we sent from another device or it's missing locally
messages.append(finalMessage) // Skip empty or whitespace-only messages
messages.sort { $0.timestamp < $1.timestamp } if !finalMessage.content.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
messages.append(finalMessage)
messages.sort { $0.timestamp < $1.timestamp }
}
} }
} else { } else {
// System message - always add // System message - always add