From 5547b6278e170a01f6bcb88a180c7fa0f1dd88a5 Mon Sep 17 00:00:00 2001 From: ganfra Date: Thu, 27 Jul 2023 20:49:27 +0200 Subject: [PATCH 1/4] Update rust sdk to 0.1.37 --- gradle/libs.versions.toml | 2 +- .../matrix/impl/room/RoomListExtensions.kt | 6 +++--- .../matrix/impl/room/RoomSummaryListProcessor.kt | 8 +++++--- .../libraries/matrix/impl/room/RustMatrixRoom.kt | 15 +++++++++------ .../matrix/impl/room/RustRoomSummaryDataSource.kt | 2 +- .../item/event/TimelineEventContentMapper.kt | 1 + 6 files changed, 20 insertions(+), 14 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 04af1ba607..ff37e483d8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -145,7 +145,7 @@ jsoup = { module = "org.jsoup:jsoup", version.ref = "jsoup" } appyx_core = { module = "com.bumble.appyx:core", version.ref = "appyx" } molecule-runtime = { module = "app.cash.molecule:molecule-runtime", version.ref = "molecule" } timber = "com.jakewharton.timber:timber:5.0.1" -matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.1.36" +matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.1.37" sqldelight-driver-android = { module = "com.squareup.sqldelight:android-driver", version.ref = "sqldelight" } sqldelight-driver-jvm = { module = "com.squareup.sqldelight:sqlite-driver", version.ref = "sqldelight" } sqldelight-coroutines = { module = "com.squareup.sqldelight:coroutines-extensions", version.ref = "sqldelight" } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomListExtensions.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomListExtensions.kt index 84c4eeaefb..1baa4f23db 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomListExtensions.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomListExtensions.kt @@ -46,11 +46,11 @@ fun RoomList.loadingStateFlow(): Flow = result.stateStream }.buffer(Channel.UNLIMITED) -fun RoomList.entriesFlow(onInitialList: suspend (List) -> Unit): Flow = +fun RoomList.entriesFlow(onInitialList: suspend (List) -> Unit): Flow> = mxCallbackFlow { val listener = object : RoomListEntriesListener { - override fun onUpdate(roomEntriesUpdate: RoomListEntriesUpdate) { - trySendBlocking(roomEntriesUpdate) + override fun onUpdate(roomEntriesUpdates: List) { + trySendBlocking(roomEntriesUpdates) } } val result = entries(listener) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomSummaryListProcessor.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomSummaryListProcessor.kt index a8ab4cb807..ef54a0604d 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomSummaryListProcessor.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomSummaryListProcessor.kt @@ -50,12 +50,14 @@ class RoomSummaryListProcessor( initLatch.complete(Unit) } - suspend fun postUpdate(update: RoomListEntriesUpdate) { + suspend fun postUpdate(updates: List) { // Makes sure to process first entries before update. initLatch.await() updateRoomSummaries { - Timber.v("Update rooms from postUpdate ($update) on ${Thread.currentThread()}") - applyUpdate(update) + Timber.v("Update rooms from postUpdates (with ${updates.size} items) on ${Thread.currentThread()}") + updates.forEach { update -> + applyUpdate(update) + } } } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt index 8c2eecce8a..d2a528074c 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt @@ -364,13 +364,16 @@ class RustMatrixRoom( ) } } -} -//TODO handle cancellation, need refactoring of how we are catching errors -private suspend fun sendAttachment(handle: () -> SendAttachmentJoinHandle): Result { - return runCatching { - handle().use { - it.join() + //TODO handle cancellation, need refactoring of how we are catching errors + private suspend fun sendAttachment(handle: () -> SendAttachmentJoinHandle): Result = withContext(roomDispatcher) { + runCatching { + handle().use { + it.join() + } } } + } + + diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustRoomSummaryDataSource.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustRoomSummaryDataSource.kt index efdbcf34ad..3e65fa2e94 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustRoomSummaryDataSource.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustRoomSummaryDataSource.kt @@ -112,7 +112,7 @@ private fun RoomListLoadingState.toRoomSummaryDataSourceLoadingState(): RoomSumm } } -private fun RoomList.observeEntriesWithProcessor(processor: RoomSummaryListProcessor): Flow { +private fun RoomList.observeEntriesWithProcessor(processor: RoomSummaryListProcessor): Flow> { return entriesFlow { roomListEntries -> processor.postEntries(roomListEntries) }.onEach { update -> diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/TimelineEventContentMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/TimelineEventContentMapper.kt index 33727c15d4..52d646e48e 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/TimelineEventContentMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/TimelineEventContentMapper.kt @@ -96,6 +96,7 @@ class TimelineEventContentMapper(private val eventMessageMapper: EventMessageMap data = kind.msg.map() ) } + else -> UnknownContent } } } From b75752e066eb8804b7a17890db50529e6bb907e7 Mon Sep 17 00:00:00 2001 From: ganfra Date: Thu, 27 Jul 2023 20:49:56 +0200 Subject: [PATCH 2/4] Timeline: fetch members only after timeline is ready --- .../android/libraries/matrix/impl/timeline/RustMatrixTimeline.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustMatrixTimeline.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustMatrixTimeline.kt index 3997a492ac..796b48ebb3 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustMatrixTimeline.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustMatrixTimeline.kt @@ -127,6 +127,7 @@ class RustMatrixTimeline( } private suspend fun fetchMembers() = withContext(dispatcher) { + initLatch.await() runCatching { innerRoom.fetchMembers() } From 632c4ef168550c1651042630d3649fce6fe09223 Mon Sep 17 00:00:00 2001 From: ganfra Date: Thu, 27 Jul 2023 21:11:34 +0200 Subject: [PATCH 3/4] Fix warning --- .../android/libraries/matrix/impl/room/RoomListExtensions.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomListExtensions.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomListExtensions.kt index 1baa4f23db..fb22c47daa 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomListExtensions.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomListExtensions.kt @@ -49,8 +49,8 @@ fun RoomList.loadingStateFlow(): Flow = fun RoomList.entriesFlow(onInitialList: suspend (List) -> Unit): Flow> = mxCallbackFlow { val listener = object : RoomListEntriesListener { - override fun onUpdate(roomEntriesUpdates: List) { - trySendBlocking(roomEntriesUpdates) + override fun onUpdate(roomEntriesUpdate: List) { + trySendBlocking(roomEntriesUpdate) } } val result = entries(listener) From 271d0db587b8537073f7cb3be2fa1cf03f19097c Mon Sep 17 00:00:00 2001 From: ganfra Date: Thu, 27 Jul 2023 21:12:07 +0200 Subject: [PATCH 4/4] Also catch Exception instead of RoomListException --- .../android/libraries/matrix/impl/room/RoomListExtensions.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomListExtensions.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomListExtensions.kt index fb22c47daa..b74ab8968e 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomListExtensions.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomListExtensions.kt @@ -25,7 +25,6 @@ import org.matrix.rustcomponents.sdk.RoomList import org.matrix.rustcomponents.sdk.RoomListEntriesListener import org.matrix.rustcomponents.sdk.RoomListEntriesUpdate import org.matrix.rustcomponents.sdk.RoomListEntry -import org.matrix.rustcomponents.sdk.RoomListException import org.matrix.rustcomponents.sdk.RoomListItem import org.matrix.rustcomponents.sdk.RoomListLoadingState import org.matrix.rustcomponents.sdk.RoomListLoadingStateListener @@ -61,7 +60,7 @@ fun RoomList.entriesFlow(onInitialList: suspend (List) -> Unit): fun RoomListService.roomOrNull(roomId: String): RoomListItem? { return try { room(roomId) - } catch (exception: RoomListException) { + } catch (exception: Exception) { Timber.d(exception, "Failed finding room with id=$roomId.") return null }