diff --git a/CHANGES.md b/CHANGES.md index 472c56648a..9b4e022d5e 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,9 @@ +Changes in RiotX 0.9.1 (2019-12-05) +=================================================== + +Bugfix 🐛: + - Fix an issue with DB transaction (#740) + Changes in RiotX 0.9.0 (2019-12-05) =================================================== 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 8a3b66dfe5..c194a400ce 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 @@ -643,9 +643,10 @@ internal class RealmCryptoStore(private val realmConfiguration: RealmConfigurati } override fun getOutgoingRoomKeyRequestByState(states: Set): OutgoingRoomKeyRequest? { + val statesIndex = states.map { it.ordinal }.toTypedArray() return doRealmQueryAndCopy(realmConfiguration) { it.where() - .`in`(OutgoingRoomKeyRequestEntityFields.STATE, states.map { it.ordinal }.toTypedArray()) + .`in`(OutgoingRoomKeyRequestEntityFields.STATE, statesIndex) .findFirst() } ?.toOutgoingRoomKeyRequest() diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/model/OutgoingRoomKeyRequestEntity.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/model/OutgoingRoomKeyRequestEntity.kt index b7bcb603f5..3130bd2f89 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/model/OutgoingRoomKeyRequestEntity.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/model/OutgoingRoomKeyRequestEntity.kt @@ -41,6 +41,7 @@ internal open class OutgoingRoomKeyRequestEntity( * Convert to OutgoingRoomKeyRequest */ fun toOutgoingRoomKeyRequest(): OutgoingRoomKeyRequest { + val cancellationTxnId = this.cancellationTxnId return OutgoingRoomKeyRequest( RoomKeyRequestBody().apply { algorithm = requestBodyAlgorithm diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/database/AsyncTransaction.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/database/AsyncTransaction.kt index 0f8445d20f..4075f95ae8 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/database/AsyncTransaction.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/database/AsyncTransaction.kt @@ -22,12 +22,13 @@ import kotlinx.coroutines.isActive import kotlinx.coroutines.withContext import timber.log.Timber -suspend fun awaitTransaction(config: RealmConfiguration, transaction: suspend (realm: Realm) -> Unit) = withContext(Dispatchers.Default) { +suspend fun awaitTransaction(config: RealmConfiguration, transaction: suspend (realm: Realm) -> T) = withContext(Dispatchers.Default) { Realm.getInstance(config).use { bgRealm -> bgRealm.beginTransaction() + val result: T try { val start = System.currentTimeMillis() - transaction(bgRealm) + result = transaction(bgRealm) if (isActive) { bgRealm.commitTransaction() val end = System.currentTimeMillis() @@ -39,5 +40,6 @@ suspend fun awaitTransaction(config: RealmConfiguration, transaction: suspend (r bgRealm.cancelTransaction() } } + result } } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/filter/DefaultFilterRepository.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/filter/DefaultFilterRepository.kt index ae8e8ce891..f7df8c512e 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/filter/DefaultFilterRepository.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/filter/DefaultFilterRepository.kt @@ -69,7 +69,7 @@ internal class DefaultFilterRepository @Inject constructor(private val monarchy: } override suspend fun getFilter(): String { - return Realm.getInstance(monarchy.realmConfiguration).use { + return monarchy.awaitTransaction { val filter = FilterEntity.getOrCreate(it) if (filter.filterId.isBlank()) { // Use the Json format @@ -82,7 +82,7 @@ internal class DefaultFilterRepository @Inject constructor(private val monarchy: } override suspend fun getRoomFilter(): String { - return Realm.getInstance(monarchy.realmConfiguration).use { + return monarchy.awaitTransaction { FilterEntity.getOrCreate(it).roomEventFilterJson } } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/util/Monarchy.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/util/Monarchy.kt index fc9999225f..848cc43565 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/util/Monarchy.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/util/Monarchy.kt @@ -22,8 +22,8 @@ import io.realm.Realm import io.realm.RealmModel import java.util.concurrent.atomic.AtomicReference -internal suspend fun Monarchy.awaitTransaction(transaction: suspend (realm: Realm) -> Unit) { - awaitTransaction(realmConfiguration, transaction) +internal suspend fun Monarchy.awaitTransaction(transaction: suspend (realm: Realm) -> T): T { + return awaitTransaction(realmConfiguration, transaction) } fun Monarchy.fetchCopied(query: (Realm) -> T?): T? { diff --git a/vector/build.gradle b/vector/build.gradle index d77f669215..55625d4466 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -16,7 +16,7 @@ androidExtensions { ext.versionMajor = 0 ext.versionMinor = 9 -ext.versionPatch = 0 +ext.versionPatch = 1 static def getGitTimestamp() { def cmd = 'git show -s --format=%ct'