TF-3449 Display mark as important icon in email list
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
|
||||
import 'package:equatable/equatable.dart';
|
||||
|
||||
class MailPriorityHeader with EquatableMixin {
|
||||
static const String firstXPriority = '1';
|
||||
static const String highImportance = 'high';
|
||||
static const String urgentPriority = 'urgent';
|
||||
|
||||
final String? xPriority;
|
||||
final String? importance;
|
||||
final String? priority;
|
||||
|
||||
MailPriorityHeader({
|
||||
this.xPriority,
|
||||
this.importance,
|
||||
this.priority,
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
xPriority,
|
||||
importance,
|
||||
priority,
|
||||
];
|
||||
}
|
||||
@@ -13,6 +13,7 @@ import 'package:jmap_dart_client/jmap/mail/email/individual_header_identifier.da
|
||||
import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
import 'package:model/email/email_content.dart';
|
||||
import 'package:model/email/mail_priority_header.dart';
|
||||
import 'package:model/extensions/email_address_extension.dart';
|
||||
import 'package:model/extensions/keyword_identifier_extension.dart';
|
||||
import 'package:model/extensions/media_type_nullable_extension.dart';
|
||||
@@ -44,6 +45,9 @@ class PresentationEmail with EquatableMixin, SearchSnippetMixin {
|
||||
final Set<EmailBodyPart>? htmlBody;
|
||||
final Map<PartId, EmailBodyValue>? bodyValues;
|
||||
final Map<IndividualHeaderIdentifier, String?>? headerCalendarEvent;
|
||||
final Map<IndividualHeaderIdentifier, String?>? xPriorityHeader;
|
||||
final Map<IndividualHeaderIdentifier, String?>? importanceHeader;
|
||||
final Map<IndividualHeaderIdentifier, String?>? priorityHeader;
|
||||
|
||||
PresentationEmail({
|
||||
this.id,
|
||||
@@ -68,6 +72,9 @@ class PresentationEmail with EquatableMixin, SearchSnippetMixin {
|
||||
this.htmlBody,
|
||||
this.bodyValues,
|
||||
this.headerCalendarEvent,
|
||||
this.xPriorityHeader,
|
||||
this.importanceHeader,
|
||||
this.priorityHeader,
|
||||
});
|
||||
|
||||
String getSenderName() {
|
||||
@@ -135,6 +142,22 @@ class PresentationEmail with EquatableMixin, SearchSnippetMixin {
|
||||
|
||||
bool get hasCalendarEvent => headerCalendarEvent?[IndividualHeaderIdentifier.headerCalendarEvent]?.isNotEmpty == true;
|
||||
|
||||
bool get isMarkAsImportant {
|
||||
final xPriority = xPriorityHeader?[IndividualHeaderIdentifier.xPriorityHeader]
|
||||
?.trim()
|
||||
.toLowerCase();
|
||||
final importance = importanceHeader?[IndividualHeaderIdentifier.importanceHeader]
|
||||
?.trim()
|
||||
.toLowerCase();
|
||||
final priority = priorityHeader?[IndividualHeaderIdentifier.priorityHeader]
|
||||
?.trim()
|
||||
.toLowerCase();
|
||||
|
||||
return xPriority == MailPriorityHeader.firstXPriority &&
|
||||
importance == MailPriorityHeader.highImportance &&
|
||||
priority == MailPriorityHeader.urgentPriority;
|
||||
}
|
||||
|
||||
List<EmailContent> get emailContentList {
|
||||
final newHtmlBody = htmlBody
|
||||
?.where((emailBody) => emailBody.partId != null && emailBody.type != null)
|
||||
@@ -175,6 +198,9 @@ class PresentationEmail with EquatableMixin, SearchSnippetMixin {
|
||||
headerCalendarEvent,
|
||||
searchSnippetSubject,
|
||||
searchSnippetPreview,
|
||||
xPriorityHeader,
|
||||
importanceHeader,
|
||||
priorityHeader,
|
||||
];
|
||||
|
||||
PresentationEmail copyWith({
|
||||
@@ -200,6 +226,9 @@ class PresentationEmail with EquatableMixin, SearchSnippetMixin {
|
||||
Set<EmailBodyPart>? htmlBody,
|
||||
Map<PartId, EmailBodyValue>? bodyValues,
|
||||
Map<IndividualHeaderIdentifier, String?>? headerCalendarEvent,
|
||||
Map<IndividualHeaderIdentifier, String?>? xPriorityHeader,
|
||||
Map<IndividualHeaderIdentifier, String?>? importanceHeader,
|
||||
Map<IndividualHeaderIdentifier, String?>? priorityHeader,
|
||||
}) {
|
||||
return PresentationEmail(
|
||||
id: id ?? this.id,
|
||||
@@ -224,6 +253,9 @@ class PresentationEmail with EquatableMixin, SearchSnippetMixin {
|
||||
htmlBody: htmlBody ?? this.htmlBody,
|
||||
bodyValues: bodyValues ?? this.bodyValues,
|
||||
headerCalendarEvent: headerCalendarEvent ?? this.headerCalendarEvent,
|
||||
xPriorityHeader: xPriorityHeader ?? this.xPriorityHeader,
|
||||
importanceHeader: importanceHeader ?? this.importanceHeader,
|
||||
priorityHeader: priorityHeader ?? this.priorityHeader,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -102,7 +102,10 @@ extension EmailExtension on Email {
|
||||
bodyValues: bodyValues,
|
||||
headerUserAgent: headerUserAgent,
|
||||
attachments: attachments,
|
||||
headerCalendarEvent: headerCalendarEvent
|
||||
headerCalendarEvent: headerCalendarEvent,
|
||||
xPriorityHeader: xPriorityHeader,
|
||||
importanceHeader: importanceHeader,
|
||||
priorityHeader: priorityHeader,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -129,7 +132,10 @@ extension EmailExtension on Email {
|
||||
mailboxIds: mailboxIds,
|
||||
selectMode: selectMode,
|
||||
emailHeader: headers?.toList(),
|
||||
headerCalendarEvent: headerCalendarEvent
|
||||
headerCalendarEvent: headerCalendarEvent,
|
||||
xPriorityHeader: xPriorityHeader,
|
||||
importanceHeader: importanceHeader,
|
||||
priorityHeader: priorityHeader,
|
||||
)
|
||||
..searchSnippetSubject = searchSnippetSubject
|
||||
..searchSnippetPreview = searchSnippetPreview;
|
||||
@@ -153,6 +159,15 @@ extension EmailExtension on Email {
|
||||
replyTo: updatedProperties.contain(EmailProperty.replyTo) ? newEmail.replyTo : replyTo,
|
||||
mailboxIds: updatedProperties.contain(EmailProperty.mailboxIds) ? newEmail.mailboxIds : mailboxIds,
|
||||
headerCalendarEvent: updatedProperties.contain(IndividualHeaderIdentifier.headerCalendarEvent.value) ? newEmail.headerCalendarEvent : headerCalendarEvent,
|
||||
xPriorityHeader: updatedProperties.contain(IndividualHeaderIdentifier.xPriorityHeader.value)
|
||||
? newEmail.xPriorityHeader
|
||||
: xPriorityHeader,
|
||||
importanceHeader: updatedProperties.contain(IndividualHeaderIdentifier.importanceHeader.value)
|
||||
? newEmail.importanceHeader
|
||||
: importanceHeader,
|
||||
priorityHeader: updatedProperties.contain(IndividualHeaderIdentifier.priorityHeader.value)
|
||||
? newEmail.priorityHeader
|
||||
: priorityHeader,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -213,7 +228,10 @@ extension EmailExtension on Email {
|
||||
emailHeader: headers?.toList(),
|
||||
bodyValues: bodyValues,
|
||||
htmlBody: htmlBody,
|
||||
headerCalendarEvent: headerCalendarEvent
|
||||
headerCalendarEvent: headerCalendarEvent,
|
||||
xPriorityHeader: xPriorityHeader,
|
||||
importanceHeader: importanceHeader,
|
||||
priorityHeader: priorityHeader,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -250,6 +268,9 @@ extension EmailExtension on Email {
|
||||
headerUserAgent: headerUserAgent,
|
||||
headerMdn: value,
|
||||
headerCalendarEvent: headerCalendarEvent,
|
||||
xPriorityHeader: xPriorityHeader,
|
||||
importanceHeader: importanceHeader,
|
||||
priorityHeader: priorityHeader,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -80,7 +80,10 @@ extension PresentationEmailExtension on PresentationEmail {
|
||||
selectMode: selectMode == SelectMode.INACTIVE ? SelectMode.ACTIVE : SelectMode.INACTIVE,
|
||||
routeWeb: routeWeb,
|
||||
mailboxContain: mailboxContain,
|
||||
headerCalendarEvent: headerCalendarEvent
|
||||
headerCalendarEvent: headerCalendarEvent,
|
||||
xPriorityHeader: xPriorityHeader,
|
||||
importanceHeader: importanceHeader,
|
||||
priorityHeader: priorityHeader,
|
||||
)
|
||||
..searchSnippetSubject = searchSnippetSubject
|
||||
..searchSnippetPreview = searchSnippetPreview;
|
||||
@@ -106,7 +109,10 @@ extension PresentationEmailExtension on PresentationEmail {
|
||||
selectMode: selectMode,
|
||||
routeWeb: routeWeb,
|
||||
mailboxContain: mailboxContain,
|
||||
headerCalendarEvent: headerCalendarEvent
|
||||
headerCalendarEvent: headerCalendarEvent,
|
||||
xPriorityHeader: xPriorityHeader,
|
||||
importanceHeader: importanceHeader,
|
||||
priorityHeader: priorityHeader,
|
||||
)
|
||||
..searchSnippetSubject = searchSnippetSubject
|
||||
..searchSnippetPreview = searchSnippetPreview;
|
||||
@@ -132,7 +138,10 @@ extension PresentationEmailExtension on PresentationEmail {
|
||||
bodyValues: bodyValues,
|
||||
mailboxIds: mailboxIds,
|
||||
headers: emailHeader?.toSet(),
|
||||
headerCalendarEvent: headerCalendarEvent
|
||||
headerCalendarEvent: headerCalendarEvent,
|
||||
xPriorityHeader: xPriorityHeader,
|
||||
importanceHeader: importanceHeader,
|
||||
priorityHeader: priorityHeader,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -165,7 +174,10 @@ extension PresentationEmailExtension on PresentationEmail {
|
||||
selectMode: selectMode,
|
||||
routeWeb: routeWeb,
|
||||
mailboxContain: matchedMailbox,
|
||||
headerCalendarEvent: headerCalendarEvent
|
||||
headerCalendarEvent: headerCalendarEvent,
|
||||
xPriorityHeader: xPriorityHeader,
|
||||
importanceHeader: importanceHeader,
|
||||
priorityHeader: priorityHeader,
|
||||
)
|
||||
..searchSnippetSubject = searchSnippetSubject
|
||||
..searchSnippetPreview = searchSnippetPreview;
|
||||
@@ -204,7 +216,10 @@ extension PresentationEmailExtension on PresentationEmail {
|
||||
selectMode: selectMode,
|
||||
routeWeb: routeWeb,
|
||||
mailboxContain: mailboxContain,
|
||||
headerCalendarEvent: headerCalendarEvent
|
||||
headerCalendarEvent: headerCalendarEvent,
|
||||
xPriorityHeader: xPriorityHeader,
|
||||
importanceHeader: importanceHeader,
|
||||
priorityHeader: priorityHeader,
|
||||
)
|
||||
..searchSnippetSubject = searchSnippetSubject
|
||||
..searchSnippetPreview = searchSnippetPreview;
|
||||
@@ -233,7 +248,10 @@ extension PresentationEmailExtension on PresentationEmail {
|
||||
selectMode: selectMode,
|
||||
routeWeb: routeWeb,
|
||||
mailboxContain: mailboxContain,
|
||||
headerCalendarEvent: headerCalendarEvent
|
||||
headerCalendarEvent: headerCalendarEvent,
|
||||
xPriorityHeader: xPriorityHeader,
|
||||
importanceHeader: importanceHeader,
|
||||
priorityHeader: priorityHeader,
|
||||
)
|
||||
..searchSnippetSubject = searchSnippetSubject
|
||||
..searchSnippetPreview = searchSnippetPreview;
|
||||
@@ -259,7 +277,10 @@ extension PresentationEmailExtension on PresentationEmail {
|
||||
selectMode: selectMode,
|
||||
routeWeb: routeWeb,
|
||||
mailboxContain: mailboxContain,
|
||||
headerCalendarEvent: headerCalendarEvent
|
||||
headerCalendarEvent: headerCalendarEvent,
|
||||
xPriorityHeader: xPriorityHeader,
|
||||
importanceHeader: importanceHeader,
|
||||
priorityHeader: priorityHeader,
|
||||
)
|
||||
..searchSnippetSubject = searchSnippetSubject
|
||||
..searchSnippetPreview = searchSnippetPreview;
|
||||
|
||||
@@ -25,6 +25,7 @@ export 'email/prefix_email_address.dart';
|
||||
export 'email/presentation_email.dart';
|
||||
export 'email/presentation_email_address.dart';
|
||||
export 'email/read_actions.dart';
|
||||
export 'email/mail_priority_header.dart';
|
||||
export 'extensions/account_extension.dart';
|
||||
export 'extensions/account_id_extensions.dart';
|
||||
export 'extensions/attachment_extension.dart';
|
||||
|
||||
Reference in New Issue
Block a user