From d27b73f6bed52ba4168f350f163dec4711e35c3d Mon Sep 17 00:00:00 2001 From: Valere Date: Sun, 3 May 2020 11:31:59 +0200 Subject: [PATCH] Fix / Crash on bootstrap Exception: java.lang.IllegalArgumentException: 'value' is not a valid managed object. --- .../crypto/store/db/RealmCryptoStore.kt | 23 ++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/RealmCryptoStore.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/RealmCryptoStore.kt index c57dff046b..b033272448 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/RealmCryptoStore.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/RealmCryptoStore.kt @@ -58,7 +58,6 @@ import im.vector.matrix.android.internal.crypto.store.db.model.DeviceInfoEntityF import im.vector.matrix.android.internal.crypto.store.db.model.GossipingEventEntity import im.vector.matrix.android.internal.crypto.store.db.model.IncomingGossipingRequestEntity import im.vector.matrix.android.internal.crypto.store.db.model.IncomingGossipingRequestEntityFields -import im.vector.matrix.android.internal.crypto.store.db.model.KeyInfoEntity import im.vector.matrix.android.internal.crypto.store.db.model.KeysBackupDataEntity import im.vector.matrix.android.internal.crypto.store.db.model.MyDeviceLastSeenInfoEntity import im.vector.matrix.android.internal.crypto.store.db.model.OlmInboundGroupSessionEntity @@ -81,7 +80,6 @@ import im.vector.matrix.android.internal.di.MoshiProvider import im.vector.matrix.android.internal.session.SessionScope import io.realm.Realm import io.realm.RealmConfiguration -import io.realm.RealmList import io.realm.Sort import io.realm.kotlin.where import org.matrix.olm.OlmAccount @@ -1423,22 +1421,21 @@ internal class RealmCryptoStore @Inject constructor( } private fun addOrUpdateCrossSigningInfo(realm: Realm, userId: String, info: MXCrossSigningInfo?): CrossSigningInfoEntity? { - var existing = CrossSigningInfoEntity.get(realm, userId) if (info == null) { // Delete known if needed - existing?.deleteFromRealm() + CrossSigningInfoEntity.get(realm, userId)?.deleteFromRealm() + return null // TODO notify, we might need to untrust things? } else { // Just override existing, caller should check and untrust id needed - existing = CrossSigningInfoEntity.getOrCreate(realm, userId) - // existing.crossSigningKeys.forEach { it.deleteFromRealm() } - val xkeys = RealmList() - info.crossSigningKeys.forEach { cryptoCrossSigningKey -> - val keyEntity = crossSigningKeysMapper.map(cryptoCrossSigningKey) - xkeys.add(keyEntity) - } - existing.crossSigningKeys = xkeys + val existing = CrossSigningInfoEntity.getOrCreate(realm, userId) + existing.crossSigningKeys.forEach { it.deleteFromRealm() } + existing.crossSigningKeys.addAll( + info.crossSigningKeys.map { + crossSigningKeysMapper.map(it) + } + ) + return existing } - return existing } }