Restore fun interface for a sweeter code.

This commit is contained in:
Benoit Marty 2024-10-16 17:12:46 +02:00
parent 70c643be5e
commit 0db54df877
10 changed files with 31 additions and 53 deletions

View file

@ -28,7 +28,8 @@ data class EventTimelineItem(
val timestamp: Long,
val content: EventContent,
val origin: TimelineItemEventOrigin?,
val lazyTimelineItemProvider: LazyTimelineItemProvider,
val timelineItemDebugInfoProvider: TimelineItemDebugInfoProvider,
val messageShieldProvider: MessageShieldProvider,
) {
fun inReplyTo(): InReplyTo? {
return (content as? MessageContent)?.inReplyTo
@ -44,7 +45,10 @@ data class EventTimelineItem(
}
}
interface LazyTimelineItemProvider {
fun getTimelineItemDebugInfo(): TimelineItemDebugInfo
fun getShield(strict: Boolean): MessageShield?
fun interface TimelineItemDebugInfoProvider {
operator fun invoke(): TimelineItemDebugInfo
}
fun interface MessageShieldProvider {
operator fun invoke(strict: Boolean): MessageShield?
}

View file

@ -14,7 +14,6 @@ import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo
import io.element.android.libraries.matrix.api.timeline.item.event.EventReaction
import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem
import io.element.android.libraries.matrix.api.timeline.item.event.LazyTimelineItemProvider
import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState
import io.element.android.libraries.matrix.api.timeline.item.event.MessageShield
import io.element.android.libraries.matrix.api.timeline.item.event.ProfileTimelineDetails
@ -32,7 +31,6 @@ import uniffi.matrix_sdk_common.ShieldStateCode
import org.matrix.rustcomponents.sdk.EventSendState as RustEventSendState
import org.matrix.rustcomponents.sdk.EventTimelineItem as RustEventTimelineItem
import org.matrix.rustcomponents.sdk.EventTimelineItemDebugInfo as RustEventTimelineItemDebugInfo
import org.matrix.rustcomponents.sdk.LazyTimelineItemProvider as RustLazyTimelineItemProvider
import org.matrix.rustcomponents.sdk.ProfileDetails as RustProfileDetails
import org.matrix.rustcomponents.sdk.Receipt as RustReceipt
import uniffi.matrix_sdk_ui.EventItemOrigin as RustEventItemOrigin
@ -56,7 +54,8 @@ class EventTimelineItemMapper(
timestamp = timestamp.toLong(),
content = contentMapper.map(content),
origin = origin?.map(),
lazyTimelineItemProvider = LazyTimelineItemProviderWrapper(lazyProvider)
timelineItemDebugInfoProvider = { lazyProvider.debugInfo().map() },
messageShieldProvider = { strict -> lazyProvider.getShields(strict)?.map() },
)
}
}
@ -164,16 +163,6 @@ private fun ShieldState?.map(): MessageShield? {
}
}
class LazyTimelineItemProviderWrapper(private val provider: RustLazyTimelineItemProvider) : LazyTimelineItemProvider {
override fun getTimelineItemDebugInfo(): TimelineItemDebugInfo {
return provider.debugInfo().map()
}
override fun getShield(strict: Boolean): MessageShield? {
return provider.getShields(strict)?.map()
}
}
private fun EventOrTransactionId.eventId(): EventId? {
return (this as? EventOrTransactionId.EventId)?.let { EventId(it.eventId) }
}

View file

@ -19,7 +19,6 @@ import io.element.android.libraries.matrix.api.timeline.item.event.EventContent
import io.element.android.libraries.matrix.api.timeline.item.event.EventReaction
import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem
import io.element.android.libraries.matrix.api.timeline.item.event.InReplyTo
import io.element.android.libraries.matrix.api.timeline.item.event.LazyTimelineItemProvider
import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState
import io.element.android.libraries.matrix.api.timeline.item.event.MessageContent
import io.element.android.libraries.matrix.api.timeline.item.event.MessageShield
@ -69,10 +68,8 @@ fun anEventTimelineItem(
timestamp = timestamp,
content = content,
origin = null,
lazyTimelineItemProvider = object : LazyTimelineItemProvider {
override fun getTimelineItemDebugInfo() = debugInfo
override fun getShield(strict: Boolean) = messageShield
},
timelineItemDebugInfoProvider = { debugInfo },
messageShieldProvider = { messageShield },
)
fun aProfileTimelineDetails(