fix: align OverlayViewModel message dedup with ChatViewModel
Removed the legacy isDup check (role+content+msgType) that could suppress multi_message items already seen as review items. Now deduplicates by message ID only and inserts at correct timestamp position, matching the fixed ChatViewModel behavior. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -80,20 +80,17 @@ class OverlayViewModel(
|
|||||||
chatRepository.observeMessages().collect { message ->
|
chatRepository.observeMessages().collect { message ->
|
||||||
_messages.update { list ->
|
_messages.update { list ->
|
||||||
val updated = list.toMutableList()
|
val updated = list.toMutableList()
|
||||||
val idx = updated.indexOfLast { it.id == message.id }
|
val existingIdx = updated.indexOfLast { it.id == message.id }
|
||||||
if (idx >= 0) {
|
if (existingIdx >= 0) {
|
||||||
updated[idx] = message
|
updated[existingIdx] = message
|
||||||
} else {
|
} else {
|
||||||
val isDup = updated.any {
|
// Insert at correct position for ascending timestamp (oldest first for top-down layout)
|
||||||
it.role == message.role && it.content == message.content && it.msgType == message.msgType
|
val insertAt = updated.indexOfFirst { it.timestamp >= message.timestamp }
|
||||||
}
|
if (insertAt >= 0) updated.add(insertAt, message) else updated.add(message)
|
||||||
if (!isDup) {
|
|
||||||
updated.add(message)
|
|
||||||
val animIdx = _messageAnimIndex.value.toMutableMap()
|
val animIdx = _messageAnimIndex.value.toMutableMap()
|
||||||
animIdx[message.id] = animCounter++
|
animIdx[message.id] = animCounter++
|
||||||
_messageAnimIndex.value = animIdx
|
_messageAnimIndex.value = animIdx
|
||||||
}
|
}
|
||||||
}
|
|
||||||
updated.deduplicate()
|
updated.deduplicate()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user