TF-3601 View entire message on dialog
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
@@ -136,6 +136,7 @@ class ComposerBindings extends BaseBindings {
|
||||
), tag: composerId);
|
||||
Get.lazyPut(() => EmailLocalStorageDataSourceImpl(
|
||||
Get.find<LocalStorageManager>(),
|
||||
Get.find<PreviewEmlFileUtils>(),
|
||||
Get.find<CacheExceptionThrower>(),
|
||||
), tag: composerId);
|
||||
Get.lazyPut(() => EmailSessionStorageDatasourceImpl(
|
||||
|
||||
@@ -26,6 +26,7 @@ import 'package:tmail_ui_user/features/email/domain/model/event_action.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/preview_email_eml_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/restore_deleted_message_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/view_entire_message_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/model/eml_previewer.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart';
|
||||
@@ -221,4 +222,6 @@ abstract class EmailDataSource {
|
||||
AccountRequest accountRequest,
|
||||
{CancelToken? cancelToken}
|
||||
);
|
||||
|
||||
Future<String> generateEntireMessageAsDocument(ViewEntireMessageRequest entireMessageRequest);
|
||||
}
|
||||
@@ -36,6 +36,7 @@ import 'package:tmail_ui_user/features/email/domain/model/event_action.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/preview_email_eml_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/restore_deleted_message_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/view_entire_message_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/extensions/attachment_extension.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/model/eml_previewer.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
||||
@@ -582,4 +583,9 @@ class EmailDataSourceImpl extends EmailDataSource {
|
||||
cancelToken: cancelToken,
|
||||
);
|
||||
}).catchError(_exceptionThrower.throwException);
|
||||
|
||||
@override
|
||||
Future<String> generateEntireMessageAsDocument(ViewEntireMessageRequest entireMessageRequest) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
}
|
||||
@@ -36,6 +36,7 @@ import 'package:tmail_ui_user/features/email/domain/model/event_action.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/preview_email_eml_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/restore_deleted_message_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/view_entire_message_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/model/eml_previewer.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/offline_mode/extensions/list_sending_email_hive_cache_extension.dart';
|
||||
@@ -582,4 +583,9 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource {
|
||||
Future<DownloadedResponse> exportAllAttachments(AccountId accountId, EmailId emailId, String baseDownloadAllUrl, String outputFileName, AccountRequest accountRequest, {CancelToken? cancelToken}) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<String> generateEntireMessageAsDocument(ViewEntireMessageRequest entireMessageRequest) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
}
|
||||
@@ -3,13 +3,21 @@ import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'dart:typed_data';
|
||||
|
||||
import 'package:core/data/model/preview_attachment.dart';
|
||||
import 'package:core/data/network/download/downloaded_response.dart';
|
||||
import 'package:core/domain/extensions/datetime_extension.dart';
|
||||
import 'package:core/presentation/extensions/html_extension.dart';
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:core/utils/file_utils.dart';
|
||||
import 'package:core/utils/preview_eml_file_utils.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:email_recovery/email_recovery/email_recovery_action.dart';
|
||||
import 'package:email_recovery/email_recovery/email_recovery_action_id.dart';
|
||||
import 'package:filesize/filesize.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/error/set_error.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/id.dart';
|
||||
@@ -22,6 +30,8 @@ import 'package:model/download/download_task_id.dart';
|
||||
import 'package:model/email/attachment.dart';
|
||||
import 'package:model/email/mark_star_action.dart';
|
||||
import 'package:model/email/read_actions.dart';
|
||||
import 'package:model/extensions/list_email_address_extension.dart';
|
||||
import 'package:model/extensions/presentation_email_extension.dart';
|
||||
import 'package:tmail_ui_user/features/caching/utils/local_storage_manager.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart';
|
||||
@@ -30,6 +40,8 @@ import 'package:tmail_ui_user/features/email/domain/model/event_action.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/preview_email_eml_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/restore_deleted_message_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/view_entire_message_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/extensions/attachment_extension.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/model/eml_previewer.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart';
|
||||
@@ -38,10 +50,14 @@ import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart';
|
||||
class EmailLocalStorageDataSourceImpl extends EmailDataSource {
|
||||
|
||||
final LocalStorageManager _localStorageManager;
|
||||
final PreviewEmlFileUtils _previewEmlFileUtils;
|
||||
final ExceptionThrower _exceptionThrower;
|
||||
final ImagePaths _imagePaths = Get.find<ImagePaths>();
|
||||
final FileUtils _fileUtils = Get.find<FileUtils>();
|
||||
|
||||
EmailLocalStorageDataSourceImpl(
|
||||
this._localStorageManager,
|
||||
this._previewEmlFileUtils,
|
||||
this._exceptionThrower,
|
||||
);
|
||||
|
||||
@@ -273,4 +289,76 @@ class EmailLocalStorageDataSourceImpl extends EmailDataSource {
|
||||
Future<DownloadedResponse> exportAllAttachments(AccountId accountId, EmailId emailId, String baseDownloadAllUrl, String outputFileName, AccountRequest accountRequest, {CancelToken? cancelToken}) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<String> generateEntireMessageAsDocument(ViewEntireMessageRequest entireMessageRequest) {
|
||||
return Future.sync(() async {
|
||||
final email = entireMessageRequest.presentationEmail;
|
||||
final appLocalizations = entireMessageRequest.appLocalizations;
|
||||
final locale = entireMessageRequest.locale.toLanguageTag();
|
||||
final listAttachments = entireMessageRequest.attachments;
|
||||
final emailContentEscaped = entireMessageRequest.emailContent;
|
||||
|
||||
final sender = email.from?.isNotEmpty == true
|
||||
? email.from!.first
|
||||
: null;
|
||||
|
||||
final receiveTime = email.getReceivedAt(
|
||||
locale,
|
||||
pattern: email.receivedAt?.value.toLocal().toPatternForPrinting(locale)
|
||||
);
|
||||
|
||||
final sentTime = email.getSentAt(
|
||||
locale,
|
||||
pattern: email.sentAt?.value.toLocal().toPatternForPrinting(locale)
|
||||
);
|
||||
|
||||
final List<PreviewAttachment> listPreviewAttachment = [];
|
||||
|
||||
if (listAttachments.isNotEmpty) {
|
||||
await Future.forEach<Attachment>(listAttachments, (attachment) async {
|
||||
final iconBase64Data = await _fileUtils.convertImageAssetToBase64(
|
||||
attachment.getIcon(_imagePaths));
|
||||
|
||||
final previewAttachment = PreviewAttachment(
|
||||
iconBase64Data: iconBase64Data,
|
||||
name: attachment.name.escapeLtGtHtmlString(),
|
||||
size: filesize(attachment.size?.value),
|
||||
link: attachment.hyperLink,
|
||||
);
|
||||
|
||||
listPreviewAttachment.add(previewAttachment);
|
||||
});
|
||||
}
|
||||
|
||||
final attachmentIconBase64Data = email.hasAttachment == true
|
||||
? await _fileUtils.convertImageAssetToBase64(_imagePaths.icAttachment)
|
||||
: '';
|
||||
|
||||
final htmlDocument = _previewEmlFileUtils.generatePreviewEml(
|
||||
appName: appLocalizations.app_name,
|
||||
userName: entireMessageRequest.userName.value,
|
||||
subjectPrefix: appLocalizations.subject,
|
||||
subject: email.subject?.escapeLtGtHtmlString() ?? '',
|
||||
emailContent: emailContentEscaped,
|
||||
senderName: sender?.name.escapeLtGtHtmlString() ?? '',
|
||||
senderEmailAddress: sender?.email ?? '',
|
||||
dateTime: receiveTime.isNotEmpty ? receiveTime : sentTime,
|
||||
fromPrefix: appLocalizations.from_email_address_prefix,
|
||||
toPrefix: appLocalizations.to_email_address_prefix,
|
||||
ccPrefix: appLocalizations.cc_email_address_prefix,
|
||||
bccPrefix: appLocalizations.bcc_email_address_prefix,
|
||||
replyToPrefix: appLocalizations.replyToEmailAddressPrefix,
|
||||
titleAttachment: appLocalizations.attachments.toLowerCase(),
|
||||
attachmentIcon: attachmentIconBase64Data,
|
||||
toAddress: email.to?.listEmailAddressToString(isFullEmailAddress: true),
|
||||
ccAddress: email.cc?.listEmailAddressToString(isFullEmailAddress: true),
|
||||
bccAddress: email.bcc?.listEmailAddressToString(isFullEmailAddress: true),
|
||||
replyToAddress: email.replyTo?.listEmailAddressToString(isFullEmailAddress: true),
|
||||
listAttachment: listPreviewAttachment,
|
||||
);
|
||||
|
||||
return htmlDocument;
|
||||
}).catchError(_exceptionThrower.throwException);
|
||||
}
|
||||
}
|
||||
@@ -30,6 +30,7 @@ import 'package:tmail_ui_user/features/email/domain/model/event_action.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/preview_email_eml_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/restore_deleted_message_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/view_entire_message_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/model/eml_previewer.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart';
|
||||
@@ -271,4 +272,9 @@ class EmailSessionStorageDatasourceImpl extends EmailDataSource {
|
||||
Future<DownloadedResponse> exportAllAttachments(AccountId accountId, EmailId emailId, String baseDownloadAllUrl, String outputFileName, AccountRequest accountRequest, {CancelToken? cancelToken}) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<String> generateEntireMessageAsDocument(ViewEntireMessageRequest entireMessageRequest) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
}
|
||||
@@ -34,6 +34,7 @@ import 'package:tmail_ui_user/features/email/domain/model/event_action.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/preview_email_eml_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/restore_deleted_message_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/view_entire_message_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/model/eml_previewer.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/data/datasource/state_datasource.dart';
|
||||
@@ -567,4 +568,9 @@ class EmailRepositoryImpl extends EmailRepository {
|
||||
outputFileName,
|
||||
accountRequest,
|
||||
);
|
||||
|
||||
@override
|
||||
Future<String> generateEntireMessageAsDocument(ViewEntireMessageRequest entireMessageRequest) {
|
||||
return emailDataSource[DataSourceType.local]!.generateEntireMessageAsDocument(entireMessageRequest);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
||||
import 'package:model/email/attachment.dart';
|
||||
import 'package:model/email/presentation_email.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
|
||||
class ViewEntireMessageRequest with EquatableMixin {
|
||||
final UserName userName;
|
||||
final PresentationEmail presentationEmail;
|
||||
final List<Attachment> attachments;
|
||||
final String emailContent;
|
||||
final Locale locale;
|
||||
final AppLocalizations appLocalizations;
|
||||
|
||||
ViewEntireMessageRequest({
|
||||
required this.userName,
|
||||
required this.presentationEmail,
|
||||
required this.attachments,
|
||||
required this.emailContent,
|
||||
required this.locale,
|
||||
required this.appLocalizations,
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
userName,
|
||||
presentationEmail,
|
||||
attachments,
|
||||
emailContent,
|
||||
locale,
|
||||
appLocalizations,
|
||||
];
|
||||
}
|
||||
@@ -29,6 +29,7 @@ import 'package:tmail_ui_user/features/email/domain/model/event_action.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/preview_email_eml_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/restore_deleted_message_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/view_entire_message_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/model/eml_previewer.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
||||
|
||||
@@ -219,4 +220,6 @@ abstract class EmailRepository {
|
||||
AccountRequest accountRequest,
|
||||
{CancelToken? cancelToken}
|
||||
);
|
||||
|
||||
Future<String> generateEntireMessageAsDocument(ViewEntireMessageRequest entireMessageRequest);
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
|
||||
class GettingEntireMessageAsDocument extends LoadingState {}
|
||||
|
||||
class GetEntireMessageAsDocumentSuccess extends UIState {
|
||||
final String messageDocument;
|
||||
|
||||
GetEntireMessageAsDocumentSuccess(this.messageDocument);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [messageDocument];
|
||||
}
|
||||
|
||||
class GetEntireMessageAsDocumentFailure extends FeatureFailure {
|
||||
|
||||
GetEntireMessageAsDocumentFailure({dynamic exception}) : super(exception: exception);
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/view_entire_message_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/get_entire_message_as_document_state.dart';
|
||||
|
||||
class GetEntireMessageAsDocumentInteractor {
|
||||
final EmailRepository _emailRepository;
|
||||
|
||||
GetEntireMessageAsDocumentInteractor(this._emailRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(ViewEntireMessageRequest messageRequest) async* {
|
||||
try {
|
||||
yield Right(GettingEntireMessageAsDocument());
|
||||
final messageDocument = await _emailRepository.generateEntireMessageAsDocument(messageRequest);
|
||||
yield Right(GetEntireMessageAsDocumentSuccess(messageDocument));
|
||||
} catch (e) {
|
||||
yield Left(GetEntireMessageAsDocumentFailure(exception: e));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -22,6 +22,7 @@ import 'package:tmail_ui_user/features/email/domain/usecases/download_attachment
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/export_all_attachments_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/export_attachment_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/get_email_content_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/get_entire_message_as_document_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/get_stored_email_state_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_email_read_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_star_email_interactor.dart';
|
||||
@@ -134,6 +135,7 @@ class EmailBindings extends BaseBindings {
|
||||
Get.find<CacheExceptionThrower>()));
|
||||
Get.lazyPut(() => EmailLocalStorageDataSourceImpl(
|
||||
Get.find<LocalStorageManager>(),
|
||||
Get.find<PreviewEmlFileUtils>(),
|
||||
Get.find<CacheExceptionThrower>()));
|
||||
Get.lazyPut(() => EmailSessionStorageDatasourceImpl(
|
||||
Get.find<SessionStorageManager>(),
|
||||
@@ -182,6 +184,11 @@ class EmailBindings extends BaseBindings {
|
||||
Get.find<AccountRepository>(),
|
||||
Get.find<AuthenticationOIDCRepository>(),
|
||||
Get.find<CredentialRepository>()));
|
||||
if (PlatformInfo.isIOS) {
|
||||
Get.lazyPut(() => GetEntireMessageAsDocumentInteractor(
|
||||
Get.find<EmailRepository>(),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
@@ -54,6 +54,7 @@ import 'package:tmail_ui_user/features/email/domain/model/move_action.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/preview_email_eml_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/send_receipt_to_sender_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/view_entire_message_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/calendar_event_accept_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/calendar_event_maybe_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/calendar_event_reject_state.dart';
|
||||
@@ -64,6 +65,7 @@ import 'package:tmail_ui_user/features/email/domain/state/download_attachments_s
|
||||
import 'package:tmail_ui_user/features/email/domain/state/export_all_attachments_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/export_attachment_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/get_email_content_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/get_entire_message_as_document_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/get_html_content_from_attachment_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_read_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_star_state.dart';
|
||||
@@ -79,6 +81,7 @@ import 'package:tmail_ui_user/features/email/domain/state/unsubscribe_email_stat
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/calendar_event_accept_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/download_all_attachments_for_web_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/export_all_attachments_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/get_entire_message_as_document_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_star_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/maybe_calendar_event_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/calendar_event_reject_interactor.dart';
|
||||
@@ -2550,4 +2553,50 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
||||
log('SingleEmailController::onHtmlContentClippedAction:isClipped = $isClipped');
|
||||
isEmailContentClipped.value = isClipped;
|
||||
}
|
||||
|
||||
Future<void> onViewEntireMessage({
|
||||
required BuildContext context,
|
||||
required PresentationEmail presentationEmail,
|
||||
required String emailContent,
|
||||
}) async {
|
||||
final getEntireMessageAsDocumentInteractor = getBinding<GetEntireMessageAsDocumentInteractor>();
|
||||
if (getEntireMessageAsDocumentInteractor == null) return;
|
||||
|
||||
final appLocalizations = AppLocalizations.of(context);
|
||||
SmartDialog.showLoading(
|
||||
msg: appLocalizations.loadingPleaseWait,
|
||||
maskColor: Colors.black38,
|
||||
);
|
||||
|
||||
final viewEntireMessageRequest = ViewEntireMessageRequest(
|
||||
userName: userName ?? UserName(''),
|
||||
presentationEmail: presentationEmail,
|
||||
attachments: attachments,
|
||||
emailContent: emailContent,
|
||||
locale: Localizations.localeOf(context),
|
||||
appLocalizations: appLocalizations,
|
||||
);
|
||||
|
||||
final resultState = await getEntireMessageAsDocumentInteractor
|
||||
.execute(viewEntireMessageRequest)
|
||||
.last;
|
||||
|
||||
resultState.foldSuccess<GetEntireMessageAsDocumentSuccess>(
|
||||
onSuccess: (success) {
|
||||
SmartDialog.dismiss();
|
||||
|
||||
showDialogToPreviewEMLAttachment(
|
||||
context,
|
||||
EMLPreviewer(
|
||||
id: presentationEmail.id?.asString ?? '',
|
||||
title: presentationEmail.subject ?? '',
|
||||
content: success.messageDocument,
|
||||
),
|
||||
);
|
||||
},
|
||||
onFailure: (_) {
|
||||
SmartDialog.dismiss();
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -482,7 +482,12 @@ class EmailView extends GetWidget<SingleEmailController> {
|
||||
bottom: 24,
|
||||
),
|
||||
backgroundColor: Colors.transparent,
|
||||
onTapActionCallback: () {},
|
||||
onTapActionCallback: () =>
|
||||
controller.onViewEntireMessage(
|
||||
context: context,
|
||||
emailContent: allEmailContents,
|
||||
presentationEmail: presentationEmail,
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
|
||||
@@ -3,6 +3,7 @@ import 'package:core/data/model/source_type/data_source_type.dart';
|
||||
import 'package:core/data/network/download/download_manager.dart';
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/utils/file_utils.dart';
|
||||
import 'package:core/utils/preview_eml_file_utils.dart';
|
||||
import 'package:core/utils/print_utils.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/base/base_bindings.dart';
|
||||
@@ -97,6 +98,7 @@ class EmailPreviewerBindings extends BaseBindings {
|
||||
Get.find<CacheExceptionThrower>()));
|
||||
Get.lazyPut(() => EmailLocalStorageDataSourceImpl(
|
||||
Get.find<LocalStorageManager>(),
|
||||
Get.find<PreviewEmlFileUtils>(),
|
||||
Get.find<CacheExceptionThrower>()));
|
||||
Get.lazyPut(() => EmailSessionStorageDatasourceImpl(
|
||||
Get.find<SessionStorageManager>(),
|
||||
|
||||
@@ -3,6 +3,7 @@ import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/presentation/utils/html_transformer/html_transform.dart';
|
||||
import 'package:core/utils/config/app_config_loader.dart';
|
||||
import 'package:core/utils/file_utils.dart';
|
||||
import 'package:core/utils/preview_eml_file_utils.dart';
|
||||
import 'package:core/utils/print_utils.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/base/base_bindings.dart';
|
||||
@@ -276,6 +277,7 @@ class MailboxDashBoardBindings extends BaseBindings {
|
||||
Get.find<CacheExceptionThrower>()));
|
||||
Get.lazyPut(() => EmailLocalStorageDataSourceImpl(
|
||||
Get.find<LocalStorageManager>(),
|
||||
Get.find<PreviewEmlFileUtils>(),
|
||||
Get.find<CacheExceptionThrower>()));
|
||||
Get.lazyPut(() => EmailSessionStorageDatasourceImpl(
|
||||
Get.find<SessionStorageManager>(),
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import 'package:core/data/model/source_type/data_source_type.dart';
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/utils/file_utils.dart';
|
||||
import 'package:core/utils/preview_eml_file_utils.dart';
|
||||
import 'package:core/utils/print_utils.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/base/interactors_bindings.dart';
|
||||
@@ -95,6 +96,7 @@ class SendEmailInteractorBindings extends InteractorsBindings {
|
||||
Get.find<CacheExceptionThrower>()));
|
||||
Get.lazyPut(() => EmailLocalStorageDataSourceImpl(
|
||||
Get.find<LocalStorageManager>(),
|
||||
Get.find<PreviewEmlFileUtils>(),
|
||||
Get.find<CacheExceptionThrower>()));
|
||||
Get.lazyPut(() => EmailSessionStorageDatasourceImpl(
|
||||
Get.find<SessionStorageManager>(),
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import 'package:core/data/model/source_type/data_source_type.dart';
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/utils/file_utils.dart';
|
||||
import 'package:core/utils/preview_eml_file_utils.dart';
|
||||
import 'package:core/utils/print_utils.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/base/interactors_bindings.dart';
|
||||
@@ -133,6 +134,7 @@ class FcmInteractorBindings extends InteractorsBindings {
|
||||
Get.find<CacheExceptionThrower>()));
|
||||
Get.lazyPut(() => EmailLocalStorageDataSourceImpl(
|
||||
Get.find<LocalStorageManager>(),
|
||||
Get.find<PreviewEmlFileUtils>(),
|
||||
Get.find<CacheExceptionThrower>()));
|
||||
Get.lazyPut(() => EmailSessionStorageDatasourceImpl(
|
||||
Get.find<SessionStorageManager>(),
|
||||
|
||||
@@ -58,6 +58,16 @@ extension PresentationEmailExtension on PresentationEmail {
|
||||
return '';
|
||||
}
|
||||
|
||||
String getSentAt(String newLocale, {String? pattern}) {
|
||||
if (sentAt != null) {
|
||||
return sentAt!.formatDateToLocal(
|
||||
pattern: pattern ?? sentAt!.value.toLocal().toPattern(),
|
||||
locale: newLocale,
|
||||
);
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
Set<EmailAddress> get listEmailAddressSender => from.asSet()..addAll(replyTo.asSet());
|
||||
|
||||
PresentationEmail toggleSelect() {
|
||||
|
||||
Reference in New Issue
Block a user