diff --git a/model/lib/extensions/email_extension.dart b/model/lib/extensions/email_extension.dart index 1ca90c25c..4bbeb2aff 100644 --- a/model/lib/extensions/email_extension.dart +++ b/model/lib/extensions/email_extension.dart @@ -4,9 +4,14 @@ import 'dart:convert'; import 'package:core/domain/extensions/datetime_extension.dart'; import 'package:jmap_dart_client/jmap/core/id.dart'; import 'package:jmap_dart_client/jmap/core/properties/properties.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/identities/identity.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/email/email_header.dart'; import 'package:jmap_dart_client/jmap/mail/email/individual_header_identifier.dart'; import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; @@ -82,30 +87,9 @@ extension EmailExtension on Email { } Email updatedEmail({Map? newKeywords, Map? newMailboxIds}) { - return Email( - id: id, - blobId: blobId, - keywords: newKeywords ?? keywords, - size: size, - receivedAt: receivedAt, - hasAttachment: hasAttachment, - preview: preview, - subject: subject, - sentAt: sentAt, - from: from, - to: to, - cc: cc, - bcc: bcc, - replyTo: replyTo, - mailboxIds: newMailboxIds ?? mailboxIds, - htmlBody: htmlBody, - bodyValues: bodyValues, - headerUserAgent: headerUserAgent, - attachments: attachments, - headerCalendarEvent: headerCalendarEvent, - xPriorityHeader: xPriorityHeader, - importanceHeader: importanceHeader, - priorityHeader: priorityHeader, + return copyWith( + keywords: newKeywords, + mailboxIds: newMailboxIds, ); } @@ -113,9 +97,10 @@ extension EmailExtension on Email { SelectMode selectMode = SelectMode.INACTIVE, String? searchSnippetSubject, String? searchSnippetPreview, + EmailId? emailId, }) { return PresentationEmail( - id: id, + id: emailId ?? id, blobId: blobId, keywords: keywords, size: size, @@ -208,69 +193,86 @@ extension EmailExtension on Email { EmailId? emailId, } ) { - return PresentationEmail( - id: emailId ?? id, - blobId: blobId, - keywords: keywords, - size: size, - receivedAt: receivedAt, - hasAttachment: hasAttachment, - preview: preview, - subject: subject, - sentAt: sentAt, - from: from, - to: to, - cc: cc, - bcc: bcc, - replyTo: replyTo, - mailboxIds: mailboxIds, - selectMode: selectMode, - emailHeader: headers?.toList(), - bodyValues: bodyValues, - htmlBody: htmlBody, - headerCalendarEvent: headerCalendarEvent, - xPriorityHeader: xPriorityHeader, - importanceHeader: importanceHeader, - priorityHeader: priorityHeader, - ); + return toPresentationEmail(selectMode: selectMode, emailId: emailId); } Email updateEmailHeaderMdn( Map value, ) { + return copyWith(headerMdn: value); + } + + Email copyWith({ + EmailId? id, + Id? blobId, + ThreadId? threadId, + Map? mailboxIds, + Map? keywords, + UnsignedInt? size, + UTCDate? receivedAt, + Set? headers, + MessageIdsHeaderValue? messageId, + MessageIdsHeaderValue? inReplyTo, + MessageIdsHeaderValue? references, + String? subject, + UTCDate? sentAt, + bool? hasAttachment, + String? preview, + Set? sender, + Set? from, + Set? to, + Set? cc, + Set? bcc, + Set? replyTo, + Set? textBody, + Set? htmlBody, + Set? attachments, + EmailBodyPart? bodyStructure, + Map? bodyValues, + Map? headerUserAgent, + Map? headerMdn, + Map? headerCalendarEvent, + Map? sMimeStatusHeader, + Map? identityHeader, + Map? xPriorityHeader, + Map? importanceHeader, + Map? priorityHeader, + }) { return Email( - id: id, - blobId: blobId, - threadId: threadId, - mailboxIds: mailboxIds, - keywords: keywords, - size: size, - receivedAt: receivedAt, - headers: headers, - messageId: messageId, - inReplyTo: inReplyTo, - references: references, - subject: subject, - sentAt: sentAt, - hasAttachment: hasAttachment, - preview: preview, - sender: sender, - from: from, - to: to, - cc: cc, - bcc: bcc, - replyTo: replyTo, - textBody: textBody, - htmlBody: htmlBody, - attachments: attachments, - bodyStructure: bodyStructure, - bodyValues: bodyValues, - headerUserAgent: headerUserAgent, - headerMdn: value, - headerCalendarEvent: headerCalendarEvent, - xPriorityHeader: xPriorityHeader, - importanceHeader: importanceHeader, - priorityHeader: priorityHeader, + id: id ?? this.id, + blobId: blobId ?? this.blobId, + threadId: threadId ?? this.threadId, + mailboxIds: mailboxIds ?? this.mailboxIds, + keywords: keywords ?? this.keywords, + size: size ?? this.size, + receivedAt: receivedAt ?? this.receivedAt, + headers: headers ?? this.headers, + messageId: messageId ?? this.messageId, + inReplyTo: inReplyTo ?? this.inReplyTo, + references: references ?? this.references, + subject: subject ?? this.subject, + sentAt: sentAt ?? this.sentAt, + hasAttachment: hasAttachment ?? this.hasAttachment, + preview: preview ?? this.preview, + sender: sender ?? this.sender, + from: from ?? this.from, + to: to ?? this.to, + cc: cc ?? this.cc, + bcc: bcc ?? this.bcc, + replyTo: replyTo ?? this.replyTo, + textBody: textBody ?? this.textBody, + htmlBody: htmlBody ?? this.htmlBody, + attachments: attachments ?? this.attachments, + bodyStructure: bodyStructure ?? this.bodyStructure, + bodyValues: bodyValues ?? this.bodyValues, + headerUserAgent: headerUserAgent ?? this.headerUserAgent, + headerMdn: headerMdn ?? this.headerMdn, + headerCalendarEvent: headerCalendarEvent ?? this.headerCalendarEvent, + sMimeStatusHeader: sMimeStatusHeader ?? this.sMimeStatusHeader, + identityHeader: identityHeader ?? this.identityHeader, + xPriorityHeader: xPriorityHeader ?? this.xPriorityHeader, + importanceHeader: importanceHeader ?? this.importanceHeader, + priorityHeader: priorityHeader ?? this.priorityHeader, ); } } \ No newline at end of file diff --git a/model/lib/extensions/presentation_email_extension.dart b/model/lib/extensions/presentation_email_extension.dart index d65ba4c99..c14a14ee3 100644 --- a/model/lib/extensions/presentation_email_extension.dart +++ b/model/lib/extensions/presentation_email_extension.dart @@ -61,59 +61,17 @@ extension PresentationEmailExtension on PresentationEmail { Set get listEmailAddressSender => from.asSet()..addAll(replyTo.asSet()); PresentationEmail toggleSelect() { - return PresentationEmail( - id: id, - blobId: blobId, - keywords: keywords, - size: size, - receivedAt: receivedAt, - hasAttachment: hasAttachment, - preview: preview, - subject: subject, - sentAt: sentAt, - from: from, - to: to, - cc: cc, - bcc: bcc, - replyTo: replyTo, - mailboxIds: mailboxIds, - selectMode: selectMode == SelectMode.INACTIVE ? SelectMode.ACTIVE : SelectMode.INACTIVE, - routeWeb: routeWeb, - mailboxContain: mailboxContain, - headerCalendarEvent: headerCalendarEvent, - xPriorityHeader: xPriorityHeader, - importanceHeader: importanceHeader, - priorityHeader: priorityHeader, - ) + return copyWith( + selectMode: selectMode == SelectMode.INACTIVE + ? SelectMode.ACTIVE + : SelectMode.INACTIVE, + ) ..searchSnippetSubject = searchSnippetSubject ..searchSnippetPreview = searchSnippetPreview; } PresentationEmail toSelectedEmail({required SelectMode selectMode}) { - return PresentationEmail( - id: id, - blobId: blobId, - keywords: keywords, - size: size, - receivedAt: receivedAt, - hasAttachment: hasAttachment, - preview: preview, - subject: subject, - sentAt: sentAt, - from: from, - to: to, - cc: cc, - bcc: bcc, - replyTo: replyTo, - mailboxIds: mailboxIds, - selectMode: selectMode, - routeWeb: routeWeb, - mailboxContain: mailboxContain, - headerCalendarEvent: headerCalendarEvent, - xPriorityHeader: xPriorityHeader, - importanceHeader: importanceHeader, - priorityHeader: priorityHeader, - ) + return copyWith(selectMode: selectMode) ..searchSnippetSubject = searchSnippetSubject ..searchSnippetPreview = searchSnippetPreview; } @@ -155,30 +113,7 @@ extension PresentationEmailExtension on PresentationEmail { final matchedMailbox = findMailboxContain(mapMailboxes); - return PresentationEmail( - id: id, - blobId: blobId, - keywords: keywords, - size: size, - receivedAt: receivedAt, - hasAttachment: hasAttachment, - preview: preview, - subject: subject, - sentAt: sentAt, - from: from, - to: to, - cc: cc, - bcc: bcc, - replyTo: replyTo, - mailboxIds: mailboxIds, - selectMode: selectMode, - routeWeb: routeWeb, - mailboxContain: matchedMailbox, - headerCalendarEvent: headerCalendarEvent, - xPriorityHeader: xPriorityHeader, - importanceHeader: importanceHeader, - priorityHeader: priorityHeader, - ) + return copyWith(mailboxContain: matchedMailbox) ..searchSnippetSubject = searchSnippetSubject ..searchSnippetPreview = searchSnippetPreview; } @@ -197,30 +132,7 @@ extension PresentationEmailExtension on PresentationEmail { } PresentationEmail withRouteWeb(Uri routeWeb) { - return PresentationEmail( - id: id, - blobId: blobId, - keywords: keywords, - size: size, - receivedAt: receivedAt, - hasAttachment: hasAttachment, - preview: preview, - subject: subject, - sentAt: sentAt, - from: from, - to: to, - cc: cc, - bcc: bcc, - replyTo: replyTo, - mailboxIds: mailboxIds, - selectMode: selectMode, - routeWeb: routeWeb, - mailboxContain: mailboxContain, - headerCalendarEvent: headerCalendarEvent, - xPriorityHeader: xPriorityHeader, - importanceHeader: importanceHeader, - priorityHeader: priorityHeader, - ) + return copyWith(routeWeb: routeWeb) ..searchSnippetSubject = searchSnippetSubject ..searchSnippetPreview = searchSnippetPreview; } @@ -229,59 +141,13 @@ extension PresentationEmailExtension on PresentationEmail { final combinedMap = {...(keywords ?? {}), ...newKeywords}; combinedMap.removeWhere((key, value) => !value); log('PresentationEmailExtension::updateKeywords:combinedMap = $combinedMap'); - return PresentationEmail( - id: id, - blobId: blobId, - keywords: combinedMap, - size: size, - receivedAt: receivedAt, - hasAttachment: hasAttachment, - preview: preview, - subject: subject, - sentAt: sentAt, - from: from, - to: to, - cc: cc, - bcc: bcc, - replyTo: replyTo, - mailboxIds: mailboxIds, - selectMode: selectMode, - routeWeb: routeWeb, - mailboxContain: mailboxContain, - headerCalendarEvent: headerCalendarEvent, - xPriorityHeader: xPriorityHeader, - importanceHeader: importanceHeader, - priorityHeader: priorityHeader, - ) + return copyWith(keywords: combinedMap) ..searchSnippetSubject = searchSnippetSubject ..searchSnippetPreview = searchSnippetPreview; } PresentationEmail syncPresentationEmail({PresentationMailbox? mailboxContain, Uri? routeWeb}) { - return PresentationEmail( - id: id, - blobId: blobId, - keywords: keywords, - size: size, - receivedAt: receivedAt, - hasAttachment: hasAttachment, - preview: preview, - subject: subject, - sentAt: sentAt, - from: from, - to: to, - cc: cc, - bcc: bcc, - replyTo: replyTo, - mailboxIds: mailboxIds, - selectMode: selectMode, - routeWeb: routeWeb, - mailboxContain: mailboxContain, - headerCalendarEvent: headerCalendarEvent, - xPriorityHeader: xPriorityHeader, - importanceHeader: importanceHeader, - priorityHeader: priorityHeader, - ) + return copyWith(routeWeb: routeWeb, mailboxContain: mailboxContain) ..searchSnippetSubject = searchSnippetSubject ..searchSnippetPreview = searchSnippetPreview; }