diff --git a/lib/controllers/room_settings_sections.dart b/lib/controllers/room_settings_sections.dart index e6ea31e..6c266a9 100644 --- a/lib/controllers/room_settings_sections.dart +++ b/lib/controllers/room_settings_sections.dart @@ -663,6 +663,7 @@ class RoomSettingsSectionsController(final String roomId) .invited => "After invite", .joined => "After join", .worldReadable => "Anyone", + .unknown => "Unknown", }, onChanged: canSetHistoryVisibility ? (visibility) => setState( diff --git a/lib/helpers/extensions/join_rule_name.dart b/lib/helpers/extensions/join_rule_name.dart index d2cf4b5..94c6001 100644 --- a/lib/helpers/extensions/join_rule_name.dart +++ b/lib/helpers/extensions/join_rule_name.dart @@ -9,5 +9,6 @@ extension JoinRuleName on JoinRule { .restricted => "Restricted", .knockRestricted => "Restricted or knock", .private => "Private", + .unknown => "Unknown", }; } diff --git a/lib/models/content/history_visibility.dart b/lib/models/content/history_visibility.dart index 3cfc011..65b6160 100644 --- a/lib/models/content/history_visibility.dart +++ b/lib/models/content/history_visibility.dart @@ -8,6 +8,7 @@ sealed class HistoryVisibilityContent extends Content with _$HistoryVisibilityContent { HistoryVisibilityContent._(); factory HistoryVisibilityContent({ + @JsonKey(unknownEnumValue: HistoryVisibility.unknown) required HistoryVisibility historyVisibility, }) = _HistoryVisibilityContent; @@ -16,4 +17,4 @@ sealed class HistoryVisibilityContent extends Content } @JsonEnum(fieldRename: FieldRename.snake) -enum HistoryVisibility { invited, joined, shared, worldReadable } +enum HistoryVisibility { invited, joined, shared, worldReadable, unknown } diff --git a/lib/models/content/join_rules.dart b/lib/models/content/join_rules.dart index 948a762..20d2a60 100644 --- a/lib/models/content/join_rules.dart +++ b/lib/models/content/join_rules.dart @@ -9,7 +9,7 @@ part "join_rules.g.dart"; sealed class JoinRulesContent extends Content with _$JoinRulesContent { JoinRulesContent._(); factory JoinRulesContent({ - required JoinRule joinRule, + @JsonKey(unknownEnumValue: JoinRule.unknown) required JoinRule joinRule, @Default(ISet.empty()) ISet allow, }) = _JoinRulesContent; diff --git a/lib/models/content/membership.dart b/lib/models/content/membership.dart index b1a5508..90e6c9f 100644 --- a/lib/models/content/membership.dart +++ b/lib/models/content/membership.dart @@ -17,7 +17,8 @@ sealed class MembershipContent extends Content with _$MembershipContent { fromJson: MembershipContent.displaynameFromJson, ) required String? displayName, - @JsonKey(name: "membership") required MembershipStatus status, + @JsonKey(name: "membership", unknownEnumValue: MembershipStatus.unknown) + required MembershipStatus status, Uri? avatarUrl, String? reason, @Default(false) bool isDirect, diff --git a/lib/models/content/message.dart b/lib/models/content/message.dart index 36bd725..5212cd8 100644 --- a/lib/models/content/message.dart +++ b/lib/models/content/message.dart @@ -20,6 +20,7 @@ sealed class MessageContent extends Content with _$MessageContent { @FreezedUnionValue("m.text") factory MessageContent.text({ required String body, + @JsonKey(unknownEnumValue: JsonKey.nullForUndefinedEnumValue) MessageFormat? format, String? formattedBody, }) = TextMessageContent; @@ -27,6 +28,7 @@ sealed class MessageContent extends Content with _$MessageContent { @FreezedUnionValue("m.notice") factory MessageContent.notice({ required String body, + @JsonKey(unknownEnumValue: JsonKey.nullForUndefinedEnumValue) MessageFormat? format, String? formattedBody, }) = NoticeMessageContent; @@ -34,6 +36,7 @@ sealed class MessageContent extends Content with _$MessageContent { @FreezedUnionValue("m.emote") factory MessageContent.emote({ required String body, + @JsonKey(unknownEnumValue: JsonKey.nullForUndefinedEnumValue) MessageFormat? format, String? formattedBody, }) = EmoteMessageContent; @@ -41,6 +44,7 @@ sealed class MessageContent extends Content with _$MessageContent { @FreezedUnionValue("m.image") factory MessageContent.image({ required String body, + @JsonKey(unknownEnumValue: JsonKey.nullForUndefinedEnumValue) MessageFormat? format, String? formattedBody, EncryptedFile? file, @@ -52,6 +56,7 @@ sealed class MessageContent extends Content with _$MessageContent { @FreezedUnionValue("m.file") factory MessageContent.file({ required String body, + @JsonKey(unknownEnumValue: JsonKey.nullForUndefinedEnumValue) MessageFormat? format, String? formattedBody, EncryptedFile? file, @@ -63,6 +68,7 @@ sealed class MessageContent extends Content with _$MessageContent { @FreezedUnionValue("m.audio") factory MessageContent.audio({ required String body, + @JsonKey(unknownEnumValue: JsonKey.nullForUndefinedEnumValue) MessageFormat? format, String? formattedBody, EncryptedFile? file, @@ -74,6 +80,7 @@ sealed class MessageContent extends Content with _$MessageContent { @FreezedUnionValue("m.video") factory MessageContent.video({ required String body, + @JsonKey(unknownEnumValue: JsonKey.nullForUndefinedEnumValue) MessageFormat? format, String? formattedBody, EncryptedFile? file, diff --git a/lib/models/join_rule.dart b/lib/models/join_rule.dart index 44fb9bb..a82c62a 100644 --- a/lib/models/join_rule.dart +++ b/lib/models/join_rule.dart @@ -1,4 +1,13 @@ import "package:freezed_annotation/freezed_annotation.dart"; @JsonEnum(fieldRename: .snake) -enum JoinRule { public, knock, invite, private, restricted, knockRestricted } +enum JoinRule { + public, + knock, + invite, + private, + restricted, + knockRestricted, + + unknown, +} diff --git a/lib/models/membership_status.dart b/lib/models/membership_status.dart index 7eb5f72..f8197cb 100644 --- a/lib/models/membership_status.dart +++ b/lib/models/membership_status.dart @@ -1 +1 @@ -enum MembershipStatus { leave, invite, ban, join, knock } +enum MembershipStatus { leave, invite, ban, join, knock, unknown } diff --git a/lib/models/room_summary.dart b/lib/models/room_summary.dart index 05eaf43..2688ca3 100644 --- a/lib/models/room_summary.dart +++ b/lib/models/room_summary.dart @@ -14,7 +14,7 @@ part "room_summary.g.dart"; class const RoomSummary({ required final String roomId, @JsonKey(name: "num_joined_members") final int? joinedMembers, - final JoinRule? joinRule, + @JsonKey(unknownEnumValue: JoinRule.unknown) final JoinRule? joinRule, /// Rooms whose members may join without an invite, for restricted rooms. final IList allowedRoomIds = const .empty(), diff --git a/lib/widgets/renderers/event.dart b/lib/widgets/renderers/event.dart index 6ed2ffd..6fd3310 100644 --- a/lib/widgets/renderers/event.dart +++ b/lib/widgets/renderers/event.dart @@ -240,6 +240,7 @@ class const EventRenderer( .joined => "since joined", .shared => "all history visible (shared)", .worldReadable => "all history visible (world readable)", + .unknown => "something Nexus doesn't know about", }}", ), PinnedEventsContent(:final pinnedEvents) => () { diff --git a/lib/widgets/renderers/membership.dart b/lib/widgets/renderers/membership.dart index a2cd8cc..fe845cf 100644 --- a/lib/widgets/renderers/membership.dart +++ b/lib/widgets/renderers/membership.dart @@ -57,6 +57,7 @@ class const MembershipRenderer( .leave => event.sender == event.stateKey ? "left" : (previous == .ban ? "was unbanned from" : "was kicked from"), .ban => "was banned from", .knock => "asked to join", + .unknown => "changed their membership in", }} the room${event.sender == event.stateKey ? "" : " by"}", ), if (event.sender != event.stateKey)