From d3892590734c7330978959b580070fd649bd9315 Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Thu, 3 May 2018 23:01:59 +0200
Subject: [PATCH] Load enough backlog to fill the screen after reconnect, fixes
 #64

Signed-off-by: Janne Koschinski <janne@kuschku.de>
---
 .../ui/chat/messages/MessageListFragment.kt   | 29 ++++++++++++-------
 1 file changed, 18 insertions(+), 11 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 a13c072de..46c74aa9a 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
@@ -321,7 +321,7 @@ class MessageListFragment : ServiceBoundFragment() {
       this, Observer {
       if (it?.orNull() == ConnectionState.CONNECTED) {
         runInBackgroundDelayed(16) {
-          loadMore()
+          loadMore(initial = true)
         }
       }
     })
@@ -457,7 +457,9 @@ class MessageListFragment : ServiceBoundFragment() {
     }
     // Try loading messages when switching to isEmpty buffer
     if (database.message().bufferSize(current) == 0) {
-      loadMore(initial = true)
+      if (current > 0 && current != Int.MAX_VALUE) {
+        loadMore(initial = true)
+      }
     }
     activity?.runOnUiThread { messageList.scrollToPosition(0) }
   }
@@ -474,16 +476,21 @@ class MessageListFragment : ServiceBoundFragment() {
   }
 
   private fun loadMore(initial: Boolean = false, lastMessageId: MsgId? = null) {
-    runInBackground {
+    requireActivity().runOnUiThread {
       viewModel.buffer { bufferId ->
-        viewModel.session {
-          it.orNull()?.backlogManager?.requestBacklog(
-            bufferId = bufferId,
-            last = lastMessageId ?: database.message().findFirstByBufferId(
-              bufferId
-            )?.messageId ?: -1,
-            limit = if (initial) backlogSettings.initialAmount else backlogSettings.pageSize
-          )
+        if (bufferId > 0 && bufferId != Int.MAX_VALUE) {
+          if (initial) swipeRefreshLayout.isRefreshing = true
+          runInBackground {
+            viewModel.session {
+              it.orNull()?.backlogManager?.requestBacklog(
+                bufferId = bufferId,
+                last = lastMessageId ?: database.message().findFirstByBufferId(
+                  bufferId
+                )?.messageId ?: -1,
+                limit = if (initial) backlogSettings.initialAmount else backlogSettings.pageSize
+              )
+            }
+          }
         }
       }
     }
-- 
GitLab