From a7bd6393df3996ab6dc88f16b00c171f6c044727 Mon Sep 17 00:00:00 2001 From: Dariusz Olszewski Date: Sun, 27 Feb 2022 15:22:46 +0100 Subject: [PATCH] Prevent overlapping pullChatMessages calls Sometimes pullChatMessages may be called before response to a previous call is received. In such cases just ignore the second call. Message processing will continue when response to the earlier call is received. Signed-off-by: Dariusz Olszewski --- .../talk/controllers/ChatController.kt | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt index f983b08e3..3ac5b8fe9 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -233,6 +233,7 @@ class ChatController(args: Bundle) : var adapter: TalkMessagesListAdapter? = null var mentionAutocomplete: Autocomplete<*>? = null var layoutManager: LinearLayoutManager? = null + var pullChatMessagesPending = false var lookingIntoFuture = false var newMessagesCount = 0 var startCallFromNotification: Boolean? = null @@ -1902,6 +1903,16 @@ class ChatController(args: Bundle) : return } + if (pullChatMessagesPending) { + // Sometimes pullChatMessages may be called before response to a previous call is received. + // In such cases just ignore the second call. Message processing will continue when response to the + // earlier call is received. + // More details: https://github.com/nextcloud/talk-android/pull/1766 + Log.d(TAG, "pullChatMessages - pullChatMessagesPending is true, exiting") + return + } + pullChatMessagesPending = true + if (currentConversation != null && currentConversation!!.shouldShowLobby(conversationUser)) { // return } @@ -1966,6 +1977,7 @@ class ChatController(args: Bundle) : @Suppress("Detekt.TooGenericExceptionCaught") override fun onNext(response: Response<*>) { Log.d(TAG, "pullChatMessages - pullChatMessages[lookIntoFuture > 0] - got response") + pullChatMessagesPending = false try { if (response.code() == 304) { Log.d(TAG, "pullChatMessages - quasi recursive call to pullChatMessages") @@ -1984,10 +1996,11 @@ class ChatController(args: Bundle) : override fun onError(e: Throwable) { Log.e(TAG, "pullChatMessages - pullChatMessages[lookIntoFuture > 0] - ERROR", e) + pullChatMessagesPending = false } override fun onComplete() { - // unused atm + pullChatMessagesPending = false } }) } else { @@ -2006,6 +2019,7 @@ class ChatController(args: Bundle) : @Suppress("Detekt.TooGenericExceptionCaught") override fun onNext(response: Response<*>) { Log.d(TAG, "pullChatMessages - pullChatMessages[lookIntoFuture <= 0] - got response") + pullChatMessagesPending = false try { if (response.code() == 412) { pastPreconditionFailed = true @@ -2021,10 +2035,11 @@ class ChatController(args: Bundle) : override fun onError(e: Throwable) { Log.e(TAG, "pullChatMessages - pullChatMessages[lookIntoFuture <= 0] - ERROR", e) + pullChatMessagesPending = false } override fun onComplete() { - // unused atm + pullChatMessagesPending = false } }) }