diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomSummaryDetailsFactory.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomSummaryDetailsFactory.kt index 26a14a3b86..e40729d676 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomSummaryDetailsFactory.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomSummaryDetailsFactory.kt @@ -16,16 +16,16 @@ package io.element.android.libraries.matrix.impl.room -import io.element.android.libraries.matrix.impl.room.message.RoomMessageFactory import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.room.RoomSummaryDetails +import io.element.android.libraries.matrix.impl.room.message.RoomMessageFactory import org.matrix.rustcomponents.sdk.Room import org.matrix.rustcomponents.sdk.SlidingSyncRoom class RoomSummaryDetailsFactory(private val roomMessageFactory: RoomMessageFactory = RoomMessageFactory()) { fun create(slidingSyncRoom: SlidingSyncRoom, room: Room?): RoomSummaryDetails { - val latestRoomMessage = slidingSyncRoom.latestRoomMessage()?.let { + val latestRoomMessage = slidingSyncRoom.latestRoomMessage()?.use { roomMessageFactory.create(it) } val computedLastMessage = when { @@ -38,7 +38,7 @@ class RoomSummaryDetailsFactory(private val roomMessageFactory: RoomMessageFacto name = slidingSyncRoom.name() ?: slidingSyncRoom.roomId(), isDirect = slidingSyncRoom.isDm() ?: false, avatarURLString = room?.avatarUrl(), - unreadNotificationCount = slidingSyncRoom.unreadNotifications().notificationCount().toInt(), + unreadNotificationCount = slidingSyncRoom.unreadNotifications().use { it.notificationCount().toInt() }, lastMessage = computedLastMessage, lastMessageTimestamp = latestRoomMessage?.originServerTs ) 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 cae0515f5a..8691c06664 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 @@ -17,10 +17,10 @@ package io.element.android.libraries.matrix.impl.room import io.element.android.libraries.core.coroutine.CoroutineDispatchers -import io.element.android.libraries.matrix.impl.sync.roomListDiff -import io.element.android.libraries.matrix.impl.sync.state import io.element.android.libraries.matrix.api.room.RoomSummary import io.element.android.libraries.matrix.api.room.RoomSummaryDataSource +import io.element.android.libraries.matrix.impl.sync.roomListDiff +import io.element.android.libraries.matrix.impl.sync.state import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.cancel @@ -179,10 +179,14 @@ internal class RustRoomSummaryDataSource( } private fun buildRoomSummaryForIdentifier(identifier: String): RoomSummary { - val room = slidingSync.getRoom(identifier) ?: return RoomSummary.Empty(identifier) - return RoomSummary.Filled( - details = roomSummaryDetailsFactory.create(room, room.fullRoom()) + val slidingSyncRoom = slidingSync.getRoom(identifier) ?: return RoomSummary.Empty(identifier) + val fullRoom = slidingSyncRoom.fullRoom() + val roomSummary = RoomSummary.Filled( + details = roomSummaryDetailsFactory.create(slidingSyncRoom, fullRoom) ) + fullRoom?.destroy() + slidingSyncRoom.destroy() + return roomSummary } private suspend fun updateRoomSummaries(block: MutableList.() -> Unit) =