diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 96467a461f..7a6f3fbbcc 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -153,7 +153,7 @@ jsoup = "org.jsoup:jsoup:1.17.2" appyx_core = { module = "com.bumble.appyx:core", version.ref = "appyx" } molecule-runtime = "app.cash.molecule:molecule-runtime:1.4.0" timber = "com.jakewharton.timber:timber:5.0.1" -matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.2.4" +matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.2.6" matrix_richtexteditor = { module = "io.element.android:wysiwyg", version.ref = "wysiwyg" } matrix_richtexteditor_compose = { module = "io.element.android:wysiwyg-compose", version.ref = "wysiwyg" } sqldelight-driver-android = { module = "app.cash.sqldelight:android-driver", version.ref = "sqldelight" } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapper.kt index eea471b696..47f3b8a737 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapper.kt @@ -45,7 +45,7 @@ class MatrixRoomInfoMapper( alternativeAliases = it.alternativeAliases.toImmutableList(), currentUserMembership = it.membership.map(), latestEvent = it.latestEvent?.use(timelineItemMapper::map), - inviter = it.inviter?.use(RoomMemberMapper::map), + inviter = it.inviter?.let(RoomMemberMapper::map), activeMembersCount = it.activeMembersCount.toLong(), invitedMembersCount = it.invitedMembersCount.toLong(), joinedMembersCount = it.joinedMembersCount.toLong(), diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/member/RoomMemberListFetcher.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/member/RoomMemberListFetcher.kt index 83850f574b..1547769bc4 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/member/RoomMemberListFetcher.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/member/RoomMemberListFetcher.kt @@ -19,7 +19,6 @@ package io.element.android.libraries.matrix.impl.room.member import io.element.android.libraries.core.coroutine.parallelMap import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState import io.element.android.libraries.matrix.api.room.roomMembers -import io.element.android.libraries.matrix.impl.util.destroyAll import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.ensureActive @@ -109,13 +108,7 @@ internal class RoomMemberListFetcher( // We should probably implement some sort of paging in the future. coroutineContext.ensureActive() val chunk = iterator.nextChunk(pageSize.toUInt()) - val members = try { - // Load next chunk. If null (no more items), exit the loop - chunk?.parallelMap(RoomMemberMapper::map) ?: break - } finally { - // Make sure we clear all member references - chunk?.destroyAll() - } + val members = chunk?.parallelMap(RoomMemberMapper::map) ?: break addAll(members) Timber.i("Emitting first $size members for room $roomId") _membersFlow.value = MatrixRoomMembersState.Ready(toImmutableList()) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/member/RoomMemberMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/member/RoomMemberMapper.kt index 9c38fca8a0..492fdee814 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/member/RoomMemberMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/member/RoomMemberMapper.kt @@ -24,19 +24,17 @@ import org.matrix.rustcomponents.sdk.MembershipState as RustMembershipState import org.matrix.rustcomponents.sdk.RoomMember as RustRoomMember object RoomMemberMapper { - fun map(roomMember: RustRoomMember): RoomMember = roomMember.use { - RoomMember( - UserId(it.userId()), - it.displayName(), - it.avatarUrl(), - mapMembership(it.membership()), - it.isNameAmbiguous(), - it.powerLevel(), - it.normalizedPowerLevel(), - it.isIgnored(), - mapRole(it.suggestedRoleForPowerLevel()) + fun map(roomMember: RustRoomMember): RoomMember = RoomMember( + UserId(roomMember.userId), + roomMember.displayName, + roomMember.avatarUrl, + mapMembership(roomMember.membership), + roomMember.isNameAmbiguous, + roomMember.powerLevel, + roomMember.normalizedPowerLevel, + roomMember.isIgnored, + mapRole(roomMember.suggestedRoleForPowerLevel), ) - } fun mapRole(role: RoomMemberRole): RoomMember.Role = when (role) { diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/tracing/RustTracingService.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/tracing/RustTracingService.kt index 6c9ec5bbeb..c67cd600e6 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/tracing/RustTracingService.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/tracing/RustTracingService.kt @@ -38,6 +38,8 @@ class RustTracingService @Inject constructor(private val buildMeta: BuildMeta) : is WriteToFilesConfiguration.Enabled -> TracingFileConfiguration( path = writeToFilesConfiguration.directory, filePrefix = writeToFilesConfiguration.filenamePrefix, + fileSuffix = null, + maxFiles = null, ) }, ) diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/member/RoomMemberListFetcherTest.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/member/RoomMemberListFetcherTest.kt index 4770f1b9e2..93dbc4e948 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/member/RoomMemberListFetcherTest.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/member/RoomMemberListFetcherTest.kt @@ -42,9 +42,9 @@ class RoomMemberListFetcherTest { val room = FakeRustRoom(getMembersNoSync = { FakeRoomMembersIterator( listOf( - FakeRustRoomMember(A_USER_ID), - FakeRustRoomMember(A_USER_ID_2), - FakeRustRoomMember(A_USER_ID_3), + fakeRustRoomMember(A_USER_ID), + fakeRustRoomMember(A_USER_ID_2), + fakeRustRoomMember(A_USER_ID_3), ) ) }) @@ -94,9 +94,9 @@ class RoomMemberListFetcherTest { val room = FakeRustRoom(getMembersNoSync = { FakeRoomMembersIterator( listOf( - FakeRustRoomMember(A_USER_ID), - FakeRustRoomMember(A_USER_ID_2), - FakeRustRoomMember(A_USER_ID_3), + fakeRustRoomMember(A_USER_ID), + fakeRustRoomMember(A_USER_ID_2), + fakeRustRoomMember(A_USER_ID_3), ) ) }) @@ -118,9 +118,9 @@ class RoomMemberListFetcherTest { val room = FakeRustRoom(getMembers = { FakeRoomMembersIterator( listOf( - FakeRustRoomMember(A_USER_ID), - FakeRustRoomMember(A_USER_ID_2), - FakeRustRoomMember(A_USER_ID_3), + fakeRustRoomMember(A_USER_ID), + fakeRustRoomMember(A_USER_ID_2), + fakeRustRoomMember(A_USER_ID_3), ) ) }) @@ -153,14 +153,14 @@ class RoomMemberListFetcherTest { fun `fetchRoomMembers - with 'withCache' returns cached items first, then new ones`() = runTest { val room = FakeRustRoom( getMembersNoSync = { - FakeRoomMembersIterator(listOf(FakeRustRoomMember(A_USER_ID_4))) + FakeRoomMembersIterator(listOf(fakeRustRoomMember(A_USER_ID_4))) }, getMembers = { FakeRoomMembersIterator( listOf( - FakeRustRoomMember(A_USER_ID), - FakeRustRoomMember(A_USER_ID_2), - FakeRustRoomMember(A_USER_ID_3), + fakeRustRoomMember(A_USER_ID), + fakeRustRoomMember(A_USER_ID_2), + fakeRustRoomMember(A_USER_ID_3), ) ) } @@ -189,14 +189,14 @@ class RoomMemberListFetcherTest { fun `fetchRoomMembers - with 'withCache' skips cache if there is already a ready state`() = runTest { val room = FakeRustRoom( getMembersNoSync = { - FakeRoomMembersIterator(listOf(FakeRustRoomMember(A_USER_ID_4))) + FakeRoomMembersIterator(listOf(fakeRustRoomMember(A_USER_ID_4))) }, getMembers = { FakeRoomMembersIterator( listOf( - FakeRustRoomMember(A_USER_ID), - FakeRustRoomMember(A_USER_ID_2), - FakeRustRoomMember(A_USER_ID_3), + fakeRustRoomMember(A_USER_ID), + fakeRustRoomMember(A_USER_ID_2), + fakeRustRoomMember(A_USER_ID_3), ) ) } @@ -262,48 +262,23 @@ class FakeRoomMembersIterator( } } -class FakeRustRoomMember( - private val userId: UserId, - private val displayName: String? = null, - private val avatarUrl: String? = null, - private val membership: MembershipState = MembershipState.JOIN, - private val isNameAmbiguous: Boolean = false, - private val powerLevel: Long = 0L, - private val role: RoomMemberRole = RoomMemberRole.USER, -) : RoomMember(NoPointer) { - override fun userId(): String { - return userId.value - } - - override fun displayName(): String? { - return displayName - } - - override fun avatarUrl(): String? { - return avatarUrl - } - - override fun membership(): MembershipState { - return membership - } - - override fun isNameAmbiguous(): Boolean { - return isNameAmbiguous - } - - override fun powerLevel(): Long { - return powerLevel - } - - override fun normalizedPowerLevel(): Long { - return powerLevel - } - - override fun isIgnored(): Boolean { - return false - } - - override fun suggestedRoleForPowerLevel(): RoomMemberRole { - return role - } -} +private fun fakeRustRoomMember( + userId: UserId, + displayName: String? = null, + avatarUrl: String? = null, + membership: MembershipState = MembershipState.JOIN, + isNameAmbiguous: Boolean = false, + powerLevel: Long = 0L, + isIgnored: Boolean = false, + role: RoomMemberRole = RoomMemberRole.USER, +) = RoomMember( + userId = userId.value, + displayName = displayName, + avatarUrl = avatarUrl, + membership = membership, + isNameAmbiguous = isNameAmbiguous, + powerLevel = powerLevel, + normalizedPowerLevel = powerLevel, + isIgnored = isIgnored, + suggestedRoleForPowerLevel = role, +)