forked from Nexus/nexus
56 lines
2 KiB
Dart
56 lines
2 KiB
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/join_rule.dart";
|
|
import "package:nexus/models/membership_status.dart";
|
|
import "package:nexus/models/room_metadata.dart";
|
|
|
|
part "room_summary.freezed.dart";
|
|
part "room_summary.g.dart";
|
|
|
|
@Freezed(toJson: false, fromJson: false)
|
|
@JsonSerializable(createToJson: false)
|
|
class const RoomSummary({
|
|
required final String roomId,
|
|
@JsonKey(name: "num_joined_members") final int? joinedMembers,
|
|
final JoinRule? joinRule,
|
|
final String? name,
|
|
final Uri? avatarUrl,
|
|
final String? canonicalAlias,
|
|
final String? topic,
|
|
final String? roomVersion,
|
|
@JsonKey(unknownEnumValue: RoomType.room) final RoomType? roomType,
|
|
|
|
/// The encryption algorithm, if the room is encrypted.
|
|
final String? encryption,
|
|
final bool? worldReadable,
|
|
|
|
/// The current user's membership in the room, if any.
|
|
@JsonKey(unknownEnumValue: JsonKey.nullForUndefinedEnumValue)
|
|
final MembershipStatus? membership,
|
|
|
|
/// Who invited the current user, for invites.
|
|
@JsonKey(includeFromJson: false) final String? invitedBy,
|
|
|
|
/// The reason given for the invite, if any.
|
|
@JsonKey(includeFromJson: false) final String? inviteReason,
|
|
|
|
/// The inviter's membership, for their display name and avatar.
|
|
@JsonKey(includeFromJson: false) final MembershipContent? inviterProfile,
|
|
|
|
/// Whether this is an invite to a direct message.
|
|
@JsonKey(includeFromJson: false) final bool isDirect = false,
|
|
}) with _$RoomSummary {
|
|
/// A summary of a room the user is in, from its synced metadata.
|
|
factory RoomSummary.fromMetadata(RoomMetadata metadata) => .new(
|
|
roomId: metadata.id,
|
|
joinedMembers: metadata.lazyLoadSummary?.joinedMemberCount,
|
|
avatarUrl: metadata.avatar,
|
|
canonicalAlias: metadata.canonicalAlias,
|
|
name: metadata.name,
|
|
topic: metadata.topic,
|
|
);
|
|
|
|
factory RoomSummary.fromJson(Map<String, Object?> json) =>
|
|
_$RoomSummaryFromJson(json);
|
|
}
|