[MatrixSDK] makes sure to release FFI objects from RustRoomSummaryDataSource
This commit is contained in:
parent
bdf754c26b
commit
c7519149fd
2 changed files with 12 additions and 8 deletions
|
|
@ -16,16 +16,16 @@
|
||||||
|
|
||||||
package io.element.android.libraries.matrix.impl.room
|
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.core.RoomId
|
||||||
import io.element.android.libraries.matrix.api.room.RoomSummaryDetails
|
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.Room
|
||||||
import org.matrix.rustcomponents.sdk.SlidingSyncRoom
|
import org.matrix.rustcomponents.sdk.SlidingSyncRoom
|
||||||
|
|
||||||
class RoomSummaryDetailsFactory(private val roomMessageFactory: RoomMessageFactory = RoomMessageFactory()) {
|
class RoomSummaryDetailsFactory(private val roomMessageFactory: RoomMessageFactory = RoomMessageFactory()) {
|
||||||
|
|
||||||
fun create(slidingSyncRoom: SlidingSyncRoom, room: Room?): RoomSummaryDetails {
|
fun create(slidingSyncRoom: SlidingSyncRoom, room: Room?): RoomSummaryDetails {
|
||||||
val latestRoomMessage = slidingSyncRoom.latestRoomMessage()?.let {
|
val latestRoomMessage = slidingSyncRoom.latestRoomMessage()?.use {
|
||||||
roomMessageFactory.create(it)
|
roomMessageFactory.create(it)
|
||||||
}
|
}
|
||||||
val computedLastMessage = when {
|
val computedLastMessage = when {
|
||||||
|
|
@ -38,7 +38,7 @@ class RoomSummaryDetailsFactory(private val roomMessageFactory: RoomMessageFacto
|
||||||
name = slidingSyncRoom.name() ?: slidingSyncRoom.roomId(),
|
name = slidingSyncRoom.name() ?: slidingSyncRoom.roomId(),
|
||||||
isDirect = slidingSyncRoom.isDm() ?: false,
|
isDirect = slidingSyncRoom.isDm() ?: false,
|
||||||
avatarURLString = room?.avatarUrl(),
|
avatarURLString = room?.avatarUrl(),
|
||||||
unreadNotificationCount = slidingSyncRoom.unreadNotifications().notificationCount().toInt(),
|
unreadNotificationCount = slidingSyncRoom.unreadNotifications().use { it.notificationCount().toInt() },
|
||||||
lastMessage = computedLastMessage,
|
lastMessage = computedLastMessage,
|
||||||
lastMessageTimestamp = latestRoomMessage?.originServerTs
|
lastMessageTimestamp = latestRoomMessage?.originServerTs
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -17,10 +17,10 @@
|
||||||
package io.element.android.libraries.matrix.impl.room
|
package io.element.android.libraries.matrix.impl.room
|
||||||
|
|
||||||
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
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.RoomSummary
|
||||||
import io.element.android.libraries.matrix.api.room.RoomSummaryDataSource
|
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.CoroutineScope
|
||||||
import kotlinx.coroutines.SupervisorJob
|
import kotlinx.coroutines.SupervisorJob
|
||||||
import kotlinx.coroutines.cancel
|
import kotlinx.coroutines.cancel
|
||||||
|
|
@ -179,10 +179,14 @@ internal class RustRoomSummaryDataSource(
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun buildRoomSummaryForIdentifier(identifier: String): RoomSummary {
|
private fun buildRoomSummaryForIdentifier(identifier: String): RoomSummary {
|
||||||
val room = slidingSync.getRoom(identifier) ?: return RoomSummary.Empty(identifier)
|
val slidingSyncRoom = slidingSync.getRoom(identifier) ?: return RoomSummary.Empty(identifier)
|
||||||
return RoomSummary.Filled(
|
val fullRoom = slidingSyncRoom.fullRoom()
|
||||||
details = roomSummaryDetailsFactory.create(room, room.fullRoom())
|
val roomSummary = RoomSummary.Filled(
|
||||||
|
details = roomSummaryDetailsFactory.create(slidingSyncRoom, fullRoom)
|
||||||
)
|
)
|
||||||
|
fullRoom?.destroy()
|
||||||
|
slidingSyncRoom.destroy()
|
||||||
|
return roomSummary
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun updateRoomSummaries(block: MutableList<RoomSummary>.() -> Unit) =
|
private suspend fun updateRoomSummaries(block: MutableList<RoomSummary>.() -> Unit) =
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue