From 0393dd51c9edcc2139c372755f490d11c50a2af3 Mon Sep 17 00:00:00 2001 From: SpiritCroc Date: Mon, 30 May 2022 15:56:06 +0200 Subject: [PATCH] Bring back downstream "Update room previews once we have decryption keys" This reverts commit 130fe7f887fe4851ec35305da23c5ffdbecad591. Also update to some newer decryption logic, and disable the new upstream logic, to avoid duplicate decryption attempts. Change-Id: Ibcea8b825d94284dfcf2d305b5f57423366601e5 --- .../actions/MegolmSessionDataImporter.kt | 20 +++++++++++++++++++ .../app/features/home/HomeDetailViewModel.kt | 3 ++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/actions/MegolmSessionDataImporter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/actions/MegolmSessionDataImporter.kt index 22c4e59b18..9e60aa174c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/actions/MegolmSessionDataImporter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/actions/MegolmSessionDataImporter.kt @@ -17,6 +17,9 @@ package org.matrix.android.sdk.internal.crypto.actions import androidx.annotation.WorkerThread +import com.zhuinden.monarchy.Monarchy +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.launch import org.matrix.android.sdk.api.extensions.tryOrNull import org.matrix.android.sdk.api.listeners.ProgressListener import org.matrix.android.sdk.api.logger.LoggerTag @@ -27,6 +30,11 @@ import org.matrix.android.sdk.internal.crypto.OutgoingKeyRequestManager import org.matrix.android.sdk.internal.crypto.RoomDecryptorProvider import org.matrix.android.sdk.internal.crypto.algorithms.megolm.MXMegolmDecryption import org.matrix.android.sdk.internal.crypto.store.IMXCryptoStore +import org.matrix.android.sdk.internal.database.model.RoomSummaryEntity +import org.matrix.android.sdk.internal.database.query.where +import org.matrix.android.sdk.internal.di.SessionDatabase +import org.matrix.android.sdk.internal.session.room.summary.RoomSummaryUpdater +import org.matrix.android.sdk.internal.util.awaitTransaction import org.matrix.android.sdk.internal.util.time.Clock import timber.log.Timber import javax.inject.Inject @@ -35,6 +43,9 @@ private val loggerTag = LoggerTag("MegolmSessionDataImporter", LoggerTag.CRYPTO) internal class MegolmSessionDataImporter @Inject constructor(private val olmDevice: MXOlmDevice, private val roomDecryptorProvider: RoomDecryptorProvider, + @SessionDatabase private val monarchy: Monarchy, + private val roomSummaryUpdater: RoomSummaryUpdater, + private val cryptoCoroutineScope: CoroutineScope, private val outgoingKeyRequestManager: OutgoingKeyRequestManager, private val cryptoStore: IMXCryptoStore, private val clock: Clock, @@ -117,6 +128,15 @@ internal class MegolmSessionDataImporter @Inject constructor(private val olmDevi Timber.tag(loggerTag.value).v("## importMegolmSessionsData : sessions import " + (t1 - t0) + " ms (" + megolmSessionsData.size + " sessions)") + // SC: Retry decrypting room previews for the room list + cryptoCoroutineScope.launch { + monarchy.awaitTransaction { realm -> + RoomSummaryEntity.where(realm).findAll().forEach { entity -> + roomSummaryUpdater.refreshLatestPreviewContent(realm, entity.roomId) + } + } + } + return ImportRoomKeysResult(totalNumbersOfKeys, totalNumbersOfImportedKeys) } } diff --git a/vector/src/main/java/im/vector/app/features/home/HomeDetailViewModel.kt b/vector/src/main/java/im/vector/app/features/home/HomeDetailViewModel.kt index 565489aabb..efa26743a0 100644 --- a/vector/src/main/java/im/vector/app/features/home/HomeDetailViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/HomeDetailViewModel.kt @@ -99,7 +99,8 @@ class HomeDetailViewModel @AssistedInject constructor( private val refreshRoomSummariesOnCryptoSessionChange = object : NewSessionListener { override fun onNewSession(roomId: String?, senderKey: String, sessionId: String) { - session.roomService().refreshJoinedRoomSummaryPreviews(roomId) + // SC: we're doing this directly in MegolmSessionDataImporter + //session.roomService().refreshJoinedRoomSummaryPreviews(roomId) } }