From 937e053d46995b53fa5a3ee926db78e61770230f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 4 Oct 2023 17:38:17 +0200 Subject: [PATCH] Fetch edited event in advanced (similar to reply mode). --- .../MessageComposerPresenter.kt | 9 +++++++-- .../libraries/matrix/api/room/MatrixRoom.kt | 2 +- .../matrix/impl/room/RustMatrixRoom.kt | 20 ++++++++++--------- .../matrix/test/room/FakeMatrixRoom.kt | 2 +- 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenter.kt index 30747786b8..f94b7a9431 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenter.kt @@ -167,9 +167,14 @@ class MessageComposerPresenter @Inject constructor( ) is MessageComposerEvents.SetMode -> { messageComposerContext.composerMode = event.composerMode - if (event.composerMode is MessageComposerMode.Reply) { + when (event.composerMode) { + is MessageComposerMode.Reply -> event.composerMode.eventId + is MessageComposerMode.Edit -> event.composerMode.eventId + is MessageComposerMode.Normal -> null + is MessageComposerMode.Quote -> null + }.let { relatedEventId -> appCoroutineScope.launch { - room.enterReplyMode(event.composerMode.eventId) + room.enterSpecialMode(relatedEventId) } } } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt index 75b4a3fce0..e14138f837 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt @@ -89,7 +89,7 @@ interface MatrixRoom : Closeable { suspend fun editMessage(originalEventId: EventId?, transactionId: TransactionId?, body: String, htmlBody: String?): Result - suspend fun enterReplyMode(eventId: EventId): Result + suspend fun enterSpecialMode(eventId: EventId?): Result suspend fun replyMessage(eventId: EventId, body: String, htmlBody: String?): Result diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt index 58e0498dce..2fd9760b21 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt @@ -124,7 +124,7 @@ class RustMatrixRoom( roomCoroutineScope.cancel() innerRoom.destroy() roomListItem.destroy() - inReplyToEventTimelineItem?.destroy() + specialModeEventTimelineItem?.destroy() } override val name: String? @@ -238,12 +238,14 @@ class RustMatrixRoom( withContext(roomDispatcher) { if (originalEventId != null) { runCatching { - innerRoom.getEventTimelineItemByEventId(originalEventId.value).use { + val editedEvent = specialModeEventTimelineItem ?: innerRoom.getEventTimelineItemByEventId(originalEventId.value) + editedEvent.use { innerRoom.edit( newContent = messageEventContentFromParts(body, htmlBody), editItem = it, ) } + specialModeEventTimelineItem = null } } else { runCatching { @@ -253,23 +255,23 @@ class RustMatrixRoom( } } - private var inReplyToEventTimelineItem: EventTimelineItem? = null + private var specialModeEventTimelineItem: EventTimelineItem? = null - override suspend fun enterReplyMode(eventId: EventId): Result = withContext(roomDispatcher) { + override suspend fun enterSpecialMode(eventId: EventId?): Result = withContext(roomDispatcher) { runCatching { - inReplyToEventTimelineItem?.destroy() - inReplyToEventTimelineItem = null - inReplyToEventTimelineItem = innerRoom.getEventTimelineItemByEventId(eventId.value) + specialModeEventTimelineItem?.destroy() + specialModeEventTimelineItem = null + specialModeEventTimelineItem = eventId?.let { innerRoom.getEventTimelineItemByEventId(it.value) } } } override suspend fun replyMessage(eventId: EventId, body: String, htmlBody: String?): Result = withContext(roomDispatcher) { runCatching { - val inReplyTo = inReplyToEventTimelineItem ?: innerRoom.getEventTimelineItemByEventId(eventId.value) + val inReplyTo = specialModeEventTimelineItem ?: innerRoom.getEventTimelineItemByEventId(eventId.value) inReplyTo.use { eventTimelineItem -> innerRoom.sendReply(messageEventContentFromParts(body, htmlBody), eventTimelineItem) } - inReplyToEventTimelineItem = null + specialModeEventTimelineItem = null } } diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt index bfbdb4206c..4934867b55 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt @@ -208,7 +208,7 @@ class FakeMatrixRoom( var replyMessageParameter: Pair? = null private set - override suspend fun enterReplyMode(eventId: EventId): Result { + override suspend fun enterSpecialMode(eventId: EventId?): Result { return Result.success(Unit) }