Separate eventId and id for TimelineItem.Event

This commit is contained in:
ganfra 2023-02-07 19:47:49 +01:00
parent 0f6744ab74
commit e5bd96049e
6 changed files with 17 additions and 8 deletions

View file

@ -111,12 +111,14 @@ class MessagesPresenter @Inject constructor(
} }
private suspend fun handleActionRedact(event: TimelineItem.Event) { private suspend fun handleActionRedact(event: TimelineItem.Event) {
room.redactEvent(event.id) if (event.eventId == null) return
room.redactEvent(event.eventId)
} }
private fun handleActionEdit(targetEvent: TimelineItem.Event, composerState: MessageComposerState) { private fun handleActionEdit(targetEvent: TimelineItem.Event, composerState: MessageComposerState) {
if (targetEvent.eventId == null) return
val composerMode = MessageComposerMode.Edit( val composerMode = MessageComposerMode.Edit(
targetEvent.id, targetEvent.eventId,
(targetEvent.content as? TimelineItemTextBasedContent)?.body.orEmpty() (targetEvent.content as? TimelineItemTextBasedContent)?.body.orEmpty()
) )
composerState.eventSink( composerState.eventSink(
@ -125,7 +127,8 @@ class MessagesPresenter @Inject constructor(
} }
private fun handleActionReply(targetEvent: TimelineItem.Event, composerState: MessageComposerState) { private fun handleActionReply(targetEvent: TimelineItem.Event, composerState: MessageComposerState) {
val composerMode = MessageComposerMode.Reply(targetEvent.safeSenderName, targetEvent.id, "") if (targetEvent.eventId == null) return
val composerMode = MessageComposerMode.Reply(targetEvent.safeSenderName, targetEvent.eventId, "")
composerState.eventSink( composerState.eventSink(
MessageComposerEvents.SetMode(composerMode) MessageComposerEvents.SetMode(composerMode)
) )

View file

@ -141,12 +141,13 @@ fun TimelineView(
private fun TimelineItem.key(): String { private fun TimelineItem.key(): String {
return when (this) { return when (this) {
is TimelineItem.Event -> id.value is TimelineItem.Event -> id
is TimelineItem.Virtual -> id is TimelineItem.Virtual -> id
} }
} }
private fun TimelineItem.contentType(): Int { private fun TimelineItem.contentType(): Int {
// Todo optimize for each subtype
return when (this) { return when (this) {
is TimelineItem.Event -> 0 is TimelineItem.Event -> 0
is TimelineItem.Virtual -> 1 is TimelineItem.Virtual -> 1
@ -415,7 +416,7 @@ private fun createMessageEvent(
groupPosition: MessagesItemGroupPosition groupPosition: MessagesItemGroupPosition
): TimelineItem { ): TimelineItem {
return TimelineItem.Event( return TimelineItem.Event(
id = EventId(Math.random().toString()), id = Math.random().toString(),
senderId = "senderId", senderId = "senderId",
senderAvatar = AvatarData("sender"), senderAvatar = AvatarData("sender"),
content = content, content = content,

View file

@ -22,7 +22,6 @@ import io.element.android.features.messages.timeline.model.TimelineItem
import io.element.android.features.messages.timeline.model.TimelineItemReactions import io.element.android.features.messages.timeline.model.TimelineItemReactions
import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarData
import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.components.avatar.AvatarSize
import io.element.android.libraries.matrix.core.EventId
import io.element.android.libraries.matrix.room.MatrixRoom import io.element.android.libraries.matrix.room.MatrixRoom
import io.element.android.libraries.matrix.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.timeline.MatrixTimelineItem
import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toImmutableList
@ -64,7 +63,8 @@ class TimelineItemEventFactory @Inject constructor(
size = AvatarSize.SMALL size = AvatarSize.SMALL
) )
return TimelineItem.Event( return TimelineItem.Event(
id = EventId(currentTimelineItem.uniqueId), id = currentTimelineItem.uniqueId,
eventId = currentTimelineItem.eventId,
senderId = currentSender, senderId = currentSender,
senderDisplayName = senderDisplayName, senderDisplayName = senderDisplayName,
senderAvatar = senderAvatarData, senderAvatar = senderAvatarData,

View file

@ -30,7 +30,8 @@ sealed interface TimelineItem {
) : TimelineItem ) : TimelineItem
data class Event( data class Event(
val id: EventId, val id: String,
val eventId: EventId? = null,
val senderId: String, val senderId: String,
val senderDisplayName: String?, val senderDisplayName: String?,
val senderAvatar: AvatarData, val senderAvatar: AvatarData,

View file

@ -16,9 +16,11 @@
package io.element.android.features.messages.timeline.model.event package io.element.android.features.messages.timeline.model.event
import androidx.compose.runtime.Immutable
import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import org.matrix.rustcomponents.sdk.EncryptedMessage import org.matrix.rustcomponents.sdk.EncryptedMessage
@Immutable
sealed interface TimelineItemEventContent sealed interface TimelineItemEventContent
class MessagesTimelineItemContentProvider : PreviewParameterProvider<TimelineItemEventContent> { class MessagesTimelineItemContentProvider : PreviewParameterProvider<TimelineItemEventContent> {

View file

@ -16,6 +16,7 @@
package io.element.android.libraries.matrix.timeline package io.element.android.libraries.matrix.timeline
import io.element.android.libraries.matrix.core.EventId
import org.matrix.rustcomponents.sdk.EventTimelineItem import org.matrix.rustcomponents.sdk.EventTimelineItem
import org.matrix.rustcomponents.sdk.TimelineItem import org.matrix.rustcomponents.sdk.TimelineItem
import org.matrix.rustcomponents.sdk.VirtualTimelineItem import org.matrix.rustcomponents.sdk.VirtualTimelineItem
@ -23,6 +24,7 @@ import org.matrix.rustcomponents.sdk.VirtualTimelineItem
sealed interface MatrixTimelineItem { sealed interface MatrixTimelineItem {
data class Event(val event: EventTimelineItem) : MatrixTimelineItem { data class Event(val event: EventTimelineItem) : MatrixTimelineItem {
val uniqueId: String = event.uniqueIdentifier() val uniqueId: String = event.uniqueIdentifier()
val eventId: EventId? = event.eventId()?.let { EventId(it) }
} }
data class Virtual(val virtual: VirtualTimelineItem) : MatrixTimelineItem data class Virtual(val virtual: VirtualTimelineItem) : MatrixTimelineItem