From f9f4a4b48e490f0353db33e7e40bd69d06899c6a Mon Sep 17 00:00:00 2001 From: Henry-Hiles Date: Tue, 6 Jan 2026 11:20:17 -0500 Subject: [PATCH] working edits --- lib/controllers/room_chat_controller.dart | 16 +++++++++++++--- lib/helpers/extensions/event_to_message.dart | 1 - lib/widgets/chat_page/chat_box.dart | 6 +++++- lib/widgets/chat_page/room_chat.dart | 1 + 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/lib/controllers/room_chat_controller.dart b/lib/controllers/room_chat_controller.dart index 1a1be39..8811c4f 100644 --- a/lib/controllers/room_chat_controller.dart +++ b/lib/controllers/room_chat_controller.dart @@ -40,7 +40,16 @@ class RoomChatController extends AsyncNotifier { if (oldMessage == null || message == null) return; return await updateMessage( oldMessage, - message.copyWith(id: oldMessage.id), + message.copyWith( + id: oldMessage.id, + replyToMessageId: oldMessage.replyToMessageId, + metadata: { + ...(oldMessage.metadata ?? {}), + ...((message.metadata ?? {}).filterMap( + (key, value) => value == null ? null : MapEntry(key, value), + )), + }, + ), ); } if (message != null) { @@ -119,8 +128,9 @@ class RoomChatController extends AsyncNotifier { await room.sendTextEvent( taggedMessage, editEventId: relationType == RelationType.edit ? relation?.id : null, - inReplyTo: (relationType == RelationType.reply && relation != null) - ? await room.getEventById(relation.id) + displayPendingEvent: relationType != RelationType.edit, + inReplyTo: (relationType == RelationType.reply) + ? await room.getEventById(relation!.id) : null, ); } diff --git a/lib/helpers/extensions/event_to_message.dart b/lib/helpers/extensions/event_to_message.dart index c003180..055fcc8 100644 --- a/lib/helpers/extensions/event_to_message.dart +++ b/lib/helpers/extensions/event_to_message.dart @@ -9,7 +9,6 @@ extension EventToMessage on Event { bool includeEdits = false, }) async { final replyId = inReplyToEventId(); - final newEvent = (unsigned?["m.relations"] as Map?)?["m.replace"]; final event = newEvent == null ? this : Event.fromJson(newEvent, room); diff --git a/lib/widgets/chat_page/chat_box.dart b/lib/widgets/chat_page/chat_box.dart index 016e3a7..beee0d2 100644 --- a/lib/widgets/chat_page/chat_box.dart +++ b/lib/widgets/chat_page/chat_box.dart @@ -35,9 +35,13 @@ class ChatBox extends HookConsumerWidget { relatedMessage is TextMessage && controller.value.text.isEmpty) { final text = (relatedMessage as TextMessage).text; - controller.value.text = relatedMessage?.replyToMessageId == null + final splitText = relatedMessage?.replyToMessageId == null ? text : text.split("\n\n").sublist(1).join("\n\n"); + final notEmpty = splitText.isEmpty ? text : splitText; + controller.value.text = notEmpty.startsWith("* ") + ? notEmpty.substring(2) + : notEmpty; } void send() { diff --git a/lib/widgets/chat_page/room_chat.dart b/lib/widgets/chat_page/room_chat.dart index 0190e64..9514c88 100644 --- a/lib/widgets/chat_page/room_chat.dart +++ b/lib/widgets/chat_page/room_chat.dart @@ -67,6 +67,7 @@ class RoomChat extends HookConsumerWidget { title: Text("Reply"), ), ), + // Should check if is state event (has state_key), if so, don't show edit option if (message.authorId == room.roomData.client.userID) PopupMenuItem( onTap: () {