import 'package:core/presentation/extensions/string_extension.dart'; import 'package:equatable/equatable.dart'; import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; import 'package:jmap_dart_client/jmap/core/utc_date.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:model/extensions/email_address_extension.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:model/mailbox/select_mode.dart'; class PresentationEmail with EquatableMixin { final EmailId id; final Map? keywords; final UnsignedInt? size; final UTCDate? receivedAt; final bool? hasAttachment; final String? preview; final String? subject; final UTCDate? sentAt; final Set? from; final Set? to; final Set? cc; final Set? bcc; final Set? replyTo; final Map? mailboxIds; final List? mailboxNames; final SelectMode selectMode; final Uri? routeWeb; final PresentationMailbox? mailboxContain; PresentationEmail( this.id, { this.keywords, this.size, this.receivedAt, this.hasAttachment, this.preview, this.subject, this.sentAt, this.from, this.to, this.cc, this.bcc, this.replyTo, this.mailboxIds, this.mailboxNames, this.selectMode = SelectMode.INACTIVE, this.routeWeb, this.mailboxContain } ); String getSenderName() => from?.first.asString() ?? ''; String getAvatarText() { if (getSenderName().isNotEmpty) { return getSenderName().firstLetterToUpperCase; } return ''; } String getEmailTitle() => subject?.trim() ?? ''; String getPartialContent() => preview?.trim() ?? ''; bool get hasRead => keywords?.containsKey(KeyWordIdentifier.emailSeen) == true; bool get hasStarred => keywords?.containsKey(KeyWordIdentifier.emailFlagged) == true; bool get isDraft => keywords?.containsKey(KeyWordIdentifier.emailDraft) == true; bool get withAttachments => hasAttachment == true; String get mailboxName => mailboxNames?.first?.name ?? ''; String get routeWebAsString => routeWeb.toString(); @override List get props => [ id, subject, from, to, cc, bcc, keywords, size, receivedAt, sentAt, replyTo, preview, hasAttachment, mailboxIds, mailboxNames, selectMode, routeWeb, mailboxContain ]; }