only delay readStatus handling for initial loading

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
This commit is contained in:
Marcel Hibbe 2024-08-09 09:52:44 +02:00
parent 0390c93ed2
commit b757164c6d
No known key found for this signature in database
GPG key ID: C793F8B59F43CE7B

View file

@ -123,18 +123,19 @@ class OfflineFirstChatRepository @Inject constructor(
internalConversationId,
chatDao.getNewestMessageId(internalConversationId)
)
updateUiForLastCommonRead()
updateUiForLastCommonRead(200)
initMessagePolling()
}
private fun updateUiForLastCommonRead(){
private fun updateUiForLastCommonRead(delay: Long) {
scope.launch {
// TODO improve...
// delay is a dirty workaround to make sure messages are added to adapter on initial load before setting
// their read status.
// This workaround causes that the checkmarks seem to switch whenever sending a message
delay(200)
// their read status(otherwise there is a race condition between adding messages and setting their read
// status).
if (delay > 0) {
delay(delay)
}
newXChatLastCommonRead?.let {
_lastCommonReadFlow.emit(it)
}
@ -165,7 +166,7 @@ class OfflineFirstChatRepository @Inject constructor(
}
showLast100MessagesBefore(internalConversationId, beforeMessageId)
updateUiForLastCommonRead()
updateUiForLastCommonRead(0)
}
override fun initMessagePolling(): Job =
@ -199,7 +200,7 @@ class OfflineFirstChatRepository @Inject constructor(
_messageFlow.emit(pair)
}
updateUiForLastCommonRead()
updateUiForLastCommonRead(0)
// Process read status if not null
// val lastKnown = datastore.getLastKnownId(internalConversationId, 0)