diff --git a/lib/controllers/settings_sections.dart b/lib/controllers/settings_sections.dart index 6fa42dc..1a98a43 100644 --- a/lib/controllers/settings_sections.dart +++ b/lib/controllers/settings_sections.dart @@ -230,6 +230,21 @@ class SettingsSectionsController .onError(showError), ), ), + .new( + title: "Hide Server ACL Events", + description: "Hides server ACL (server ban list) changes from appearing in conversations.", + icon: Icons.dns, + builder: (title, description, icon) => SwitchListTile( + title: Text(title), + subtitle: Text(description), + secondary: Icon(icon), + value: settings.hideServerAclEvents, + onChanged: (value) => ref + .read(SettingsController.provider.notifier) + .set(settings.copyWith(hideServerAclEvents: value)) + .onError(showError), + ), + ), ]), ), .new( diff --git a/lib/models/settings.dart b/lib/models/settings.dart index 9b26f14..e3b95a2 100644 --- a/lib/models/settings.dart +++ b/lib/models/settings.dart @@ -17,6 +17,7 @@ class const Settings({ final bool showMinimizeButton = false, final bool swipeToReply = false, final bool hideMembershipEvents = false, + final bool hideServerAclEvents = true, final RoomOrder roomOrder = .unreadFirst, final NameColor nameColor = .powerLevel, final ShowAndSend typingIndicators = .showAndSend, diff --git a/lib/widgets/renderers/event.dart b/lib/widgets/renderers/event.dart index 87637c9..6ed2ffd 100644 --- a/lib/widgets/renderers/event.dart +++ b/lib/widgets/renderers/event.dart @@ -90,12 +90,13 @@ class const EventRenderer( if (event == null) return SizedBox.shrink(); - final hideMembershipEvents = (ref + final (hideMembershipEvents, hideServerAclEvents) = ref .watch(SettingsController.provider) .maybeWhen( - orElse: () => false, - data: (settings) => settings.hideMembershipEvents, - )); + orElse: () => (false, true), + data: (settings) => + (settings.hideMembershipEvents, settings.hideServerAclEvents), + ); // Knocks and their outcomes stay visible, as moderators need to act on them if (hideMembershipEvents && @@ -106,6 +107,10 @@ class const EventRenderer( return SizedBox.shrink(); } + if (hideServerAclEvents && event.content is ServerACLContent) { + return SizedBox.shrink(); + } + final isGrouped = (previousEvent?.isShownAsMessage ?? false) && event.sender == previousEvent?.sender &&