feat: Collapse all state events by default

This commit is contained in:
Christian Kußowski 2025-06-21 11:15:28 +02:00
commit 103cb8328d
No known key found for this signature in database
GPG key ID: E067ECD60F1A0652
9 changed files with 121 additions and 79 deletions

View file

@ -3,33 +3,9 @@ import 'package:matrix/matrix.dart';
import '../../config/app_config.dart';
extension VisibleInGuiExtension on List<Event> {
List<Event> filterByVisibleInGui({String? exceptionEventId}) {
final visibleEvents =
where((e) => e.isVisibleInGui || e.eventId == exceptionEventId)
.toList();
// Hide creation state events:
if (visibleEvents.isNotEmpty &&
visibleEvents.last.type == EventTypes.RoomCreate) {
var i = visibleEvents.length - 2;
while (i > 0) {
final event = visibleEvents[i];
if (!event.isState) break;
if (event.type == EventTypes.Encryption) {
i--;
continue;
}
if (event.type == EventTypes.RoomMember &&
event.roomMemberChangeType == RoomMemberChangeType.acceptInvite) {
i--;
continue;
}
visibleEvents.removeAt(i);
i--;
}
}
return visibleEvents;
}
List<Event> filterByVisibleInGui({String? exceptionEventId}) => where(
(event) => event.isVisibleInGui || event.eventId == exceptionEventId,
).toList();
}
extension IsStateExtension on Event {
@ -45,19 +21,19 @@ extension IsStateExtension on Event {
// if we enabled to hide all redacted events, don't show those
(!AppConfig.hideRedactedEvents || !redacted) &&
// if we enabled to hide all unknown events, don't show those
(!AppConfig.hideUnknownEvents || isEventTypeKnown) &&
// remove state events that we don't want to render
(isState || !AppConfig.hideAllStateEvents) &&
// hide simple join/leave member events in public rooms
(!AppConfig.hideUnimportantStateEvents ||
type != EventTypes.RoomMember ||
room.joinRules != JoinRules.public ||
content.tryGet<String>('membership') == 'ban' ||
stateKey != senderId);
(!AppConfig.hideUnknownEvents || isEventTypeKnown);
bool get isState => !{
EventTypes.Message,
EventTypes.Sticker,
EventTypes.Encrypted,
}.contains(type);
bool get isCollapsedState => !{
EventTypes.Message,
EventTypes.Sticker,
EventTypes.Encrypted,
EventTypes.RoomCreate,
EventTypes.RoomTombstone,
}.contains(type);
}