TF-3449 Display mark as important icon in email list

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-02-07 16:42:19 +07:00
committed by Dat H. Pham
parent 8ddcc18183
commit 77a62a2711
15 changed files with 161 additions and 35 deletions
@@ -36,6 +36,21 @@ extension EmailCacheExtension on EmailCache {
? Map.fromIterables(headerCalendarEvent!.keys.map((value) => IndividualHeaderIdentifier(value)), headerCalendarEvent!.values)
: null,
blobId: blobId != null ? Id(blobId!) : null,
xPriorityHeader: xPriorityHeader != null
? Map.fromIterables(
xPriorityHeader!.keys.map((value) => IndividualHeaderIdentifier(value)),
xPriorityHeader!.values)
: null,
importanceHeader: importanceHeader != null
? Map.fromIterables(
importanceHeader!.keys.map((value) => IndividualHeaderIdentifier(value)),
importanceHeader!.values)
: null,
priorityHeader: priorityHeader != null
? Map.fromIterables(
priorityHeader!.keys.map((value) => IndividualHeaderIdentifier(value)),
priorityHeader!.values)
: null,
);
}
@@ -26,6 +26,9 @@ extension EmailExtension on Email {
mailboxIds: mailboxIds?.toMapString(),
headerCalendarEvent: headerCalendarEvent?.toMapString(),
blobId: blobId?.value,
xPriorityHeader: xPriorityHeader?.toMapString(),
importanceHeader: importanceHeader?.toMapString(),
priorityHeader: priorityHeader?.toMapString(),
);
}
@@ -57,6 +57,15 @@ class EmailCache extends HiveObject with EquatableMixin {
@HiveField(15)
final String? blobId;
@HiveField(16)
Map<String, String?>? xPriorityHeader;
@HiveField(17)
Map<String, String?>? importanceHeader;
@HiveField(18)
Map<String, String?>? priorityHeader;
EmailCache(
this.id,
{
@@ -75,6 +84,9 @@ class EmailCache extends HiveObject with EquatableMixin {
this.mailboxIds,
this.headerCalendarEvent,
this.blobId,
this.xPriorityHeader,
this.importanceHeader,
this.priorityHeader,
}
);
@@ -96,5 +108,8 @@ class EmailCache extends HiveObject with EquatableMixin {
mailboxIds,
headerCalendarEvent,
blobId,
xPriorityHeader,
importanceHeader,
priorityHeader,
];
}
@@ -22,6 +22,9 @@ class ThreadConstants {
EmailProperty.hasAttachment,
EmailProperty.replyTo,
EmailProperty.mailboxIds,
IndividualHeaderIdentifier.xPriorityHeader.value,
IndividualHeaderIdentifier.importanceHeader.value,
IndividualHeaderIdentifier.priorityHeader.value,
});
static final propertiesUpdatedDefault = Properties({
EmailProperty.keywords,
@@ -64,21 +67,7 @@ class ThreadConstants {
});
static final propertiesCalendarEvent = Properties({
EmailProperty.id,
EmailProperty.blobId,
EmailProperty.subject,
EmailProperty.from,
EmailProperty.to,
EmailProperty.cc,
EmailProperty.bcc,
EmailProperty.keywords,
EmailProperty.size,
EmailProperty.receivedAt,
EmailProperty.sentAt,
EmailProperty.preview,
EmailProperty.hasAttachment,
EmailProperty.replyTo,
EmailProperty.mailboxIds,
...propertiesDefault.value,
IndividualHeaderIdentifier.headerCalendarEvent.value,
});
@@ -34,6 +34,9 @@ class SearchEmail extends Email {
super.headerUserAgent,
super.headerMdn,
super.headerCalendarEvent,
super.xPriorityHeader,
super.importanceHeader,
super.priorityHeader,
super.sMimeStatusHeader,
super.identityHeader,
required this.searchSnippetSubject,
@@ -82,6 +85,9 @@ class SearchEmail extends Email {
headerUserAgent: email.headerUserAgent,
headerMdn: email.headerMdn,
headerCalendarEvent: email.headerCalendarEvent,
xPriorityHeader: email.xPriorityHeader,
importanceHeader: email.importanceHeader,
priorityHeader: email.priorityHeader,
sMimeStatusHeader: email.sMimeStatusHeader,
identityHeader: email.identityHeader,
searchSnippetSubject: searchSnippetSubject,
@@ -354,4 +354,20 @@ mixin BaseEmailItemTile {
),
);
}
Widget buildMarkAsImportantIcon(BuildContext context) {
return Padding(
padding: ItemEmailTileStyles.getSpaceCalendarEventIcon(
context,
responsiveUtils,
),
child: SvgPicture.asset(
imagePaths.icMarkAsImportant,
width: 20,
height: 20,
fit: BoxFit.fill,
colorFilter: AppColor.steelGray200.asFilter(),
),
);
}
}
@@ -104,6 +104,8 @@ class EmailTileBuilder extends StatelessWidget with BaseEmailItemTile {
children: [
if (presentationEmail.hasCalendarEvent)
buildCalendarEventIcon(context: context, presentationEmail: presentationEmail),
if (presentationEmail.isMarkAsImportant)
buildMarkAsImportantIcon(context),
Expanded(child: buildEmailTitle(
context,
presentationEmail,
@@ -140,6 +140,8 @@ class _EmailTileBuilderState extends State<EmailTileBuilder> with BaseEmailItem
context: context,
presentationEmail: widget.presentationEmail
),
if (widget.presentationEmail.isMarkAsImportant)
buildMarkAsImportantIcon(context),
Expanded(
child: buildEmailTitle(
context,
@@ -257,6 +259,8 @@ class _EmailTileBuilderState extends State<EmailTileBuilder> with BaseEmailItem
context: context,
presentationEmail: widget.presentationEmail
),
if (widget.presentationEmail.isMarkAsImportant)
buildMarkAsImportantIcon(context),
Expanded(
child: buildEmailTitle(
context,
@@ -611,6 +615,8 @@ class _EmailTileBuilderState extends State<EmailTileBuilder> with BaseEmailItem
return Row(children: [
if (widget.presentationEmail.hasCalendarEvent)
buildCalendarEventIcon(context: context, presentationEmail: widget.presentationEmail),
if (widget.presentationEmail.isMarkAsImportant)
buildMarkAsImportantIcon(context),
if (widget.presentationEmail.getEmailTitle().isNotEmpty)
Container(
constraints: BoxConstraints(maxWidth: constraints.maxWidth / 2),