TF-1865: Update UI and replace task in workmanager when update sending email

(cherry picked from commit 15168421c994c5f928873e0794bcbf0c36b015c9)
This commit is contained in:
HuyNguyen
2023-06-06 01:30:43 +07:00
committed by Dat Vu
parent 9ca0c7385a
commit ee6bf907ff
13 changed files with 206 additions and 170 deletions
@@ -1,3 +1,4 @@
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:model/extensions/email_extension.dart';
import 'package:model/extensions/email_id_extensions.dart';
import 'package:model/extensions/identity_id_extension.dart';
@@ -23,9 +24,9 @@ extension SendingEmailExtension on SendingEmail {
);
}
EmailRequest toEmailRequest() {
EmailRequest toEmailRequest({Email? emailEdit}) {
return EmailRequest(
email: email,
email: emailEdit ?? email,
emailActionType: emailActionType,
sentMailboxId: sentMailboxId,
emailIdDestroyed: emailIdDestroyed,
@@ -66,7 +66,7 @@ class SendingEmail with EquatableMixin {
return val;
}
PresentationEmail get presentationEmail => email.toPresentationEmail();
PresentationEmail get presentationEmail => email.sendingEmailToPresentationEmail();
String getCreateTimeAt(String newLocale) {
return DateFormat(createTime.toPattern(), newLocale).format(createTime);
@@ -33,6 +33,7 @@ import 'package:receive_sharing_intent/receive_sharing_intent.dart';
import 'package:rich_text_composer/rich_text_composer.dart';
import 'package:super_tag_editor/tag_editor.dart';
import 'package:tmail_ui_user/features/base/base_controller.dart';
import 'package:tmail_ui_user/features/composer/domain/extensions/sending_email_extension.dart';
import 'package:tmail_ui_user/features/composer/domain/model/contact_suggestion_source.dart';
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
import 'package:tmail_ui_user/features/composer/domain/state/download_image_as_base64_state.dart';
@@ -235,9 +236,7 @@ class ComposerController extends BaseController {
@override
void onReady() async {
_initEmail();
if (isNetworkConnectionAvailable) {
_getAllIdentities();
}
_getAllIdentities();
if (!BuildUtils.isWeb) {
Future.delayed(const Duration(milliseconds: 500), () =>
_checkContactPermission());
@@ -616,7 +615,8 @@ class ComposerController extends BaseController {
{
bool asDrafts = false,
MailboxId? draftMailboxId,
MailboxId? outboxMailboxId
MailboxId? outboxMailboxId,
ComposerArguments? arguments
}
) async {
Set<EmailAddress> listFromEmailAddress = {EmailAddress(null, userProfile.email)};
@@ -663,7 +663,10 @@ class ComposerController extends BaseController {
final generatePartId = PartId(_uuid.v1());
final isUpdateSendingEmail = arguments?.sendingEmail != null;
return Email(
id: isUpdateSendingEmail ? EmailId(Id(arguments!.sendingEmail!.sendingId)) : null,
mailboxIds: mailboxIds.isNotEmpty ? mailboxIds : null,
from: listFromEmailAddress,
to: listToEmailAddress.toSet(),
@@ -801,17 +804,19 @@ class ComposerController extends BaseController {
final userProfile = mailboxDashBoardController.userProfile.value;
if (arguments != null && accountId != null && userProfile != null && session != null) {
final email = await _generateEmail(context, userProfile, outboxMailboxId: outboxMailboxId);
final emailRequest = EmailRequest(
email: email,
sentMailboxId: sentMailboxId,
identityId: identitySelected.value?.id,
emailIdDestroyed: arguments.emailActionType == EmailActionType.edit
? arguments.presentationEmail?.id
: null,
emailIdAnsweredOrForwarded: arguments.presentationEmail?.id,
emailActionType: arguments.emailActionType
);
final email = await _generateEmail(context, userProfile, outboxMailboxId: outboxMailboxId, arguments: arguments);
final emailRequest = arguments.sendingEmail != null
? arguments.sendingEmail!.toEmailRequest(emailEdit: email)
: EmailRequest(
email: email,
sentMailboxId: sentMailboxId,
identityId: identitySelected.value?.id,
emailIdDestroyed: arguments.emailActionType == EmailActionType.edit
? arguments.presentationEmail?.id
: null,
emailIdAnsweredOrForwarded: arguments.presentationEmail?.id,
emailActionType: arguments.emailActionType
);
final mailboxRequest = outboxMailboxId == null
? CreateNewMailboxRequest(Id(_uuid.v1()), PresentationMailbox.outboxMailboxName)
: null;
@@ -820,7 +825,8 @@ class ComposerController extends BaseController {
session,
accountId,
emailRequest,
mailboxRequest
mailboxRequest,
isUpdateSendingEmail: arguments.sendingEmail != null,
);
uploadController.clearInlineFileUploaded();
@@ -1127,7 +1133,7 @@ class ComposerController extends BaseController {
}
}
if (arguments.emailContents != null && arguments.emailContents!.isNotEmpty) {
if (arguments.emailContents != null && arguments.emailContents!.isNotEmpty && arguments.sendingEmail != null) {
_emailContents = arguments.emailContents;
emailContentsViewState.value = Right(GetEmailContentSuccess(_emailContents!, [], [], arguments.presentationEmail?.toEmail()));
} else {
@@ -9,9 +9,18 @@ class SendingEmailArguments extends RouterArguments {
final AccountId accountId;
final EmailRequest emailRequest;
final CreateNewMailboxRequest? mailboxRequest;
final bool? isUpdateSendingEmail;
SendingEmailArguments(this.session, this.accountId, this.emailRequest, this.mailboxRequest);
SendingEmailArguments(
this.session,
this.accountId,
this.emailRequest,
this.mailboxRequest,
{
this.isUpdateSendingEmail
}
);
@override
List<Object?> get props => [session, accountId, emailRequest, mailboxRequest];
List<Object?> get props => [session, accountId, emailRequest, mailboxRequest, isUpdateSendingEmail];
}
@@ -2,6 +2,7 @@ import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/model.dart';
import 'package:receive_sharing_intent/receive_sharing_intent.dart';
import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart';
import 'package:tmail_ui_user/main/routes/router_arguments.dart';
class ComposerArguments extends RouterArguments {
@@ -12,6 +13,7 @@ class ComposerArguments extends RouterArguments {
final EmailAddress? emailAddress;
final List<Attachment>? attachments;
final Role? mailboxRole;
final SendingEmail? sendingEmail;
ComposerArguments({
this.emailActionType = EmailActionType.compose,
@@ -21,6 +23,7 @@ class ComposerArguments extends RouterArguments {
this.mailboxRole,
this.emailAddress,
this.listSharedMediaFile,
this.sendingEmail
});
@override
@@ -32,5 +35,6 @@ class ComposerArguments extends RouterArguments {
mailboxRole,
emailAddress,
listSharedMediaFile,
sendingEmail
];
}
@@ -1196,7 +1196,8 @@ class MailboxDashBoardController extends ReloadableController {
result.session,
result.accountId,
result.emailRequest,
result.mailboxRequest
result.mailboxRequest,
isUpdateSendingEmail: result.isUpdateSendingEmail
);
}
}
@@ -1317,7 +1318,8 @@ class MailboxDashBoardController extends ReloadableController {
result.session,
result.accountId,
result.emailRequest,
result.mailboxRequest
result.mailboxRequest,
isUpdateSendingEmail: result.isUpdateSendingEmail ?? false,
);
}
}
@@ -1750,7 +1752,8 @@ class MailboxDashBoardController extends ReloadableController {
Session session,
AccountId accountId,
EmailRequest emailRequest,
CreateNewMailboxRequest? mailboxRequest
CreateNewMailboxRequest? mailboxRequest,
{bool? isUpdateSendingEmail = false}
) {
if (PlatformInfo.isMobile) {
if (networkConnectionController.isNetworkConnectionAvailable()) {
@@ -1761,48 +1764,10 @@ class MailboxDashBoardController extends ReloadableController {
mailboxRequest: mailboxRequest
));
} else {
if (currentContext != null) {
showConfirmDialogAction(
currentContext!,
'',
AppLocalizations.of(currentContext!).proceed,
onConfirmAction: () {
final sendingEmail = emailRequest.toSendingEmail(
_uuid.v1(),
mailboxRequest: mailboxRequest
);
_storeSendingEmail(accountId, session.username, sendingEmail);
},
title: AppLocalizations.of(currentContext!).youAreInOfflineMode,
icon: SvgPicture.asset(_imagePaths.icDialogOfflineMode),
alignCenter: true,
messageStyle: const TextStyle(
color: AppColor.colorTitleSendingItem,
fontSize: 15,
fontWeight: FontWeight.normal
),
listTextSpan: [
TextSpan(text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailFirst),
TextSpan(
text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailSecond,
style: const TextStyle(
color: AppColor.colorTitleSendingItem,
fontSize: 15,
fontWeight: FontWeight.w600
),
),
TextSpan(text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailThird),
TextSpan(
text: AppLocalizations.of(currentContext!).sendingQueue,
style: const TextStyle(
color: AppColor.colorTitleSendingItem,
fontSize: 15,
fontWeight: FontWeight.w600
),
),
TextSpan(text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailTail)
]
);
if (currentContext != null && isUpdateSendingEmail == false) {
_showActionSendingEmail(session, accountId, emailRequest, mailboxRequest);
} else {
_handleStoreSendingEmail(session, accountId, emailRequest, mailboxRequest, isUpdateSendingEmail: isUpdateSendingEmail);
}
}
} else {
@@ -1815,22 +1780,104 @@ class MailboxDashBoardController extends ReloadableController {
}
}
void _storeSendingEmail(AccountId accountId, UserName userName, SendingEmail sendingEmail) {
log('MailboxDashBoardController::_storeSendingEmail():sendingEmail: $sendingEmail');
consumeState(_storeSendingEmailInteractor.execute(accountId, userName, sendingEmail));
void _handleStoreSendingEmail(
Session session,
AccountId accountId,
EmailRequest emailRequest,
CreateNewMailboxRequest? mailboxRequest,
{bool? isUpdateSendingEmail = false}
) {
final currentEmailId = emailRequest.email.id?.id.value;
final sendingEmail = emailRequest.toSendingEmail(
emailRequest.email.id != null ? currentEmailId! : _uuid.v1(),
mailboxRequest: mailboxRequest
);
_storeSendingEmail(accountId, session.username, sendingEmail, isUpdateSendingEmail: isUpdateSendingEmail);
}
void _handleStoreSendingEmailSuccess(StoreSendingEmailSuccess success) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).messageHasBeenSavedToTheSendingQueue,
leadingSVGIconColor: Colors.white,
leadingSVGIcon: _imagePaths.icEmail);
}
void _showActionSendingEmail(
Session session,
AccountId accountId,
EmailRequest emailRequest,
CreateNewMailboxRequest? mailboxRequest
) {
showConfirmDialogAction(
currentContext!,
'',
AppLocalizations.of(currentContext!).proceed,
onConfirmAction: () {
_handleStoreSendingEmail(session, accountId, emailRequest, mailboxRequest);
},
title: AppLocalizations.of(currentContext!).youAreInOfflineMode,
icon: SvgPicture.asset(_imagePaths.icDialogOfflineMode),
alignCenter: true,
messageStyle: const TextStyle(
color: AppColor.colorTitleSendingItem,
fontSize: 15,
fontWeight: FontWeight.normal
),
listTextSpan: [
TextSpan(text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailFirst),
TextSpan(
text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailSecond,
style: const TextStyle(
color: AppColor.colorTitleSendingItem,
fontSize: 15,
fontWeight: FontWeight.w600
),
),
TextSpan(text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailThird),
TextSpan(
text: AppLocalizations.of(currentContext!).sendingQueue,
style: const TextStyle(
color: AppColor.colorTitleSendingItem,
fontSize: 15,
fontWeight: FontWeight.w600
),
),
TextSpan(text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailTail)
]
);
}
_addSendingEmailToSendingQueue(success.sendingEmail);
getAllSendingEmails();
void _storeSendingEmail(
AccountId accountId,
UserName userName,
SendingEmail sendingEmail,
{bool? isUpdateSendingEmail}
) {
log('MailboxDashBoardController::_storeSendingEmail():sendingEmail: $sendingEmail');
consumeState(_storeSendingEmailInteractor.execute(
accountId,
userName,
sendingEmail,
isUpdateSendingEmail ?? false));
}
void _handleStoreSendingEmailSuccess(StoreSendingEmailSuccess success) async {
if (success.isUpdateSendingEmail) {
_cancelSendingEmailToSendingQueue(success.sendingEmail);
_addSendingEmailToSendingQueue(success.sendingEmail);
getAllSendingEmails();
} else {
_addSendingEmailToSendingQueue(success.sendingEmail);
getAllSendingEmails();
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).messageHasBeenSavedToTheSendingQueue,
leadingSVGIconColor: Colors.white,
leadingSVGIcon: _imagePaths.icEmail);
}
}
}
void _cancelSendingEmailToSendingQueue(SendingEmail sendingEmail) async {
try {
await WorkSchedulerController().cancelByUniqueId(sendingEmail.sendingId);
} catch (e) {
logError('MailboxDashBoardController::_cancelSendingEmailToSendingQueue(): EXCEPTION: $e');
}
}
void _addSendingEmailToSendingQueue(SendingEmail sendingEmail) async {
@@ -14,4 +14,6 @@ extension ListSendingEmailExtension on List<SendingEmail> {
bool isAllSelected() => every((sendingEmail) => sendingEmail.isSelected);
bool isAllUnSelected() => every((sendingEmail) => !sendingEmail.isSelected);
List<SendingEmail> listSelected() => where((sendingEmail) => sendingEmail.isSelected).toList();
}
@@ -9,6 +9,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:model/email/email_action_type.dart';
import 'package:model/extensions/list_email_content_extension.dart';
import 'package:model/mailbox/select_mode.dart';
import 'package:tmail_ui_user/features/base/base_controller.dart';
import 'package:tmail_ui_user/features/base/mixin/message_dialog_action_mixin.dart';
@@ -35,6 +36,7 @@ class SendingQueueController extends BaseController with MessageDialogActionMixi
final _appToast = getBinding<AppToast>();
final listSendingEmailController = ScrollController();
final listSendingEmailSelected = <SendingEmail>[].obs;
final selectionState = Rx<SelectMode>(SelectMode.INACTIVE);
@@ -69,6 +71,8 @@ class SendingQueueController extends BaseController with MessageDialogActionMixi
selectionState.value = newListSendingEmail.isAllUnSelected()
? SelectMode.INACTIVE
: SelectMode.ACTIVE;
listSendingEmailSelected.value = newListSendingEmail.listSelected();
}
void toggleSelectionSendingEmail(SendingEmail sendingEmail) {
@@ -78,6 +82,8 @@ class SendingQueueController extends BaseController with MessageDialogActionMixi
selectionState.value = newListSendingEmail.isAllUnSelected()
? SelectMode.INACTIVE
: SelectMode.ACTIVE;
listSendingEmailSelected.value = newListSendingEmail.listSelected();
}
bool get isAllUnSelected => dashboardController!.listSendingEmails.isAllUnSelected();
@@ -178,7 +184,8 @@ class SendingQueueController extends BaseController with MessageDialogActionMixi
emailActionType: EmailActionType.edit,
presentationEmail: sendingEmail.presentationEmail,
mailboxRole: dashboardController?.selectedMailbox.value?.role,
emailContents: sendingEmail.email.subject,
emailContents: sendingEmail.presentationEmail.emailContentList.asHtmlString,
sendingEmail: sendingEmail
);
dashboardController?.goToComposer(arguments);
@@ -212,55 +219,4 @@ class SendingQueueController extends BaseController with MessageDialogActionMixi
_sendingQueueIsolateManager?.release();
super.onClose();
}
//
// void pressEmailAction(
// BuildContext context,
// EmailActionType actionType,
// PresentationEmail selectedEmail,
// {PresentationMailbox? mailboxContain}
// ) {
// switch(actionType) {
// case EmailActionType.edit:
// editEmail(selectedEmail);
// break;
// case EmailActionType.selection:
// selectEmail(context, selectedEmail);
// break;
// default:
// break;
// }
// }
//
// void pressEmailSelectionAction(
// BuildContext context,
// EmailActionType actionType,
// List<PresentationEmail> selectionEmail
// ) {
// switch(actionType) {
// case EmailActionType.edit:
// editEmail(selectionEmail.first);
// break;
// default:
// break;
// }
// }
// bool isSelectionEnabled() => currentSelectMode.value == SelectMode.ACTIVE;
//
// bool? _isUnSelectedAll() {
// return dashboardController?.sendingEmailsInCurrentMailbox.every((email) => email.selectMode == SelectMode.INACTIVE);
// }
//
// void cancelSelectEmail() {
// final newEmailList = dashboardController?.sendingEmailsInCurrentMailbox
// .map((email) => email.toSelectedEmail(selectMode: SelectMode.INACTIVE))
// .toList();
// updateEmailList(newEmailList);
// currentSelectMode.value = SelectMode.INACTIVE;
// listEmailSelected.clear();
// }
// List<PresentationEmail> get listEmailSelected => dashboardController?.sendingEmailsInCurrentMailbox.listEmailSelected ?? [];
}
@@ -22,12 +22,14 @@ class SendingQueueView extends GetWidget<SendingQueueController> with AppLoaderM
body: SafeArea(
child: Column(
children: [
Obx(() => AppBarSendingQueueWidget(
listSendingEmails: controller.dashboardController!.listSendingEmails,
onOpenMailboxMenu: controller.openMailboxMenu,
onBackAction: controller.disableSelectionMode,
selectMode: controller.selectionState.value,
)),
Obx(() {
return AppBarSendingQueueWidget(
listSendingEmails: controller.listSendingEmailSelected,
onOpenMailboxMenu: controller.openMailboxMenu,
onBackAction: controller.disableSelectionMode,
selectMode: controller.selectionState.value,
);
}),
const Divider(color: AppColor.colorDividerComposer, height: 1),
const BannerMessageSendingQueueWidget(),
Expanded(child: _buildListSendingEmails(context)),
@@ -36,7 +38,7 @@ class SendingQueueView extends GetWidget<SendingQueueController> with AppLoaderM
return const SizedBox.shrink();
} else {
return BottomBarSendingQueueWidget(
listSendingEmails: controller.dashboardController!.listSendingEmails,
listSendingEmails: controller.listSendingEmailSelected,
onHandleSendingEmailActionType: (actionType, listSendingEmails) => controller.handleSendingEmailActionType(context, actionType, listSendingEmails),
);
}
@@ -60,8 +62,9 @@ class SendingQueueView extends GetWidget<SendingQueueController> with AppLoaderM
sendingEmail: controller.dashboardController!.listSendingEmails[index],
selectMode: controller.selectionState.value,
onLongPressAction: controller.handleOnLongPressAction,
onSelectAction: controller.toggleSelectionSendingEmail,
));
onSelectLeadingAction: controller.toggleSelectionSendingEmail,
onTapAction: (actionType, listSendingEmails) =>
controller.handleSendingEmailActionType(context, actionType, [listSendingEmails])));
}
);
} else {
@@ -5,6 +5,7 @@ import 'package:core/presentation/views/button/button_builder.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart';
import 'package:tmail_ui_user/features/sending_queue/presentation/extensions/list_sending_email_extension.dart';
import 'package:tmail_ui_user/features/sending_queue/presentation/model/sending_email_action_type.dart';
typedef OnHandleSendingEmailActionType = void Function(SendingEmailActionType, List<SendingEmail>);
@@ -35,15 +36,16 @@ class BottomBarSendingQueueWidget extends StatelessWidget {
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(child: (ButtonBuilder(imagePaths.icEdit)
..key(Key(SendingEmailActionType.edit.getButtonKey()))
..iconColor(SendingEmailActionType.edit.getButtonIconColor())
..padding(const EdgeInsets.all(8))
..radiusSplash(8)
..textStyle(TextStyle(fontSize: 12, color: SendingEmailActionType.edit.getButtonTitleColor()))
..onPressActionClick(() => onHandleSendingEmailActionType?.call(SendingEmailActionType.edit, listSendingEmails))
..text(SendingEmailActionType.edit.getButtonTitle(context), isVertical: true)
).build()),
if (!listSendingEmails.isAllSelected() || listSendingEmails.length < 2)
Expanded(child: (ButtonBuilder(imagePaths.icEdit)
..key(Key(SendingEmailActionType.edit.getButtonKey()))
..iconColor(SendingEmailActionType.edit.getButtonIconColor())
..padding(const EdgeInsets.all(8))
..radiusSplash(8)
..textStyle(TextStyle(fontSize: 12, color: SendingEmailActionType.edit.getButtonTitleColor()))
..onPressActionClick(() => onHandleSendingEmailActionType?.call(SendingEmailActionType.edit, listSendingEmails))
..text(SendingEmailActionType.edit.getButtonTitle(context), isVertical: true)
).build()),
Expanded(child: (ButtonBuilder(imagePaths.icDeleteComposer)
..key(Key(SendingEmailActionType.delete.getButtonKey()))
..iconColor(SendingEmailActionType.delete.getButtonIconColor())
@@ -8,24 +8,27 @@ import 'package:get/get.dart';
import 'package:model/extensions/presentation_email_extension.dart';
import 'package:model/mailbox/select_mode.dart';
import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart';
import 'package:tmail_ui_user/features/sending_queue/presentation/model/sending_email_action_type.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
typedef OnLongPressSendingEmailItemAction = void Function(SendingEmail);
typedef OnSelectSendingEmailItemAction = void Function(SendingEmail);
typedef OnSelectSendingEmailItemAction = void Function(SendingEmailActionType, SendingEmail);
typedef OnSelectLeadingSendingEmailItemAction = void Function(SendingEmail);
class SendingEmailTileWidget extends StatelessWidget {
final SendingEmail sendingEmail;
final SelectMode selectMode;
final OnLongPressSendingEmailItemAction? onLongPressAction;
final OnSelectSendingEmailItemAction? onSelectAction;
final OnSelectSendingEmailItemAction? onTapAction;
final OnSelectLeadingSendingEmailItemAction? onSelectLeadingAction;
const SendingEmailTileWidget({
super.key,
required this.sendingEmail,
required this.selectMode,
this.onLongPressAction,
this.onSelectAction
this.onTapAction,
this.onSelectLeadingAction,
});
@override
@@ -35,7 +38,7 @@ class SendingEmailTileWidget extends StatelessWidget {
return Material(
color: Colors.transparent,
child: InkWell(
onTap: () => {},
onTap: () => onTapAction?.call(SendingEmailActionType.edit ,sendingEmail),
onLongPress: () => onLongPressAction?.call(sendingEmail),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
@@ -63,7 +66,7 @@ class SendingEmailTileWidget extends StatelessWidget {
height: 24
),
),
onTap: () => onSelectAction?.call(sendingEmail),
onTap: () => onSelectLeadingAction?.call(sendingEmail),
)
else
SvgPicture.asset(
+2 -1
View File
@@ -161,7 +161,8 @@ extension EmailExtension on Email {
mailboxIds: mailboxIds,
selectMode: selectMode,
emailHeader: headers?.toList(),
bodyValues: bodyValues
bodyValues: bodyValues,
htmlBody: htmlBody
);
}
}
@@ -82,19 +82,21 @@ extension PresentationEmailExtension on PresentationEmail {
Email toEmail() {
return Email(
id: this.id,
keywords: keywords,
size: size,
receivedAt: receivedAt,
hasAttachment: hasAttachment,
preview: preview,
subject: subject,
sentAt: sentAt,
from: from,
to: to,
cc: cc,
bcc: bcc,
replyTo: replyTo
id: this.id,
keywords: keywords,
size: size,
receivedAt: receivedAt,
hasAttachment: hasAttachment,
preview: preview,
subject: subject,
sentAt: sentAt,
from: from,
to: to,
cc: cc,
bcc: bcc,
replyTo: replyTo,
htmlBody: htmlBody,
bodyValues: bodyValues,
);
}