فهرست منبع

do not try to pull chat messages when offline or paused

Otherwise, it resulted in a lot of flickering because _lastCommonReadFlow was emitted every 500ms. And anyway if we know we are offline or paused then it doesn't make sense to execute the sync method.

chain which caused the flickering was:
updateUiForLastCommonRead (_lastCommonReadFlow) -> updateReadStatusOfAllMessages - notifyDataSetChanged -> onBindViewHolder -> IncomingLinkPreviewMessageViewHolder

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
Marcel Hibbe 6 ماه پیش
والد
کامیت
9a14764321
1فایلهای تغییر یافته به همراه22 افزوده شده و 20 حذف شده
  1. 22 20
      app/src/main/java/com/nextcloud/talk/chat/data/network/OfflineFirstChatRepository.kt

+ 22 - 20
app/src/main/java/com/nextcloud/talk/chat/data/network/OfflineFirstChatRepository.kt

@@ -199,29 +199,31 @@ class OfflineFirstChatRepository @Inject constructor(
             val networkParams = Bundle()
 
             while (true) {
-                if (!monitor.isOnline.first() || itIsPaused) Thread.sleep(HALF_SECOND)
-
-                // sync database with server (This is a long blocking call because long polling (lookIntoFuture) is set)
-                networkParams.putSerializable(BundleKeys.KEY_FIELD_MAP, fieldMap)
-
-                val resultsFromSync = sync(networkParams)
-                if (!resultsFromSync.isNullOrEmpty()) {
-                    val chatMessages = resultsFromSync.map(ChatMessageEntity::asModel)
-                    val pair = Pair(true, chatMessages)
-                    _messageFlow.emit(pair)
-                }
+                if (!monitor.isOnline.first() || itIsPaused) {
+                    Thread.sleep(HALF_SECOND)
+                } else {
+                    // sync database with server (This is a long blocking call because long polling (lookIntoFuture) is set)
+                    networkParams.putSerializable(BundleKeys.KEY_FIELD_MAP, fieldMap)
+
+                    val resultsFromSync = sync(networkParams)
+                    if (!resultsFromSync.isNullOrEmpty()) {
+                        val chatMessages = resultsFromSync.map(ChatMessageEntity::asModel)
+                        val pair = Pair(true, chatMessages)
+                        _messageFlow.emit(pair)
+                    }
 
-                updateUiForLastCommonRead()
+                    updateUiForLastCommonRead()
 
-                val newestMessage = chatDao.getNewestMessageId(internalConversationId).toInt()
+                    val newestMessage = chatDao.getNewestMessageId(internalConversationId).toInt()
 
-                // update field map vars for next cycle
-                fieldMap = getFieldMap(
-                    lookIntoFuture = true,
-                    includeLastKnown = false,
-                    setReadMarker = true,
-                    lastKnown = newestMessage
-                )
+                    // update field map vars for next cycle
+                    fieldMap = getFieldMap(
+                        lookIntoFuture = true,
+                        includeLastKnown = false,
+                        setReadMarker = true,
+                        lastKnown = newestMessage
+                    )
+                }
             }
         }