From fa249db479a36cf8c393f426470c9e9fd5a038ec Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Thu, 8 Mar 2018 19:06:06 +0100 Subject: [PATCH] Set lastSeenMsgId correctly --- .../persistence/QuasselDatabase.kt | 3 +++ .../ui/chat/messages/MessageListFragment.kt | 22 ++++++++++++------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/persistence/QuasselDatabase.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/persistence/QuasselDatabase.kt index 5d7d0746a..8d7daca1d 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/persistence/QuasselDatabase.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/persistence/QuasselDatabase.kt @@ -72,6 +72,9 @@ abstract class QuasselDatabase : RoomDatabase() { @Query("SELECT * FROM message WHERE bufferId = :bufferId ORDER BY messageId DESC LIMIT 1") fun findLastByBufferId(bufferId: Int): DatabaseMessage? + @Query("SELECT * FROM message WHERE bufferId = :bufferId ORDER BY messageId DESC LIMIT 1") + fun lastMsgId(bufferId: Int): LiveData<DatabaseMessage> + @Query("SELECT * FROM message WHERE bufferId = :bufferId ORDER BY messageId ASC LIMIT 1") fun findFirstByBufferId(bufferId: Int): DatabaseMessage? diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/MessageListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/MessageListFragment.kt index b08403f7e..50d269aa4 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/MessageListFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/MessageListFragment.kt @@ -102,21 +102,27 @@ class MessageListFragment : ServiceBoundFragment() { } handler.post { - viewModel.sessionManager.zip(viewModel.getBuffer(), data).observe( + val lastMessageId = viewModel.getBuffer().switchMapNotNull { + database.message().lastMsgId(it) + } + + var previousMessageId = -1 + viewModel.sessionManager.zip(lastMessageId).observe( this, Observer { val previous = lastBuffer ?: -1 val firstVisibleItemPosition = linearLayoutManager.findFirstVisibleItemPosition() - val messageId = adapter[firstVisibleItemPosition]?.messageId + val firstVisibleMessageId = adapter[firstVisibleItemPosition]?.messageId handler.post { val session = it?.first - val buffer = it?.second + val message = it?.second val bufferSyncer = session?.bufferSyncer - if (buffer != null && bufferSyncer != null) { - markAsRead(bufferSyncer, buffer, messageId) - if (buffer != previous) { - onBufferChange(previous, buffer, messageId, bufferSyncer) + if (message != null && bufferSyncer != null && previousMessageId != message.messageId) { + markAsRead(bufferSyncer, message.bufferId, message.messageId) + if (message.bufferId != previous) { + onBufferChange(previous, message.bufferId, firstVisibleMessageId, bufferSyncer) } - lastBuffer = buffer + lastBuffer = message.bufferId + previousMessageId = message.messageId } } } -- GitLab