import 'package:equatable/equatable.dart'; import 'package:jmap_dart_client/http/converter/email/email_body_value_converter.dart'; import 'package:jmap_dart_client/http/converter/email/email_mailbox_ids_converter.dart'; import 'package:jmap_dart_client/jmap/core/id.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/email_body_part.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_body_value.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:model/email/email_content.dart'; import 'package:model/extensions/media_type_extension.dart'; class ComposerCache with EquatableMixin { final EmailId id; final Map? mailboxIds; final String? subject; final Set? from; final Set? to; final Set? cc; final Set? bcc; final Set? replyTo; final Set? textBody; final Set? htmlBody; final Map? bodyValues; ComposerCache( this.id, { this.mailboxIds, this.subject, this.from, this.to, this.cc, this.bcc, this.replyTo, this.textBody, this.htmlBody, this.bodyValues, }); factory ComposerCache.fromJson(Map json) { return ComposerCache( EmailId(Id(json['id'])), mailboxIds: (json['mailboxIds'] as Map?)?.map((key, value) => EmailMailboxIdsConverter().parseEntry(key, value)), subject: json['subject'] as String?, from: (json['from'] as List?)?.map((json) => EmailAddress.fromJson(json)).toSet(), to: (json['to'] as List?)?.map((json) => EmailAddress.fromJson(json)).toSet(), cc: (json['cc'] as List?)?.map((json) => EmailAddress.fromJson(json)).toSet(), bcc: (json['bcc'] as List?)?.map((json) => EmailAddress.fromJson(json)).toSet(), bodyValues: (json['bodyValues'] as Map?)?.map((key, value) => EmailBodyValueConverter().parseEntry(key, value)), replyTo: (json['replyTo'] as List?)?.map((json) => EmailAddress.fromJson(json)).toSet(), textBody: (json['textBody'] as List?)?.map((json) => EmailBodyPart.fromJson(json)).toSet(), htmlBody: (json['htmlBody'] as List?)?.map((json) => EmailBodyPart.fromJson(json)).toSet(), ); } @override List get props => [ id, subject, from, to, cc, bcc, replyTo, ]; List get emailContentList { final newHtmlBody = htmlBody ?.where((emailBody) => emailBody.partId != null && emailBody.type != null) .toList() ?? []; final mapHtmlBody = { for (var emailBody in newHtmlBody) emailBody.partId! : emailBody.type! }; final emailContents = bodyValues?.entries .map((entries) => EmailContent(mapHtmlBody[entries.key].toEmailContentType(), entries.value.value)) .toList(); return emailContents ?? []; } }