supporting local echos for text replies

This commit is contained in:
Adam Brown 2022-10-01 11:47:42 +01:00
parent d67d1eda13
commit ae693f7ee8
4 changed files with 24 additions and 8 deletions

View File

@ -11,14 +11,28 @@ internal class LocalEchoMapper(private val metaMapper: MetaMapper) {
fun MessageService.LocalEcho.toMessage(member: RoomMember): RoomEvent { fun MessageService.LocalEcho.toMessage(member: RoomMember): RoomEvent {
return when (val message = this.message) { return when (val message = this.message) {
is MessageService.Message.TextMessage -> { is MessageService.Message.TextMessage -> {
RoomEvent.Message( val mappedMessage = RoomEvent.Message(
eventId = this.eventId ?: EventId(this.localId), eventId = this.eventId ?: EventId(this.localId),
content = message.content.body, content = message.content.body,
author = member, author = member,
utcTimestamp = message.timestampUtc, utcTimestamp = message.timestampUtc,
meta = metaMapper.toMeta(this) meta = metaMapper.toMeta(this)
) )
when (val reply = message.reply) {
null -> mappedMessage
else -> RoomEvent.Reply(
mappedMessage, RoomEvent.Message(
eventId = reply.eventId,
content = reply.originalMessage,
author = reply.author,
utcTimestamp = reply.timestampUtc,
meta = MessageMeta.FromServer
)
)
} }
}
is MessageService.Message.ImageMessage -> { is MessageService.Message.ImageMessage -> {
RoomEvent.Image( RoomEvent.Image(
eventId = this.eventId ?: EventId(this.localId), eventId = this.eventId ?: EventId(this.localId),

View File

@ -123,14 +123,15 @@ internal class MessengerViewModel(
timestampUtc = clock.millis(), timestampUtc = clock.millis(),
reply = copy.reply?.let { reply = copy.reply?.let {
MessageService.Message.TextMessage.Reply( MessageService.Message.TextMessage.Reply(
authorId = it.author.id, author = it.author,
originalMessage = when (it) { originalMessage = when (it) {
is RoomEvent.Image -> TODO() is RoomEvent.Image -> TODO()
is RoomEvent.Reply -> TODO() is RoomEvent.Reply -> TODO()
is RoomEvent.Message -> it.content is RoomEvent.Message -> it.content
}, },
copy.value, replyContent = copy.value,
it.eventId eventId = it.eventId,
timestampUtc = it.utcTimestamp,
) )
} }
) )

View File

@ -43,10 +43,11 @@ interface MessageService : MatrixService {
) : Message { ) : Message {
@Serializable @Serializable
data class Reply( data class Reply(
val authorId: UserId, val author: RoomMember,
val originalMessage: String, val originalMessage: String,
val replyContent: String, val replyContent: String,
val eventId: EventId val eventId: EventId,
val timestampUtc: Long,
) )
} }

View File

@ -157,9 +157,9 @@ class ApiMessageMapper {
) )
else -> ApiMessage.TextMessage.TextContent( else -> ApiMessage.TextMessage.TextContent(
body = buildReplyFallback(reply.originalMessage, reply.authorId, reply.replyContent), body = buildReplyFallback(reply.originalMessage, reply.author.id, reply.replyContent),
relatesTo = ApiMessage.RelatesTo(ApiMessage.RelatesTo.InReplyTo(reply.eventId)), relatesTo = ApiMessage.RelatesTo(ApiMessage.RelatesTo.InReplyTo(reply.eventId)),
formattedBody = buildFormattedReply(reply.authorId, reply.originalMessage, reply.replyContent, this.roomId, reply.eventId), formattedBody = buildFormattedReply(reply.author.id, reply.originalMessage, reply.replyContent, this.roomId, reply.eventId),
format = "org.matrix.custom.html" format = "org.matrix.custom.html"
) )
} }