From d05012d9919223baf95b2701811adb61d6c73085 Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Sat, 5 May 2018 16:53:26 +0200
Subject: [PATCH] But maybe this will do it for #64?

Signed-off-by: Janne Koschinski <janne@kuschku.de>
---
 .../quasseldroid/ui/chat/messages/MessageListFragment.kt    | 6 ++++--
 .../de/kuschku/quasseldroid/persistence/QuasselDatabase.kt  | 3 +++
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt
index d0e6f0ba8..35a0dd92d 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt
@@ -325,8 +325,9 @@ class MessageListFragment : ServiceBoundFragment() {
       if (it?.orNull() == ConnectionState.CONNECTED) {
         runInBackgroundDelayed(16) {
           viewModel.buffer { bufferId ->
+            val filtered = database.filtered().get(accountId, bufferId)
             // Try loading messages when switching to isEmpty buffer
-            if (database.message().bufferSize(bufferId) == 0) {
+            if (!database.message().hasVisibleMessages(bufferId, filtered ?: 0)) {
               if (bufferId > 0 && bufferId != Int.MAX_VALUE) {
                 loadMore(initial = true)
               }
@@ -438,7 +439,8 @@ class MessageListFragment : ServiceBoundFragment() {
       bufferSyncer.requestSetMarkerLine(previous, lastMessageId)
     }
     // Try loading messages when switching to isEmpty buffer
-    if (database.message().bufferSize(current) == 0) {
+    val filtered = database.filtered().get(accountId, current)
+    if (!database.message().hasVisibleMessages(current, filtered ?: 0)) {
       if (current > 0 && current != Int.MAX_VALUE) {
         loadMore(initial = true)
       }
diff --git a/persistence/src/main/java/de/kuschku/quasseldroid/persistence/QuasselDatabase.kt b/persistence/src/main/java/de/kuschku/quasseldroid/persistence/QuasselDatabase.kt
index 7f4f76c22..7a6433b8a 100644
--- a/persistence/src/main/java/de/kuschku/quasseldroid/persistence/QuasselDatabase.kt
+++ b/persistence/src/main/java/de/kuschku/quasseldroid/persistence/QuasselDatabase.kt
@@ -111,6 +111,9 @@ abstract class QuasselDatabase : RoomDatabase() {
     @Query("SELECT * FROM message WHERE bufferId = :bufferId ORDER BY messageId ASC LIMIT 1")
     fun findFirstByBufferId(bufferId: Int): MessageData?
 
+    @Query("SELECT EXISTS(SELECT 1 FROM message WHERE bufferId = :bufferId AND type & ~ :type > 0 AND ignored = 0)")
+    fun hasVisibleMessages(bufferId: Int, type: Int): Boolean
+
     @Insert(onConflict = OnConflictStrategy.REPLACE)
     fun save(vararg entities: MessageData)
 
-- 
GitLab