hide server ACL events from timeline by default, introduce setting to show them

This commit is contained in:
Henry Hiles 2026-10-23 14:29:37 -04:00
commit 9e6951818a
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs
3 changed files with 25 additions and 4 deletions

View file

@ -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(

View file

@ -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,

View file

@ -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 &&