diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/ReadReceiptsSummaryMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/ReadReceiptsSummaryMapper.kt index f3770e4afe..2be4510b6f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/ReadReceiptsSummaryMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/ReadReceiptsSummaryMapper.kt @@ -16,8 +16,11 @@ package org.matrix.android.sdk.internal.database.mapper +import io.realm.Realm +import io.realm.RealmList import org.matrix.android.sdk.api.session.room.model.ReadReceipt import org.matrix.android.sdk.internal.database.RealmSessionProvider +import org.matrix.android.sdk.internal.database.model.ReadReceiptEntity import org.matrix.android.sdk.internal.database.model.ReadReceiptsSummaryEntity import org.matrix.android.sdk.internal.database.model.RoomMemberSummaryEntity import org.matrix.android.sdk.internal.database.query.where @@ -32,14 +35,22 @@ internal class ReadReceiptsSummaryMapper @Inject constructor( return emptyList() } val readReceipts = readReceiptsSummaryEntity.readReceipts - - return realmSessionProvider.withRealm { realm -> - readReceipts - .mapNotNull { - val roomMember = RoomMemberSummaryEntity.where(realm, roomId = it.roomId, userId = it.userId).findFirst() - ?: return@mapNotNull null - ReadReceipt(roomMember.asDomain(), it.originServerTs.toLong()) - } + // Avoid opening a new realm if we already have one opened + return if (readReceiptsSummaryEntity.isManaged) { + map(readReceipts, readReceiptsSummaryEntity.realm) + } else { + realmSessionProvider.withRealm { realm -> + map(readReceipts, realm) + } } } + + private fun map(readReceipts: RealmList, realm: Realm): List { + return readReceipts + .mapNotNull { + val roomMember = RoomMemberSummaryEntity.where(realm, roomId = it.roomId, userId = it.userId).findFirst() + ?: return@mapNotNull null + ReadReceipt(roomMember.asDomain(), it.originServerTs.toLong()) + } + } }