From 70eba46c76070ba14e0387cfe67dcf769acb4169 Mon Sep 17 00:00:00 2001 From: Henry-Hiles Date: Tue, 26 May 2026 19:22:53 -0400 Subject: [PATCH] add and render HistoryVisibilityContent --- lib/models/content/content.dart | 5 +++++ lib/models/content/history_visibility.dart | 19 ++++++++++++++++++ lib/widgets/renderers/event.dart | 23 ++++++++++++++++++++++ 3 files changed, 47 insertions(+) create mode 100644 lib/models/content/history_visibility.dart diff --git a/lib/models/content/content.dart b/lib/models/content/content.dart index 2896049..e6382e0 100644 --- a/lib/models/content/content.dart +++ b/lib/models/content/content.dart @@ -14,6 +14,7 @@ import "package:nexus/models/content/encrypted.dart"; import "package:nexus/models/content/redaction.dart"; import "package:nexus/models/content/server_acl.dart"; import "package:nexus/models/content/topic.dart"; +import "package:nexus/models/content/history_visibility.dart"; class Content { final Error? parseError; @@ -44,6 +45,10 @@ enum EventType { encryption("m.room.encryption", EncryptionContent.fromJson), membership("m.room.member", MembershipContent.fromJson), create("m.room.create", CreateContent.fromJson), + historyVisibility( + "m.room.history_visibility", + HistoryVisibilityContent.fromJson, + ), canonicalAlias("m.room.canonical_alias", CanonicalAliasContent.fromJson), joinRules("m.room.join_rules", JoinRulesContent.fromJson), powerLevels("m.room.power_levels", PowerLevelsContent.fromJson), diff --git a/lib/models/content/history_visibility.dart b/lib/models/content/history_visibility.dart new file mode 100644 index 0000000..707805c --- /dev/null +++ b/lib/models/content/history_visibility.dart @@ -0,0 +1,19 @@ +import "package:freezed_annotation/freezed_annotation.dart"; +import "package:nexus/models/content/content.dart"; +part "history_visibility.freezed.dart"; +part "history_visibility.g.dart"; + +@freezed +abstract class HistoryVisibilityContent extends Content + with _$HistoryVisibilityContent { + HistoryVisibilityContent._(); + factory HistoryVisibilityContent({ + required HistoryVisibility historyVisibility, + }) = _HistoryVisibilityContent; + + factory HistoryVisibilityContent.fromJson(Map json) => + _$HistoryVisibilityContentFromJson(json); +} + +@JsonEnum(fieldRename: FieldRename.snake) +enum HistoryVisibility { invited, joined, shared, worldReadable } diff --git a/lib/widgets/renderers/event.dart b/lib/widgets/renderers/event.dart index 71d7412..f0f16b7 100644 --- a/lib/widgets/renderers/event.dart +++ b/lib/widgets/renderers/event.dart @@ -7,8 +7,11 @@ import "package:nexus/models/content/canonical_alias.dart"; import "package:nexus/models/content/content.dart"; import "package:nexus/models/content/create.dart"; import "package:nexus/models/content/encrypted.dart"; +import "package:nexus/models/content/history_visibility.dart"; +import "package:nexus/models/content/join_rules.dart"; import "package:nexus/models/content/membership.dart"; import "package:nexus/models/content/message.dart"; +import "package:nexus/models/content/power_levels.dart"; import "package:nexus/models/event.dart"; import "package:nexus/widgets/lazy_loading/message_displayname.dart"; import "package:nexus/widgets/renderers/message.dart"; @@ -67,6 +70,26 @@ class EventRenderer extends ConsumerWidget { MessageDisplayname(event), Text("created the room"), ]), + PowerLevelsContent() => GenericEventRenderer(Icons.add, [ + MessageDisplayname(event), + Text("changed the room's power levels"), + ]), + JoinRulesContent() => GenericEventRenderer(Icons.add, [ + MessageDisplayname(event), + Text("changed the room's join rules"), + ]), + HistoryVisibilityContent(:final historyVisibility) => + GenericEventRenderer(Icons.history, [ + MessageDisplayname(event), + Text( + "changed the room's history visibility to ${switch (historyVisibility) { + HistoryVisibility.invited => "since invited", + HistoryVisibility.joined => "since joined", + HistoryVisibility.shared => "all history visible (shared)", + HistoryVisibility.worldReadable => "all history visible (world readable)", + }}", + ), + ]), CanonicalAliasContent(:final alias, :final altAliases) => GenericEventRenderer(Icons.numbers, [ MessageDisplayname(event),