From 650f1ac8e40f8c782b4d59d3919f2d8d39022622 Mon Sep 17 00:00:00 2001 From: Henry-Hiles Date: Sat, 3 Oct 2026 13:24:47 -0400 Subject: [PATCH 1/2] allow hiding gomuks internal messages --- lib/helpers/extensions/build_event_options.dart | 5 +++-- lib/helpers/extensions/event_id_is_fake.dart | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 lib/helpers/extensions/event_id_is_fake.dart diff --git a/lib/helpers/extensions/build_event_options.dart b/lib/helpers/extensions/build_event_options.dart index e562d85..fdf3bdf 100644 --- a/lib/helpers/extensions/build_event_options.dart +++ b/lib/helpers/extensions/build_event_options.dart @@ -10,6 +10,7 @@ import "package:nexus/controllers/recent_emoji.dart"; import "package:nexus/controllers/rooms.dart"; import "package:nexus/controllers/room_chat.dart"; import "package:nexus/controllers/via.dart"; +import "package:nexus/helpers/extensions/event_id_is_fake.dart"; import "package:nexus/models/content/message.dart"; import "package:nexus/models/event.dart"; import "package:nexus/models/relation_type.dart"; @@ -229,7 +230,7 @@ extension BuildEventOptions on Event { .redaction(targetUser: sender, roomId: roomId), ), ) && - !eventId.startsWith("~")) + !eventId.isFake) PopupMenuItem( onTap: () => showReasonDialog( title: "Delete Message", @@ -246,7 +247,7 @@ extension BuildEventOptions on Event { ), ), - if (eventId.startsWith("~")) + if (eventId.isFake) PopupMenuItem( onTap: () => ref.watch(notifier).hideClientSticky(rowId), child: ListTile( diff --git a/lib/helpers/extensions/event_id_is_fake.dart b/lib/helpers/extensions/event_id_is_fake.dart new file mode 100644 index 0000000..2e660af --- /dev/null +++ b/lib/helpers/extensions/event_id_is_fake.dart @@ -0,0 +1,3 @@ +extension EventIdIsFake on String { + bool get isFake => startsWith("~") || startsWith("\$gomuks"); +} From 0a3ec830a35b9f2c334b8555de9ca15423e691b0 Mon Sep 17 00:00:00 2001 From: Henry-Hiles Date: Sat, 3 Oct 2026 13:50:46 -0400 Subject: [PATCH 2/2] stop event preview resizing itself on load Fixes #109 --- lib/widgets/event_preview.dart | 19 +++++++------ lib/widgets/loading.dart | 8 ++++-- lib/widgets/renderers/message.dart | 43 ++++++++++++++++++------------ 3 files changed, 43 insertions(+), 27 deletions(-) diff --git a/lib/widgets/event_preview.dart b/lib/widgets/event_preview.dart index 9bd3392..d15c8ab 100644 --- a/lib/widgets/event_preview.dart +++ b/lib/widgets/event_preview.dart @@ -18,17 +18,20 @@ class const EventPreview(final Event event, {super.key}) if (event.content is MessageContent) MessageAvatar(event), Flexible( - child: Wrap( + child: Row( crossAxisAlignment: .center, + mainAxisSize: .min, spacing: 8, - runSpacing: 2, children: [ - if (event.content is MessageContent) MessageDisplayname(event), - EventRenderer( - event.rowId, - roomId: event.roomId, - textOnly: true, - maxLines: 1, + if (event.content is MessageContent) + Flexible(child: MessageDisplayname(event)), + Flexible( + child: EventRenderer( + event.rowId, + roomId: event.roomId, + textOnly: true, + maxLines: 1, + ), ), ], ), diff --git a/lib/widgets/loading.dart b/lib/widgets/loading.dart index 180cd1b..e92860e 100644 --- a/lib/widgets/loading.dart +++ b/lib/widgets/loading.dart @@ -1,11 +1,15 @@ import "package:material_ui/material_ui.dart"; -class const Loading({super.key, final double? height}) extends StatelessWidget { +class const Loading({super.key, final double? dimension}) + extends StatelessWidget { @override Widget build(BuildContext context) => Center( child: Padding( padding: .all(16), - child: SizedBox(height: height, child: CircularProgressIndicator()), + child: SizedBox.square( + dimension: dimension, + child: CircularProgressIndicator(), + ), ), ); } diff --git a/lib/widgets/renderers/message.dart b/lib/widgets/renderers/message.dart index 43c0c2a..b2dda31 100644 --- a/lib/widgets/renderers/message.dart +++ b/lib/widgets/renderers/message.dart @@ -13,6 +13,7 @@ import "package:nexus/widgets/html/html.dart"; import "package:nexus/widgets/lazy_loading/message_avatar.dart"; import "package:nexus/widgets/lazy_loading/message_displayname.dart"; import "package:nexus/widgets/linkified_text.dart"; +import "package:nexus/widgets/loading.dart"; import "package:nexus/widgets/message_image.dart"; import "package:nexus/widgets/reaction_row.dart"; import "package:nexus/widgets/timestamp.dart"; @@ -197,24 +198,32 @@ class const MessageRenderer( onTap: onTapReply, child: Padding( padding: .symmetric(vertical: 8, horizontal: 12), - child: switch (ref.watch( - EventController.provider( - .new( - roomId: event.roomId, - eventId: event.replyTo!, - ), + child: SizedBox( + height: 32, + child: OverflowBox( + alignment: .centerLeft, + minHeight: 0, + maxHeight: .infinity, + child: switch (ref.watch( + EventController.provider( + .new( + roomId: event.roomId, + eventId: event.replyTo!, + ), + ), + )) { + AsyncData(:final value?) || + AsyncLoading( + :final value?, + ) => EventPreview(value), + AsyncError _ => Text( + "An error occurred while fetching the reply", + style: errorStyle, + ), + _ => Loading(dimension: 12), + }, ), - )) { - AsyncData(:final value?) || - AsyncLoading( - :final value?, - ) => EventPreview(value), - AsyncError _ => Text( - "An error occurred while fetching the reply", - style: errorStyle, - ), - _ => Text("Fetching event..."), - }, + ), ), ), ),