diff --git a/app/src/main/java/de/kuschku/quasseldroid/service/BacklogRequester.kt b/app/src/main/java/de/kuschku/quasseldroid/service/BacklogRequester.kt index 7ee4ddaa96bb90e46b4b5c0ae890b51d6a205da1..d044c3e88d95adb3abaef15b504d205ae50c38cb 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/service/BacklogRequester.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/service/BacklogRequester.kt @@ -32,7 +32,7 @@ class BacklogRequester( ) { fun loadMore(accountId: Long, buffer: BufferId, amount: Int, pageSize: Int, lastMessageId: MsgId? = null, - untilVisible: Boolean = false, + untilAllVisible: Boolean = false, finishCallback: () -> Unit) { var missing = amount viewModel.session.value?.orNull()?.backlogManager?.let { @@ -43,14 +43,22 @@ class BacklogRequester( )?.messageId ?: -1, limit = amount ) { - if (untilVisible && it.isNotEmpty()) { + if (it.isNotEmpty()) { val filtered = database.filtered().get(accountId, buffer) ?: 0 missing -= it.count { (it.type.value and filtered.inv()) != 0 } - val messageId = it.map(Message::messageId).min() - if (missing > 0) { - loadMore(accountId, buffer, missing, pageSize, messageId, untilVisible, finishCallback) + val hasLoadedAll = missing == 0 + val hasLoadedAny = missing < amount + if (untilAllVisible && !hasLoadedAll || !untilAllVisible && !hasLoadedAny) { + val messageId = it.map(Message::messageId).min() + loadMore(accountId, + buffer, + missing, + pageSize, + messageId, + untilAllVisible, + finishCallback) } else { finishCallback() } 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 7603078bf54ab0fcb28558158564b6aa014d1c78..d0e6f0ba8a7721ad8180013fe7bc8c1f7701f192 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 @@ -470,7 +470,7 @@ class MessageListFragment : ServiceBoundFragment() { pageSize = backlogSettings.pageSize, lastMessageId = lastMessageId ?: database.message().findFirstByBufferId(bufferId)?.messageId ?: -1, - untilVisible = initial + untilAllVisible = initial ) { activity?.runOnUiThread { swipeRefreshLayout.isRefreshing = false