Watch
1
0
Fork
You've already forked nexus
0
forked from Nexus/nexus
nexus/lib/models/room_summary.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);
}