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