fix timestamps

This commit is contained in:
callebtc
2025-08-28 16:58:27 +02:00
parent 6cd91fe373
commit 50b97348b2
5 changed files with 7 additions and 13 deletions
@@ -88,12 +88,12 @@ class MessageHandler(private val myPeerID: String) {
return return
} }
// Create BitchatMessage - use local system time for incoming messages // Create BitchatMessage - preserve source packet timestamp
val message = BitchatMessage( val message = BitchatMessage(
id = privateMessage.messageID, id = privateMessage.messageID,
sender = delegate?.getPeerNickname(peerID) ?: "Unknown", sender = delegate?.getPeerNickname(peerID) ?: "Unknown",
content = privateMessage.content, content = privateMessage.content,
timestamp = java.util.Date(), // Use local system time instead of packet timestamp timestamp = java.util.Date(packet.timestamp.toLong()),
isRelay = false, isRelay = false,
originalSender = null, originalSender = null,
isPrivate = true, isPrivate = true,
@@ -343,7 +343,7 @@ class MessageHandler(private val myPeerID: String) {
sender = delegate?.getPeerNickname(peerID) ?: "unknown", sender = delegate?.getPeerNickname(peerID) ?: "unknown",
content = String(packet.payload, Charsets.UTF_8), content = String(packet.payload, Charsets.UTF_8),
senderPeerID = peerID, senderPeerID = peerID,
timestamp = Date() timestamp = Date(packet.timestamp.toLong())
) )
delegate?.onMessageReceived(message) delegate?.onMessageReceived(message)
@@ -369,7 +369,7 @@ class MessageHandler(private val myPeerID: String) {
sender = delegate?.getPeerNickname(peerID) ?: "unknown", sender = delegate?.getPeerNickname(peerID) ?: "unknown",
content = String(packet.payload, Charsets.UTF_8), content = String(packet.payload, Charsets.UTF_8),
senderPeerID = peerID, senderPeerID = peerID,
timestamp = Date() timestamp = Date(packet.timestamp.toLong())
) )
delegate?.onMessageReceived(message) delegate?.onMessageReceived(message)
@@ -680,7 +680,6 @@ class NostrGeohashService(
private fun storeGeohashMessage(geohash: String, message: BitchatMessage) { private fun storeGeohashMessage(geohash: String, message: BitchatMessage) {
val messages = geohashMessageHistory.getOrPut(geohash) { mutableListOf() } val messages = geohashMessageHistory.getOrPut(geohash) { mutableListOf() }
messages.add(message) messages.add(message)
messages.sortBy { it.timestamp }
// Limit message history to prevent memory issues // Limit message history to prevent memory issues
if (messages.size > maxGeohashMessages) { if (messages.size > maxGeohashMessages) {
@@ -1234,8 +1233,8 @@ class NostrGeohashService(
val senderName = displayNameForNostrPubkeyUI(event.pubkey) val senderName = displayNameForNostrPubkeyUI(event.pubkey)
val content = event.content val content = event.content
// Use local time instead of Nostr event time for consistent message ordering // Preserve Nostr event time to avoid reordering
val messageTimestamp = Date() val messageTimestamp = Date(event.createdAt.toLong() * 1000L)
// Note: mentions parsing needs peer nicknames parameter // Note: mentions parsing needs peer nicknames parameter
// val mentions = messageManager.parseMentions(content, peerNicknames, nickname) // val mentions = messageManager.parseMentions(content, peerNicknames, nickname)
@@ -60,7 +60,7 @@ object ConversationAliasResolver {
} }
} }
if (didMerge) { if (didMerge) {
targetList.sortBy { it.timestamp } // Preserve arrival order; do not sort by timestamp
currentChats[targetPeerID] = targetList currentChats[targetPeerID] = targetList
state.setPrivateChats(currentChats) state.setPrivateChats(currentChats)
@@ -21,7 +21,6 @@ class MessageManager(private val state: ChatState) {
fun addMessage(message: BitchatMessage) { fun addMessage(message: BitchatMessage) {
val currentMessages = state.getMessagesValue().toMutableList() val currentMessages = state.getMessagesValue().toMutableList()
currentMessages.add(message) currentMessages.add(message)
currentMessages.sortBy { it.timestamp }
state.setMessages(currentMessages) state.setMessages(currentMessages)
} }
@@ -39,7 +38,6 @@ class MessageManager(private val state: ChatState) {
val channelMessageList = currentChannelMessages[channel]?.toMutableList() ?: mutableListOf() val channelMessageList = currentChannelMessages[channel]?.toMutableList() ?: mutableListOf()
channelMessageList.add(message) channelMessageList.add(message)
channelMessageList.sortBy { it.timestamp }
currentChannelMessages[channel] = channelMessageList currentChannelMessages[channel] = channelMessageList
state.setChannelMessages(currentChannelMessages) state.setChannelMessages(currentChannelMessages)
@@ -83,7 +81,6 @@ class MessageManager(private val state: ChatState) {
val chatMessages = currentPrivateChats[peerID]?.toMutableList() ?: mutableListOf() val chatMessages = currentPrivateChats[peerID]?.toMutableList() ?: mutableListOf()
chatMessages.add(message) chatMessages.add(message)
chatMessages.sortBy { it.timestamp }
currentPrivateChats[peerID] = chatMessages currentPrivateChats[peerID] = chatMessages
state.setPrivateChats(currentPrivateChats) state.setPrivateChats(currentPrivateChats)
@@ -103,7 +100,6 @@ class MessageManager(private val state: ChatState) {
} }
val chatMessages = currentPrivateChats[peerID]?.toMutableList() ?: mutableListOf() val chatMessages = currentPrivateChats[peerID]?.toMutableList() ?: mutableListOf()
chatMessages.add(message) chatMessages.add(message)
chatMessages.sortBy { it.timestamp }
currentPrivateChats[peerID] = chatMessages currentPrivateChats[peerID] = chatMessages
state.setPrivateChats(currentPrivateChats) state.setPrivateChats(currentPrivateChats)
} }
@@ -501,7 +501,6 @@ class PrivateChatManager(
} }
if (didMerge) { if (didMerge) {
targetList.sortBy { it.timestamp }
currentChats[targetPeerID] = targetList currentChats[targetPeerID] = targetList
state.setPrivateChats(currentChats) state.setPrivateChats(currentChats)