From e60e2470939d82956c844a2df50b1a1861ddd317 Mon Sep 17 00:00:00 2001 From: Henry-Hiles Date: Fri, 15 May 2026 20:59:30 -0400 Subject: [PATCH] add create event --- lib/models/content/content.dart | 7 +++++-- lib/models/content/create.dart | 35 +++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 lib/models/content/create.dart diff --git a/lib/models/content/content.dart b/lib/models/content/content.dart index 0f931ea..be021ed 100644 --- a/lib/models/content/content.dart +++ b/lib/models/content/content.dart @@ -1,16 +1,18 @@ import "package:collection/collection.dart"; import "package:freezed_annotation/freezed_annotation.dart"; +import "package:nexus/models/content/create.dart"; import "package:nexus/models/content/membership.dart"; import "package:nexus/models/content/message.dart"; class Content { Content(); - factory Content.fromJson(Map json) => Content(); + factory Content.fromJson(Map json) => Content(); Map toJson() => {}; + static Content fromEventJson(Map eventJson) => (EventType.values - .firstWhereOrNull((eventType) => eventType == eventJson["type"]) + .firstWhereOrNull((eventType) => eventType.type == eventJson["type"]) ?.contentFromJson ?? Content.fromJson)(eventJson); } @@ -19,6 +21,7 @@ class Content { enum EventType { encrypted("m.room.encrypted", Content.fromJson), membership("m.room.member", MembershipContent.fromJson), + create("m.room.create", CreateContent.fromJson), message("m.room.message", MessageContent.fromJson); final String type; diff --git a/lib/models/content/create.dart b/lib/models/content/create.dart new file mode 100644 index 0000000..78eef9f --- /dev/null +++ b/lib/models/content/create.dart @@ -0,0 +1,35 @@ +import "package:fast_immutable_collections/fast_immutable_collections.dart"; +import "package:freezed_annotation/freezed_annotation.dart"; +import "package:nexus/models/content/content.dart"; +part "create.freezed.dart"; +part "create.g.dart"; + +@freezed +abstract class CreateContent extends Content with _$CreateContent { + CreateContent._(); + const factory CreateContent({ + @JsonKey(name: "creator") String? creatorId, + + @JsonKey(name: "additional_creators") + @Default(IList.empty()) + IList additionalCreatorIds, + + PreviousRoom? predecessor, + + @JsonKey(name: "m.federate") @Default(true) bool federated, + + @Default("1") String roomVersion, + required String type, + }) = _CreateContent; + + factory CreateContent.fromJson(Map json) => + _$CreateContentFromJson(json); +} + +@freezed +abstract class PreviousRoom with _$PreviousRoom { + const factory PreviousRoom({required int roomId}) = _PreviousRoom; + + factory PreviousRoom.fromJson(Map json) => + _$PreviousRoomFromJson(json); +}