From fe624747ca6cc55898a5717c082fde6b2d6b2a35 Mon Sep 17 00:00:00 2001 From: Kelrap Date: Tue, 8 Jul 2025 11:27:43 -0400 Subject: [PATCH] feat: unpin message on redact to avoid pinned redactions --- lib/pages/chat/chat.dart | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index 13238a6a8..c86e82685 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -855,7 +855,7 @@ class ChatController extends State future: () async { if (event.status.isSent) { if (event.canRedact) { - await event.redactEvent(reason: reason); + await redactAndUnpinEvent(event, reason: reason); } else { final client = currentRoomBundle.firstWhere( (cl) => selectedEvents.first.senderId == cl!.userID, @@ -865,7 +865,8 @@ class ChatController extends State return; } final room = client.getRoomById(roomId)!; - await Event.fromJson(event.toJson(), room).redactEvent( + await redactAndUnpinEvent( + Event.fromJson(event.toJson(), room), reason: reason, ); } @@ -1204,6 +1205,18 @@ class ChatController extends State ); } + Future redactAndUnpinEvent( + Event event, { + String? reason, + String? txid, + }) async { + final events = room.pinnedEventIds + ..removeWhere((oldEvent) => oldEvent == event.eventId); + room.setPinnedEvents(events); + + return await room.redactEvent(event.eventId, reason: reason, txid: txid); + } + Timer? _storeInputTimeoutTimer; static const Duration _storeInputTimeout = Duration(milliseconds: 500);