From ed662d3adde15b5b8a3e06e3b5629748f3ea1e4e Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 15 Mar 2021 14:19:23 +0100 Subject: [PATCH] Fix double RR issue when optimizing init sync --- .../internal/session/room/timeline/DefaultTimeline.kt | 2 +- .../sdk/internal/session/sync/ReadReceiptHandler.kt | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimeline.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimeline.kt index 92877950eb..70d5f31042 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimeline.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimeline.kt @@ -199,7 +199,7 @@ internal class DefaultTimeline( } ?.let { readReceiptContent -> realm.executeTransactionAsync { - readReceiptHandler.handle(it, roomId, readReceiptContent, true) + readReceiptHandler.handle(it, roomId, readReceiptContent, false) } } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/ReadReceiptHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/ReadReceiptHandler.kt index efa578f2b8..a4a48752bc 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/ReadReceiptHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/ReadReceiptHandler.kt @@ -56,9 +56,8 @@ internal class ReadReceiptHandler @Inject constructor( } fun handle(realm: Realm, roomId: String, content: ReadReceiptContent?, isInitialSync: Boolean) { - if (content == null) { - return - } + content ?: return + try { handleReadReceiptContent(realm, roomId, content, isInitialSync) } catch (exception: Exception) { @@ -94,9 +93,13 @@ internal class ReadReceiptHandler @Inject constructor( // First check if we have data from init sync to handle getContentFromInitSync(roomId)?.let { Timber.w("INIT_SYNC Insert during incremental sync RR for room $roomId") - initialSyncStrategy(realm, roomId, it) + doIncrementalSyncStrategy(realm, roomId, it) } + doIncrementalSyncStrategy(realm, roomId, content) + } + + private fun doIncrementalSyncStrategy(realm: Realm, roomId: String, content: ReadReceiptContent) { for ((eventId, receiptDict) in content) { val userIdsDict = receiptDict[READ_KEY] ?: continue val readReceiptsSummary = ReadReceiptsSummaryEntity.where(realm, eventId).findFirst()