mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-25 20:45:19 +00:00
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:
@@ -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
|
||||||
|
|||||||
@@ -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" {
|
||||||
|
// Skip empty or whitespace-only messages
|
||||||
|
if !finalMessage.content.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
|
||||||
channelMessages[channel]?.append(finalMessage)
|
channelMessages[channel]?.append(finalMessage)
|
||||||
channelMessages[channel]?.sort { $0.timestamp < $1.timestamp }
|
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,9 +2749,12 @@ 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
|
||||||
|
// Skip empty or whitespace-only messages
|
||||||
|
if !finalMessage.content.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
|
||||||
channelMessages[channel]?.append(finalMessage)
|
channelMessages[channel]?.append(finalMessage)
|
||||||
channelMessages[channel]?.sort { $0.timestamp < $1.timestamp }
|
channelMessages[channel]?.sort { $0.timestamp < $1.timestamp }
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// System message - always add
|
// System message - always add
|
||||||
channelMessages[channel]?.append(finalMessage)
|
channelMessages[channel]?.append(finalMessage)
|
||||||
@@ -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" {
|
||||||
|
// Skip empty or whitespace-only messages
|
||||||
|
if !finalMessage.content.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
|
||||||
messages.append(finalMessage)
|
messages.append(finalMessage)
|
||||||
// Sort messages by timestamp to ensure proper ordering
|
// Sort messages by timestamp to ensure proper ordering
|
||||||
messages.sort { $0.timestamp < $1.timestamp }
|
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,9 +2834,12 @@ 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
|
||||||
|
// Skip empty or whitespace-only messages
|
||||||
|
if !finalMessage.content.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
|
||||||
messages.append(finalMessage)
|
messages.append(finalMessage)
|
||||||
messages.sort { $0.timestamp < $1.timestamp }
|
messages.sort { $0.timestamp < $1.timestamp }
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// System message - always add
|
// System message - always add
|
||||||
messages.append(finalMessage)
|
messages.append(finalMessage)
|
||||||
|
|||||||
Reference in New Issue
Block a user