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 d0e6f0ba8a7721ad8180013fe7bc8c1f7701f192..35a0dd92deb9c20b66705cddd416ca7d16a0de54 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 7f4f76c227586200d0bae3330194154d2cd69810..7a6433b8a751ab6dea2a563d5cd520d4fba89993 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)