From e7a1b5dee1666e6fb288656be9614a20c91c397d Mon Sep 17 00:00:00 2001 From: dab246 Date: Mon, 31 Jul 2023 16:52:09 +0700 Subject: [PATCH] TF-2047 Inject binding html analyzer --- .../presentation/composer_bindings.dart | 1 - .../datasource_impl/html_datasource_impl.dart | 7 ++----- .../email/data/local/html_analyzer.dart | 18 ++++++++++-------- .../presentation/bindings/email_bindings.dart | 1 - .../bindings/mailbox_dashboard_bindings.dart | 2 -- .../sending_email_interactor_bindings.dart | 2 -- .../bindings/fcm_interactor_bindings.dart | 2 -- lib/main/bindings/core/core_bindings.dart | 6 ------ .../bindings/network/network_bindings.dart | 8 ++++++++ 9 files changed, 20 insertions(+), 27 deletions(-) diff --git a/lib/features/composer/presentation/composer_bindings.dart b/lib/features/composer/presentation/composer_bindings.dart index ce20cb83b2..0210639ac2 100644 --- a/lib/features/composer/presentation/composer_bindings.dart +++ b/lib/features/composer/presentation/composer_bindings.dart @@ -94,7 +94,6 @@ class ComposerBindings extends BaseBindings { Get.find())); Get.lazyPut(() => HtmlDataSourceImpl( Get.find(), - Get.find(), Get.find())); Get.lazyPut(() => StateDataSourceImpl(Get.find(), Get.find())); Get.lazyPut(() => EmailHiveCacheDataSourceImpl( diff --git a/lib/features/email/data/datasource_impl/html_datasource_impl.dart b/lib/features/email/data/datasource_impl/html_datasource_impl.dart index 992ac9a9dd..c6f65a32db 100644 --- a/lib/features/email/data/datasource_impl/html_datasource_impl.dart +++ b/lib/features/email/data/datasource_impl/html_datasource_impl.dart @@ -1,5 +1,4 @@ -import 'package:core/core.dart'; -import 'package:model/model.dart'; +import 'package:model/email/email_content.dart'; import 'package:tmail_ui_user/features/email/data/datasource/html_datasource.dart'; import 'package:tmail_ui_user/features/email/data/local/html_analyzer.dart'; import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart'; @@ -7,10 +6,9 @@ import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart'; class HtmlDataSourceImpl extends HtmlDataSource { final HtmlAnalyzer _htmlAnalyzer; - final DioClient _dioClient; final ExceptionThrower _exceptionThrower; - HtmlDataSourceImpl(this._htmlAnalyzer, this._dioClient, this._exceptionThrower); + HtmlDataSourceImpl(this._htmlAnalyzer, this._exceptionThrower); @override Future transformEmailContent( @@ -22,7 +20,6 @@ class HtmlDataSourceImpl extends HtmlDataSource { return await _htmlAnalyzer.transformEmailContent( emailContent, mapUrlDownloadCID, - _dioClient, draftsEmail: draftsEmail ); }).catchError(_exceptionThrower.throwException); diff --git a/lib/features/email/data/local/html_analyzer.dart b/lib/features/email/data/local/html_analyzer.dart index 465507a187..ef95312277 100644 --- a/lib/features/email/data/local/html_analyzer.dart +++ b/lib/features/email/data/local/html_analyzer.dart @@ -1,26 +1,31 @@ +import 'dart:convert'; + import 'package:core/data/network/dio_client.dart'; import 'package:core/presentation/utils/html_transformer/dom/add_tooltip_link_transformers.dart'; import 'package:core/presentation/utils/html_transformer/html_transform.dart'; -import 'package:core/presentation/utils/html_transformer/text/convert_url_string_to_html_links_transformers.dart'; -import 'package:core/presentation/utils/html_transformer/text/sanitize_html_transformers.dart'; +import 'package:core/presentation/utils/html_transformer/text/sanitize_autolink_html_transformers.dart'; import 'package:core/presentation/utils/html_transformer/transform_configuration.dart'; import 'package:model/email/email_content.dart'; import 'package:model/email/email_content_type.dart'; class HtmlAnalyzer { + final DioClient _dioClient; + final HtmlEscape _htmlEscape; + + HtmlAnalyzer(this._dioClient, this._htmlEscape); + Future transformEmailContent( EmailContent emailContent, Map? mapUrlDownloadCID, - DioClient dioClient, {bool draftsEmail = false} ) async { switch(emailContent.type) { case EmailContentType.textHtml: final htmlTransform = HtmlTransform( emailContent.content, - dioClient: dioClient, + dioClient: _dioClient, mapUrlDownloadCID: mapUrlDownloadCID ); @@ -35,10 +40,7 @@ class HtmlAnalyzer { final htmlTransform = HtmlTransform(emailContent.content); final message = htmlTransform.transformToTextPlain( transformConfiguration: TransformConfiguration.create( - customTextTransformers: [ - const ConvertUrlStringToHtmlLinksTransformers(), - const SanitizeHtmlTransformers(), - ] + customTextTransformers: [SanitizeAutolinkHtmlTransformers(_htmlEscape)] ) ); return EmailContent(emailContent.type, message); diff --git a/lib/features/email/presentation/bindings/email_bindings.dart b/lib/features/email/presentation/bindings/email_bindings.dart index 3c03de51a1..9174bd368e 100644 --- a/lib/features/email/presentation/bindings/email_bindings.dart +++ b/lib/features/email/presentation/bindings/email_bindings.dart @@ -97,7 +97,6 @@ class EmailBindings extends BaseBindings { Get.find())); Get.lazyPut(() => HtmlDataSourceImpl( Get.find(), - Get.find(), Get.find())); Get.lazyPut(() => StateDataSourceImpl(Get.find(), Get.find())); Get.lazyPut(() => EmailHiveCacheDataSourceImpl( diff --git a/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart b/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart index fc8f47a963..1f38c32163 100644 --- a/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart +++ b/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart @@ -1,5 +1,4 @@ import 'package:core/data/model/source_type/data_source_type.dart'; -import 'package:core/data/network/dio_client.dart'; import 'package:core/utils/config/app_config_loader.dart'; import 'package:core/utils/file_utils.dart'; import 'package:get/get.dart'; @@ -207,7 +206,6 @@ class MailboxDashBoardBindings extends BaseBindings { Get.find())); Get.lazyPut(() => HtmlDataSourceImpl( Get.find(), - Get.find(), Get.find())); Get.lazyPut(() => SearchDataSourceImpl( Get.find(), diff --git a/lib/features/offline_mode/bindings/sending_email_interactor_bindings.dart b/lib/features/offline_mode/bindings/sending_email_interactor_bindings.dart index d272d0d857..cd5f6d8304 100644 --- a/lib/features/offline_mode/bindings/sending_email_interactor_bindings.dart +++ b/lib/features/offline_mode/bindings/sending_email_interactor_bindings.dart @@ -1,5 +1,4 @@ import 'package:core/data/model/source_type/data_source_type.dart'; -import 'package:core/data/network/dio_client.dart'; import 'package:core/utils/file_utils.dart'; import 'package:get/get.dart'; import 'package:tmail_ui_user/features/base/interactors_bindings.dart'; @@ -57,7 +56,6 @@ class SendEmailInteractorBindings extends InteractorsBindings { Get.find())); Get.lazyPut(() => HtmlDataSourceImpl( Get.find(), - Get.find(), Get.find())); Get.lazyPut(() => StateDataSourceImpl( Get.find(), diff --git a/lib/features/push_notification/presentation/bindings/fcm_interactor_bindings.dart b/lib/features/push_notification/presentation/bindings/fcm_interactor_bindings.dart index 8c8a442c51..649e9e660f 100644 --- a/lib/features/push_notification/presentation/bindings/fcm_interactor_bindings.dart +++ b/lib/features/push_notification/presentation/bindings/fcm_interactor_bindings.dart @@ -1,5 +1,4 @@ import 'package:core/data/model/source_type/data_source_type.dart'; -import 'package:core/data/network/dio_client.dart'; import 'package:core/utils/file_utils.dart'; import 'package:get/get.dart'; import 'package:tmail_ui_user/features/base/interactors_bindings.dart'; @@ -98,7 +97,6 @@ class FcmInteractorBindings extends InteractorsBindings { Get.find())); Get.lazyPut(() => HtmlDataSourceImpl( Get.find(), - Get.find(), Get.find())); Get.lazyPut(() => StateDataSourceImpl( Get.find(), diff --git a/lib/main/bindings/core/core_bindings.dart b/lib/main/bindings/core/core_bindings.dart index f1aa7fd885..13be1151c6 100644 --- a/lib/main/bindings/core/core_bindings.dart +++ b/lib/main/bindings/core/core_bindings.dart @@ -9,7 +9,6 @@ import 'package:core/utils/platform_info.dart'; import 'package:device_info_plus/device_info_plus.dart'; import 'package:get/get.dart'; import 'package:shared_preferences/shared_preferences.dart'; -import 'package:tmail_ui_user/features/email/data/local/html_analyzer.dart'; import 'package:tmail_ui_user/features/sending_queue/presentation/utils/sending_queue_isolate_manager.dart'; import 'package:tmail_ui_user/main/utils/email_receive_manager.dart'; import 'package:uuid/uuid.dart'; @@ -21,7 +20,6 @@ class CoreBindings extends Bindings { await _bindingSharePreference(); _bindingAppImagePaths(); _bindingResponsiveManager(); - _bindingTransformer(); _bindingToast(); _bindingDeviceManager(); _bindingReceivingSharingStream(); @@ -41,10 +39,6 @@ class CoreBindings extends Bindings { await Get.putAsync(() async => await SharedPreferences.getInstance(), permanent: true); } - void _bindingTransformer() { - Get.put(HtmlAnalyzer()); - } - void _bindingToast() { Get.put(AppToast()); } diff --git a/lib/main/bindings/network/network_bindings.dart b/lib/main/bindings/network/network_bindings.dart index 0bff9870fd..cced0d53c5 100644 --- a/lib/main/bindings/network/network_bindings.dart +++ b/lib/main/bindings/network/network_bindings.dart @@ -1,3 +1,4 @@ +import 'dart:convert'; import 'dart:io'; import 'package:connectivity_plus/connectivity_plus.dart'; @@ -8,6 +9,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter_appauth/flutter_appauth.dart'; import 'package:get/get.dart'; import 'package:jmap_dart_client/http/http_client.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/network/mdn_api.dart'; import 'package:tmail_ui_user/features/login/data/local/account_cache_manager.dart'; @@ -36,6 +38,7 @@ class NetworkBindings extends Bindings { _bindingConnection(); _bindingDio(); _bindingApi(); + _bindingTransformer(); _bindingException(); } @@ -104,4 +107,9 @@ class NetworkBindings extends Bindings { void _bindingException() { Get.put(RemoteExceptionThrower()); } + + void _bindingTransformer() { + Get.put(const HtmlEscape()); + Get.put(HtmlAnalyzer(Get.find(), Get.find())); + } } \ No newline at end of file