Separate eventId and id for TimelineItem.Event
This commit is contained in:
parent
0f6744ab74
commit
e5bd96049e
6 changed files with 17 additions and 8 deletions
|
|
@ -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)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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> {
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue