TF-2520 Implement print email in email view
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
import 'package:core/data/network/dio_client.dart';
|
||||
import 'package:core/presentation/utils/html_transformer/base/dom_transformer.dart';
|
||||
import 'package:html/dom.dart';
|
||||
|
||||
class RemoveTagHiddenTransformer extends DomTransformer {
|
||||
const RemoveTagHiddenTransformer();
|
||||
|
||||
@override
|
||||
Future<void> process({
|
||||
required Document document,
|
||||
required DioClient dioClient,
|
||||
Map<String, String>? mapUrlDownloadCID,
|
||||
}) async {
|
||||
final elements = document.querySelectorAll('[style]');
|
||||
await Future.wait(elements.map((element) async {
|
||||
var exStyle = element.attributes['style'];
|
||||
if (exStyle?.contains('display: none') == true || exStyle?.contains('display:none') == true) {
|
||||
element.remove();
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
||||
@@ -9,6 +9,7 @@ import 'package:core/presentation/utils/html_transformer/dom/blockquoted_transfo
|
||||
import 'package:core/presentation/utils/html_transformer/dom/image_transformers.dart';
|
||||
import 'package:core/presentation/utils/html_transformer/dom/remove_collapsed_signature_button_transformers.dart';
|
||||
import 'package:core/presentation/utils/html_transformer/dom/remove_lazy_loading_for_background_image_transformers.dart';
|
||||
import 'package:core/presentation/utils/html_transformer/dom/remove_tag_hidden_transformers.dart';
|
||||
import 'package:core/presentation/utils/html_transformer/dom/remove_tooltip_link_transformers.dart';
|
||||
import 'package:core/presentation/utils/html_transformer/dom/script_transformers.dart';
|
||||
import 'package:core/presentation/utils/html_transformer/dom/sigature_transformers.dart';
|
||||
@@ -61,6 +62,14 @@ class TransformConfiguration {
|
||||
|
||||
factory TransformConfiguration.forPreviewEmail() => TransformConfiguration.standardConfiguration;
|
||||
|
||||
factory TransformConfiguration.forPrintEmail() => TransformConfiguration.fromDomTransformers([
|
||||
if (PlatformInfo.isWeb)
|
||||
const RemoveTooltipLinkTransformer(),
|
||||
const RemoveLazyLoadingForBackgroundImageTransformer(),
|
||||
const RemoveCollapsedSignatureButtonTransformer(),
|
||||
const RemoveTagHiddenTransformer(),
|
||||
]);
|
||||
|
||||
/// Provides easy access to a standard configuration that does not block external images.
|
||||
static const TransformConfiguration standardConfiguration = TransformConfiguration(
|
||||
standardDomTransformers,
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import 'package:core/core.dart';
|
||||
import 'package:core/utils/file_utils.dart';
|
||||
import 'package:device_info_plus/device_info_plus.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/base/base_bindings.dart';
|
||||
@@ -20,9 +19,11 @@ import 'package:tmail_ui_user/features/composer/presentation/controller/rich_tex
|
||||
import 'package:tmail_ui_user/features/composer/presentation/controller/rich_text_web_controller.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/html_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/print_file_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource_impl/email_datasource_impl.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource_impl/html_datasource_impl.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource_impl/print_file_datasource_impl.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/local/html_analyzer.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/network/email_api.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/repository/email_repository_impl.dart';
|
||||
@@ -102,6 +103,11 @@ class ComposerBindings extends BaseBindings {
|
||||
Get.find<IOSSharingManager>(),
|
||||
Get.find<CacheExceptionThrower>()
|
||||
));
|
||||
Get.lazyPut(() => PrintFileDataSourceImpl(
|
||||
Get.find<PrintUtils>(),
|
||||
Get.find<ImagePaths>(),
|
||||
Get.find<CacheExceptionThrower>()
|
||||
));
|
||||
Get.lazyPut(() => EmailHiveCacheDataSourceImpl(
|
||||
Get.find<NewEmailCacheManager>(),
|
||||
Get.find<OpenedEmailCacheManager>(),
|
||||
@@ -122,6 +128,7 @@ class ComposerBindings extends BaseBindings {
|
||||
Get.lazyPut<EmailDataSource>(() => Get.find<EmailDataSourceImpl>());
|
||||
Get.lazyPut<HtmlDataSource>(() => Get.find<HtmlDataSourceImpl>());
|
||||
Get.lazyPut<StateDataSource>(() => Get.find<StateDataSourceImpl>());
|
||||
Get.lazyPut<PrintFileDataSource>(() => Get.find<PrintFileDataSourceImpl>());
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -144,6 +151,7 @@ class ComposerBindings extends BaseBindings {
|
||||
},
|
||||
Get.find<HtmlDataSource>(),
|
||||
Get.find<StateDataSource>(),
|
||||
Get.find<PrintFileDataSource>(),
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
import 'package:core/data/model/print_attachment.dart';
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/utils/app_logger.dart';
|
||||
import 'package:core/utils/print_utils.dart';
|
||||
import 'package:filesize/filesize.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:model/email/attachment.dart';
|
||||
import 'package:model/extensions/utc_date_extension.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/print_file_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/email_print.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/extensions/attachment_extension.dart';
|
||||
import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart';
|
||||
|
||||
class PrintFileDataSourceImpl extends PrintFileDataSource {
|
||||
|
||||
final PrintUtils _printUtils;
|
||||
final ImagePaths _imagePaths;
|
||||
final ExceptionThrower _exceptionThrower;
|
||||
|
||||
PrintFileDataSourceImpl(
|
||||
this._printUtils,
|
||||
this._imagePaths,
|
||||
this._exceptionThrower
|
||||
);
|
||||
|
||||
@override
|
||||
Future<void> printEmailToPDF(EmailPrint emailPrint) {
|
||||
return Future.sync(() async {
|
||||
final sender = emailPrint.emailInformation.from?.isNotEmpty == true
|
||||
? emailPrint.emailInformation.from!.first
|
||||
: null;
|
||||
final receiveTime = emailPrint.emailInformation.receivedAt?.formatDateToLocal(
|
||||
pattern: 'E, MMM d, yyyy \'at\' h:mm a',
|
||||
locale: emailPrint.locale);
|
||||
|
||||
final List<PrintAttachment> listPrintAttachment = [];
|
||||
|
||||
if (emailPrint.attachments?.isNotEmpty == true) {
|
||||
await Future.forEach<Attachment>(emailPrint.attachments ?? [], (attachment) async {
|
||||
final iconSvg = await rootBundle.loadString(attachment.getIcon(_imagePaths));
|
||||
final printAttachment = PrintAttachment(
|
||||
iconSvg: iconSvg,
|
||||
name: attachment.name ?? '',
|
||||
size: filesize(attachment.size?.value)
|
||||
);
|
||||
listPrintAttachment.add(printAttachment);
|
||||
});
|
||||
}
|
||||
|
||||
final result = await _printUtils.printEmailToPDF(
|
||||
appName: emailPrint.appName,
|
||||
userName: emailPrint.userName,
|
||||
locale: emailPrint.locale,
|
||||
title: emailPrint.emailInformation.subject ?? '',
|
||||
emailContent: emailPrint.emailContent,
|
||||
senderName: sender?.name ?? '',
|
||||
senderEmailAddress: sender?.email ?? '',
|
||||
dateTime: receiveTime ?? '',
|
||||
toPrefix: emailPrint.toPrefix,
|
||||
ccPrefix: emailPrint.ccPrefix,
|
||||
bccPrefix: emailPrint.bccPrefix,
|
||||
replyToPrefix: emailPrint.replyToPrefix,
|
||||
toAddress: emailPrint.toAddress,
|
||||
ccAddress: emailPrint.ccAddress,
|
||||
bccAddress: emailPrint.bccAddress,
|
||||
replyToAddress: emailPrint.replyToAddress,
|
||||
titleAttachment: emailPrint.titleAttachment,
|
||||
listAttachment: listPrintAttachment
|
||||
);
|
||||
log('PrintFileDataSourceImpl::printEmailToPDF: RESULT = $result');
|
||||
return result;
|
||||
}).catchError(_exceptionThrower.throwException);
|
||||
}
|
||||
}
|
||||
@@ -23,7 +23,9 @@ import 'package:model/email/read_actions.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';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/html_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/print_file_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/email_print.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/restore_deleted_message_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
||||
@@ -36,11 +38,13 @@ class EmailRepositoryImpl extends EmailRepository {
|
||||
final Map<DataSourceType, EmailDataSource> emailDataSource;
|
||||
final HtmlDataSource _htmlDataSource;
|
||||
final StateDataSource _stateDataSource;
|
||||
final PrintFileDataSource _printFileDataSource;
|
||||
|
||||
EmailRepositoryImpl(
|
||||
this.emailDataSource,
|
||||
this._htmlDataSource,
|
||||
this._stateDataSource
|
||||
this._stateDataSource,
|
||||
this._printFileDataSource,
|
||||
);
|
||||
|
||||
@override
|
||||
@@ -228,4 +232,9 @@ class EmailRepositoryImpl extends EmailRepository {
|
||||
Future<EmailRecoveryAction> getRestoredDeletedMessage(EmailRecoveryActionId emailRecoveryActionId) {
|
||||
return emailDataSource[DataSourceType.network]!.getRestoredDeletedMessage(emailRecoveryActionId);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> printEmail(EmailPrint emailPrint) {
|
||||
return _printFileDataSource.printEmailToPDF(emailPrint);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
|
||||
class PrintEmailLoading extends LoadingState {}
|
||||
|
||||
class PrintEmailSuccess extends UIState {}
|
||||
|
||||
class PrintEmailFailure extends FeatureFailure {
|
||||
|
||||
PrintEmailFailure({dynamic exception}) : super(exception: exception);
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:core/presentation/utils/html_transformer/transform_configuration.dart';
|
||||
import 'package:core/utils/app_logger.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/email_print.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/print_email_state.dart';
|
||||
|
||||
class PrintEmailInteractor {
|
||||
final EmailRepository emailRepository;
|
||||
|
||||
PrintEmailInteractor(this.emailRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(EmailPrint emailPrint) async* {
|
||||
try {
|
||||
yield Right(PrintEmailLoading());
|
||||
final htmlContentTransformed = await _transformHtmlEmailContent(emailPrint.emailContent);
|
||||
final newEmailPrint = emailPrint.fromEmailContent(htmlContentTransformed);
|
||||
await emailRepository.printEmail(newEmailPrint);
|
||||
yield Right(PrintEmailSuccess());
|
||||
} catch (e) {
|
||||
yield Left(PrintEmailFailure(exception: e));
|
||||
}
|
||||
}
|
||||
|
||||
Future<String> _transformHtmlEmailContent(String emailContent) async {
|
||||
try {
|
||||
final htmlContentTransformed = await emailRepository.transformHtmlEmailContent(
|
||||
emailContent,
|
||||
TransformConfiguration.forPrintEmail());
|
||||
log('PrintEmailInteractor::_transformHtmlEmailContent: htmlContentTransformed: $htmlContentTransformed');
|
||||
return htmlContentTransformed;
|
||||
} catch (e) {
|
||||
logError('PrintEmailInteractor::_transformHtmlEmailContent: Exception: $e');
|
||||
return emailContent;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,13 @@
|
||||
import 'package:core/core.dart';
|
||||
import 'package:core/utils/file_utils.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/base/base_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/html_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/print_file_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource_impl/email_datasource_impl.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource_impl/html_datasource_impl.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource_impl/print_file_datasource_impl.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/local/html_analyzer.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/network/email_api.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/repository/email_repository_impl.dart';
|
||||
@@ -19,6 +20,7 @@ import 'package:tmail_ui_user/features/email/domain/usecases/get_stored_email_st
|
||||
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';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/move_to_mailbox_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/print_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/store_opened_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/view_attachment_for_web_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/controller/email_supervisor_controller.dart';
|
||||
@@ -67,6 +69,7 @@ class EmailBindings extends BaseBindings {
|
||||
Get.find<GetAllIdentitiesInteractor>(),
|
||||
Get.find<StoreOpenedEmailInteractor>(),
|
||||
Get.find<ViewAttachmentForWebInteractor>(),
|
||||
Get.find<PrintEmailInteractor>()
|
||||
));
|
||||
}
|
||||
|
||||
@@ -76,6 +79,7 @@ class EmailBindings extends BaseBindings {
|
||||
Get.lazyPut<EmailDataSource>(() => Get.find<EmailDataSourceImpl>());
|
||||
Get.lazyPut<HtmlDataSource>(() => Get.find<HtmlDataSourceImpl>());
|
||||
Get.lazyPut<StateDataSource>(() => Get.find<StateDataSourceImpl>());
|
||||
Get.lazyPut<PrintFileDataSource>(() => Get.find<PrintFileDataSourceImpl>());
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -98,6 +102,11 @@ class EmailBindings extends BaseBindings {
|
||||
Get.find<IOSSharingManager>(),
|
||||
Get.find<CacheExceptionThrower>()
|
||||
));
|
||||
Get.lazyPut(() => PrintFileDataSourceImpl(
|
||||
Get.find<PrintUtils>(),
|
||||
Get.find<ImagePaths>(),
|
||||
Get.find<CacheExceptionThrower>()
|
||||
));
|
||||
Get.lazyPut(() => EmailHiveCacheDataSourceImpl(
|
||||
Get.find<NewEmailCacheManager>(),
|
||||
Get.find<OpenedEmailCacheManager>(),
|
||||
@@ -141,6 +150,7 @@ class EmailBindings extends BaseBindings {
|
||||
Get.lazyPut(() => ViewAttachmentForWebInteractor(
|
||||
Get.find<DownloadAttachmentForWebInteractor>()));
|
||||
Get.lazyPut(() => StoreOpenedEmailInteractor(Get.find<EmailRepository>()));
|
||||
Get.lazyPut(() => PrintEmailInteractor(Get.find<EmailRepository>()));
|
||||
IdentityInteractorsBindings().dependencies();
|
||||
}
|
||||
|
||||
@@ -165,7 +175,8 @@ class EmailBindings extends BaseBindings {
|
||||
DataSourceType.hiveCache: Get.find<EmailHiveCacheDataSourceImpl>()
|
||||
},
|
||||
Get.find<HtmlDataSource>(),
|
||||
Get.find<StateDataSource>()
|
||||
Get.find<StateDataSource>(),
|
||||
Get.find<PrintFileDataSource>(),
|
||||
));
|
||||
}
|
||||
}
|
||||
@@ -30,6 +30,7 @@ import 'package:tmail_ui_user/features/composer/presentation/extensions/email_ac
|
||||
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/extensions/list_attachments_extension.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/email_print.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/event_action.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/mark_read_action.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_action.dart';
|
||||
@@ -54,6 +55,7 @@ import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_email_read_
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_star_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/move_to_mailbox_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/parse_calendar_event_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/print_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/send_receipt_to_sender_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/store_opened_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/view_attachment_for_web_interactor.dart';
|
||||
@@ -111,6 +113,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
||||
final GetAllIdentitiesInteractor _getAllIdentitiesInteractor;
|
||||
final StoreOpenedEmailInteractor _storeOpenedEmailInteractor;
|
||||
final ViewAttachmentForWebInteractor _viewAttachmentForWebInteractor;
|
||||
final PrintEmailInteractor _printEmailInteractor;
|
||||
|
||||
CreateNewEmailRuleFilterInteractor? _createNewEmailRuleFilterInteractor;
|
||||
SendReceiptToSenderInteractor? _sendReceiptToSenderInteractor;
|
||||
@@ -148,6 +151,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
||||
this._getAllIdentitiesInteractor,
|
||||
this._storeOpenedEmailInteractor,
|
||||
this._viewAttachmentForWebInteractor,
|
||||
this._printEmailInteractor,
|
||||
);
|
||||
|
||||
@override
|
||||
@@ -818,7 +822,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
||||
mailboxDashBoardController.deleteDownloadTask(success.taskId);
|
||||
|
||||
_downloadManager.openDownloadedFileWeb(
|
||||
success.bytes,
|
||||
success.bytes,
|
||||
success.attachment.type?.mimeType);
|
||||
}
|
||||
|
||||
@@ -843,7 +847,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
||||
}
|
||||
|
||||
void _updateAttachmentsViewState(
|
||||
Id? attachmentBlobId,
|
||||
Id? attachmentBlobId,
|
||||
Either<Failure, Success> viewState) {
|
||||
if (attachmentBlobId != null) {
|
||||
attachmentsViewState[attachmentBlobId] = viewState;
|
||||
@@ -1090,6 +1094,9 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
||||
case EmailActionType.archiveMessage:
|
||||
archiveMessage(context, presentationEmail);
|
||||
break;
|
||||
case EmailActionType.printAll:
|
||||
_printEmail(context, presentationEmail);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -1578,4 +1585,28 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
||||
void archiveMessage(BuildContext context, PresentationEmail email) {
|
||||
mailboxDashBoardController.archiveMessage(context, email);
|
||||
}
|
||||
|
||||
void _printEmail(BuildContext context, PresentationEmail email) {
|
||||
if (email.id != _currentEmailLoaded?.emailCurrent?.id) {
|
||||
log('SingleEmailController::_printEmail: EMAIL ${email.id?.asString} NOT LOADED');
|
||||
}
|
||||
final emailPrint = EmailPrint(
|
||||
appName: AppLocalizations.of(context).app_name,
|
||||
userName: mailboxDashBoardController.userProfile.value?.email ?? '',
|
||||
emailInformation: email.toEmail(),
|
||||
attachments: _currentEmailLoaded?.attachments,
|
||||
emailContent: _currentEmailLoaded?.htmlContent ?? '',
|
||||
locale: Localizations.localeOf(context).toLanguageTag(),
|
||||
toPrefix: AppLocalizations.of(context).to_email_address_prefix,
|
||||
ccPrefix: AppLocalizations.of(context).cc_email_address_prefix,
|
||||
bccPrefix: AppLocalizations.of(context).bcc_email_address_prefix,
|
||||
replyToPrefix: AppLocalizations.of(context).replyToEmailAddressPrefix,
|
||||
titleAttachment: AppLocalizations.of(context).attachments.toLowerCase(),
|
||||
toAddress: email.to?.listEmailAddressToString(isFullEmailAddress: true),
|
||||
ccAddress: email.cc?.listEmailAddressToString(isFullEmailAddress: true),
|
||||
bccAddress: email.bcc?.listEmailAddressToString(isFullEmailAddress: true),
|
||||
replyToAddress: email.replyTo?.listEmailAddressToString(isFullEmailAddress: true),
|
||||
);
|
||||
consumeState(_printEmailInteractor.execute(emailPrint));
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
import 'package:core/data/model/source_type/data_source_type.dart';
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/utils/config/app_config_loader.dart';
|
||||
import 'package:core/utils/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';
|
||||
import 'package:tmail_ui_user/features/caching/clients/recent_search_cache_client.dart';
|
||||
@@ -11,9 +13,11 @@ import 'package:tmail_ui_user/features/composer/domain/usecases/send_email_inter
|
||||
import 'package:tmail_ui_user/features/composer/domain/usecases/update_email_drafts_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/html_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/print_file_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource_impl/email_datasource_impl.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource_impl/html_datasource_impl.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource_impl/print_file_datasource_impl.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/local/html_analyzer.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/network/email_api.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/repository/email_repository_impl.dart';
|
||||
@@ -178,6 +182,7 @@ class MailboxDashBoardBindings extends BaseBindings {
|
||||
Get.lazyPut<SearchDataSource>(() => Get.find<SearchDataSourceImpl>());
|
||||
Get.lazyPut<ThreadDataSource>(() => Get.find<ThreadDataSourceImpl>());
|
||||
Get.lazyPut<StateDataSource>(() => Get.find<StateDataSourceImpl>());
|
||||
Get.lazyPut<PrintFileDataSource>(() => Get.find<PrintFileDataSourceImpl>());
|
||||
Get.lazyPut<MailboxDataSource>(() => Get.find<MailboxDataSourceImpl>());
|
||||
Get.lazyPut<SessionStorageComposerDatasource>(() => Get.find<SessionStorageComposerDatasourceImpl>());
|
||||
Get.lazyPut<SpamReportDataSource>(() => Get.find<SpamReportDataSourceImpl>());
|
||||
@@ -206,6 +211,11 @@ class MailboxDashBoardBindings extends BaseBindings {
|
||||
Get.find<IOSSharingManager>(),
|
||||
Get.find<CacheExceptionThrower>()
|
||||
));
|
||||
Get.lazyPut(() => PrintFileDataSourceImpl(
|
||||
Get.find<PrintUtils>(),
|
||||
Get.find<ImagePaths>(),
|
||||
Get.find<CacheExceptionThrower>()
|
||||
));
|
||||
Get.lazyPut(() => MailboxDataSourceImpl(
|
||||
Get.find<MailboxAPI>(),
|
||||
Get.find<MailboxIsolateWorker>(),
|
||||
@@ -346,6 +356,7 @@ class MailboxDashBoardBindings extends BaseBindings {
|
||||
},
|
||||
Get.find<HtmlDataSource>(),
|
||||
Get.find<StateDataSource>(),
|
||||
Get.find<PrintFileDataSource>(),
|
||||
));
|
||||
Get.lazyPut(() => SearchRepositoryImpl(Get.find<SearchDataSource>()));
|
||||
Get.lazyPut(() => ThreadRepositoryImpl(
|
||||
|
||||
@@ -1,13 +1,17 @@
|
||||
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/print_utils.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/base/interactors_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/usecases/send_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/html_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/print_file_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource_impl/email_datasource_impl.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource_impl/html_datasource_impl.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource_impl/print_file_datasource_impl.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/local/html_analyzer.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/network/email_api.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/repository/email_repository_impl.dart';
|
||||
@@ -41,6 +45,7 @@ class SendEmailInteractorBindings extends InteractorsBindings {
|
||||
Get.lazyPut<MailboxDataSource>(() => Get.find<MailboxDataSourceImpl>());
|
||||
Get.lazyPut<HtmlDataSource>(() => Get.find<HtmlDataSourceImpl>());
|
||||
Get.lazyPut<StateDataSource>(() => Get.find<StateDataSourceImpl>());
|
||||
Get.lazyPut<PrintFileDataSource>(() => Get.find<PrintFileDataSourceImpl>());
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -62,6 +67,11 @@ class SendEmailInteractorBindings extends InteractorsBindings {
|
||||
Get.find<StateCacheManager>(),
|
||||
Get.find<IOSSharingManager>(),
|
||||
Get.find<CacheExceptionThrower>()));
|
||||
Get.lazyPut(() => PrintFileDataSourceImpl(
|
||||
Get.find<PrintUtils>(),
|
||||
Get.find<ImagePaths>(),
|
||||
Get.find<CacheExceptionThrower>(),
|
||||
));
|
||||
Get.lazyPut(() => EmailHiveCacheDataSourceImpl(
|
||||
Get.find<NewEmailCacheManager>(),
|
||||
Get.find<OpenedEmailCacheManager>(),
|
||||
@@ -93,6 +103,7 @@ class SendEmailInteractorBindings extends InteractorsBindings {
|
||||
},
|
||||
Get.find<HtmlDataSource>(),
|
||||
Get.find<StateDataSource>(),
|
||||
Get.find<PrintFileDataSource>(),
|
||||
));
|
||||
Get.lazyPut(() => MailboxRepositoryImpl(
|
||||
{
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
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/print_utils.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/base/interactors_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/html_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/print_file_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource_impl/email_datasource_impl.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource_impl/html_datasource_impl.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource_impl/print_file_datasource_impl.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/local/html_analyzer.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/network/email_api.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/repository/email_repository_impl.dart';
|
||||
@@ -71,6 +75,7 @@ class FcmInteractorBindings extends InteractorsBindings {
|
||||
Get.lazyPut<EmailDataSource>(() => Get.find<EmailDataSourceImpl>());
|
||||
Get.lazyPut<HtmlDataSource>(() => Get.find<HtmlDataSourceImpl>());
|
||||
Get.lazyPut<StateDataSource>(() => Get.find<StateDataSourceImpl>());
|
||||
Get.lazyPut<PrintFileDataSource>(() => Get.find<PrintFileDataSourceImpl>());
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -106,6 +111,11 @@ class FcmInteractorBindings extends InteractorsBindings {
|
||||
Get.find<IOSSharingManager>(),
|
||||
Get.find<CacheExceptionThrower>()
|
||||
));
|
||||
Get.lazyPut(() => PrintFileDataSourceImpl(
|
||||
Get.find<PrintUtils>(),
|
||||
Get.find<ImagePaths>(),
|
||||
Get.find<CacheExceptionThrower>()
|
||||
));
|
||||
Get.lazyPut(() => EmailHiveCacheDataSourceImpl(
|
||||
Get.find<NewEmailCacheManager>(),
|
||||
Get.find<OpenedEmailCacheManager>(),
|
||||
@@ -171,6 +181,7 @@ class FcmInteractorBindings extends InteractorsBindings {
|
||||
DataSourceType.hiveCache: Get.find<EmailHiveCacheDataSourceImpl>()
|
||||
},
|
||||
Get.find<HtmlDataSource>(),
|
||||
Get.find<StateDataSource>()));
|
||||
Get.find<StateDataSource>(),
|
||||
Get.find<PrintFileDataSource>()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"@@last_modified": "2024-02-28T08:48:33.734928",
|
||||
"@@last_modified": "2024-02-28T17:05:44.385016",
|
||||
"initializing_data": "Initializing data...",
|
||||
"@initializing_data": {
|
||||
"type": "text",
|
||||
@@ -3659,5 +3659,11 @@
|
||||
"type": "text",
|
||||
"placeholders_order": [],
|
||||
"placeholders": {}
|
||||
},
|
||||
"replyToEmailAddressPrefix": "Reply-To",
|
||||
"@replyToEmailAddressPrefix": {
|
||||
"type": "text",
|
||||
"placeholders_order": [],
|
||||
"placeholders": {}
|
||||
}
|
||||
}
|
||||
@@ -6,9 +6,11 @@ import 'package:core/presentation/utils/responsive_utils.dart';
|
||||
import 'package:core/utils/config/app_config_loader.dart';
|
||||
import 'package:core/utils/file_utils.dart';
|
||||
import 'package:core/utils/platform_info.dart';
|
||||
import 'package:core/utils/print_utils.dart';
|
||||
import 'package:device_info_plus/device_info_plus.dart';
|
||||
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:htmltopdfwidgets/htmltopdfwidgets.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/presentation/utils/sending_queue_isolate_manager.dart';
|
||||
import 'package:tmail_ui_user/main/utils/app_config.dart';
|
||||
@@ -60,6 +62,8 @@ class CoreBindings extends Bindings {
|
||||
Get.put(CompressFileUtils());
|
||||
Get.put(AppConfigLoader());
|
||||
Get.put(FileUtils());
|
||||
Get.put(HTMLToPdf());
|
||||
Get.put(PrintUtils(Get.find<HTMLToPdf>(), Get.find<ImagePaths>()));
|
||||
}
|
||||
|
||||
void _bindingIsolate() {
|
||||
|
||||
@@ -3812,4 +3812,11 @@ class AppLocalizations {
|
||||
'Print all',
|
||||
name: 'printAll');
|
||||
}
|
||||
|
||||
String get replyToEmailAddressPrefix {
|
||||
return Intl.message(
|
||||
'Reply-To',
|
||||
name: 'replyToEmailAddressPrefix',
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -57,6 +57,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "7.0.0"
|
||||
barcode:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: barcode
|
||||
sha256: "91b143666f7bb13636f716b6d4e412e372ab15ff7969799af8c9e30a382e9385"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.2.6"
|
||||
better_open_file:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -65,6 +73,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.6.4"
|
||||
bidi:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: bidi
|
||||
sha256: "1a7d0c696324b2089f72e7671fd1f1f64fef44c980f3cebc84e803967c597b63"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.10"
|
||||
boolean_selector:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -1030,6 +1046,14 @@ packages:
|
||||
url: "https://github.com/linagora/html-editor-enhanced.git"
|
||||
source: git
|
||||
version: "2.5.1"
|
||||
htmltopdfwidgets:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: htmltopdfwidgets
|
||||
sha256: "990e3002fbbfaf307555f1991bed61b6228d7053b7e1945815c7a68f56bbda81"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.3"
|
||||
http:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -1334,6 +1358,22 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.0"
|
||||
pdf:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: pdf
|
||||
sha256: "243f05342fc0bdf140eba5b069398985cdbdd3dbb1d776cf43d5ea29cc570ba6"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.10.8"
|
||||
pdf_widget_wrapper:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: pdf_widget_wrapper
|
||||
sha256: e9d31fd7782ce28ae346b127ea7d1cd748d799bddee379f31191693610e23749
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.1"
|
||||
percent_indicator:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -1430,6 +1470,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.5.1"
|
||||
printing:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: printing
|
||||
sha256: "1c99cab90ebcc1fff65831d264627d5b529359d563e53f33ab9b8117f2d280bc"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.12.0"
|
||||
process:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -1454,6 +1502,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.2.3"
|
||||
qr:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: qr
|
||||
sha256: "64957a3930367bf97cc211a5af99551d630f2f4625e38af10edd6b19131b64b3"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.1"
|
||||
quiver:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
||||
@@ -231,6 +231,8 @@ dependencies:
|
||||
|
||||
mime: 1.0.4
|
||||
|
||||
htmltopdfwidgets: 1.0.3
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
sdk: flutter
|
||||
|
||||
Reference in New Issue
Block a user