浏览代码

fix order of queued messages

add delay between sending of queued messages to increase the chance they are received on server in the correct order. This is not the best solution though as it blocks the UI a bit so may have to be improved!

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
Marcel Hibbe 10 月之前
父节点
当前提交
dc32a4a2f1
共有 1 个文件被更改,包括 7 次插入3 次删除
  1. 7 3
      app/src/main/java/com/nextcloud/talk/chat/viewmodels/MessageInputViewModel.kt

+ 7 - 3
app/src/main/java/com/nextcloud/talk/chat/viewmodels/MessageInputViewModel.kt

@@ -29,6 +29,7 @@ import io.reactivex.disposables.Disposable
 import io.reactivex.schedulers.Schedulers
 import kotlinx.coroutines.flow.MutableStateFlow
 import kotlinx.coroutines.flow.update
+import java.lang.Thread.sleep
 import javax.inject.Inject
 
 class MessageInputViewModel @Inject constructor(
@@ -79,9 +80,6 @@ class MessageInputViewModel @Inject constructor(
         mediaPlayerManager.handleOnStop()
     }
 
-    companion object {
-        private val TAG = MessageInputViewModel::class.java.simpleName
-    }
     val getAudioFocusChange: LiveData<AudioFocusRequestManager.ManagerState>
         get() = audioFocusRequestManager.getManagerState
 
@@ -252,6 +250,7 @@ class MessageInputViewModel @Inject constructor(
         dataStore.saveMessageQueue(roomToken, null) // empties the queue
         while (queue.size > 0) {
             val msg = queue.removeFirst()
+            sleep(DELAY_BETWEEN_QUEUED_MESSAGES)
             sendChatMessage(
                 roomToken,
                 credentials,
@@ -272,4 +271,9 @@ class MessageInputViewModel @Inject constructor(
         messageQueue = dataStore.getMessageQueue(roomToken)
         _messageQueueSizeFlow.tryEmit(messageQueue.size)
     }
+
+    companion object {
+        private val TAG = MessageInputViewModel::class.java.simpleName
+        private const val DELAY_BETWEEN_QUEUED_MESSAGES: Long = 100
+    }
 }