add and render HistoryVisibilityContent

This commit is contained in:
Henry Hiles 2026-05-26 19:22:53 -04:00
commit 70eba46c76
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs
3 changed files with 47 additions and 0 deletions

View file

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

View file

@ -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<String, Object?> json) =>
_$HistoryVisibilityContentFromJson(json);
}
@JsonEnum(fieldRename: FieldRename.snake)
enum HistoryVisibility { invited, joined, shared, worldReadable }

View file

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