TimelineEvent : fix memory leak

This commit is contained in:
ganfra 2023-09-11 17:47:58 +02:00
parent 0ff92b4f92
commit 4196b973f4

View file

@ -34,14 +34,22 @@ import io.element.android.libraries.matrix.impl.media.map
import io.element.android.libraries.matrix.impl.poll.map import io.element.android.libraries.matrix.impl.poll.map
import org.matrix.rustcomponents.sdk.TimelineItemContent import org.matrix.rustcomponents.sdk.TimelineItemContent
import org.matrix.rustcomponents.sdk.TimelineItemContentKind import org.matrix.rustcomponents.sdk.TimelineItemContentKind
import org.matrix.rustcomponents.sdk.use
import org.matrix.rustcomponents.sdk.EncryptedMessage as RustEncryptedMessage import org.matrix.rustcomponents.sdk.EncryptedMessage as RustEncryptedMessage
import org.matrix.rustcomponents.sdk.MembershipChange as RustMembershipChange import org.matrix.rustcomponents.sdk.MembershipChange as RustMembershipChange
import org.matrix.rustcomponents.sdk.OtherState as RustOtherState import org.matrix.rustcomponents.sdk.OtherState as RustOtherState
class TimelineEventContentMapper(private val eventMessageMapper: EventMessageMapper = EventMessageMapper()) { class TimelineEventContentMapper(private val eventMessageMapper: EventMessageMapper = EventMessageMapper()) {
fun map(content: TimelineItemContent): EventContent = content.use { fun map(content: TimelineItemContent): EventContent {
when (val kind = it.kind()) { return content.use { _ ->
content.kind().use { kind ->
map(content, kind)
}
}
}
private fun map(content: TimelineItemContent, kind: TimelineItemContentKind) = when (kind) {
is TimelineItemContentKind.FailedToParseMessageLike -> { is TimelineItemContentKind.FailedToParseMessageLike -> {
FailedToParseMessageLikeContent( FailedToParseMessageLikeContent(
eventType = kind.eventType, eventType = kind.eventType,
@ -56,7 +64,7 @@ class TimelineEventContentMapper(private val eventMessageMapper: EventMessageMap
) )
} }
TimelineItemContentKind.Message -> { TimelineItemContentKind.Message -> {
val message = it.asMessage() val message = content.asMessage()
if (message == null) { if (message == null) {
UnknownContent UnknownContent
} else { } else {
@ -112,7 +120,6 @@ class TimelineEventContentMapper(private val eventMessageMapper: EventMessageMap
} }
else -> UnknownContent else -> UnknownContent
} }
}
} }
private fun RustMembershipChange.map(): MembershipChange { private fun RustMembershipChange.map(): MembershipChange {