diff --git a/core/lib/presentation/utils/html_transformer/dom/add_lazy_loading_for_background_image_transformers.dart b/core/lib/presentation/utils/html_transformer/dom/add_lazy_loading_for_background_image_transformers.dart
index 608f2ac4c..5a90f1223 100644
--- a/core/lib/presentation/utils/html_transformer/dom/add_lazy_loading_for_background_image_transformers.dart
+++ b/core/lib/presentation/utils/html_transformer/dom/add_lazy_loading_for_background_image_transformers.dart
@@ -1,5 +1,6 @@
import 'package:core/data/network/dio_client.dart';
import 'package:core/presentation/utils/html_transformer/base/dom_transformer.dart';
+import 'package:core/utils/app_logger.dart';
import 'package:html/dom.dart';
class AddLazyLoadingForBackgroundImageTransformer extends DomTransformer {
@@ -11,16 +12,23 @@ class AddLazyLoadingForBackgroundImageTransformer extends DomTransformer {
required DioClient dioClient,
Map? mapUrlDownloadCID,
}) async {
- final elements = document.querySelectorAll('[style*="background-image"]');
- await Future.wait(elements.map((element) async {
- var exStyle = element.attributes['style'];
- final imageUrls = findImageUrlFromStyleTag(exStyle!);
- if (imageUrls != null) {
- exStyle = exStyle.replaceFirst(imageUrls.value1, '');
- element.attributes['style'] = exStyle;
- element.attributes['data-src'] = imageUrls.value2;
- element.attributes.addAll({'lazy': ''});
- }
- }));
+ try {
+ final elements = document.querySelectorAll('[style*="background-image"]');
+
+ if (elements.isEmpty) return;
+
+ await Future.wait(elements.map((element) async {
+ var exStyle = element.attributes['style'];
+ final imageUrls = findImageUrlFromStyleTag(exStyle!);
+ if (imageUrls != null) {
+ exStyle = exStyle.replaceFirst(imageUrls.value1, '');
+ element.attributes['style'] = exStyle;
+ element.attributes['data-src'] = imageUrls.value2;
+ element.attributes.addAll({'lazy': ''});
+ }
+ }));
+ } catch (e) {
+ logError('$runtimeType::process:Exception = $e');
+ }
}
}
diff --git a/core/lib/presentation/utils/html_transformer/dom/block_code_transformers.dart b/core/lib/presentation/utils/html_transformer/dom/block_code_transformers.dart
index bc8dab461..ccd304b89 100644
--- a/core/lib/presentation/utils/html_transformer/dom/block_code_transformers.dart
+++ b/core/lib/presentation/utils/html_transformer/dom/block_code_transformers.dart
@@ -1,6 +1,7 @@
import 'package:core/data/network/dio_client.dart';
import 'package:core/presentation/utils/html_transformer/base/dom_transformer.dart';
+import 'package:core/utils/app_logger.dart';
import 'package:html/dom.dart';
class BlockCodeTransformer extends DomTransformer {
@@ -13,9 +14,13 @@ class BlockCodeTransformer extends DomTransformer {
required DioClient dioClient,
Map? mapUrlDownloadCID,
}) async {
- final codeElements = document.getElementsByTagName('pre');
- await Future.wait(codeElements.map((element) async {
- element.attributes['style'] = '''
+ try {
+ final codeElements = document.getElementsByTagName('pre');
+
+ if (codeElements.isEmpty) return;
+
+ await Future.wait(codeElements.map((element) async {
+ element.attributes['style'] = '''
display: block;
padding: 10px;
margin: 0 0 10px;
@@ -28,7 +33,10 @@ class BlockCodeTransformer extends DomTransformer {
border: 1px solid #ccc;
border-radius: 4px;
overflow: auto;
- ''';
- }));
+ ''';
+ }));
+ } catch (e) {
+ logError('$runtimeType::process:Exception = $e');
+ }
}
}
\ No newline at end of file
diff --git a/core/lib/presentation/utils/html_transformer/dom/block_quoted_transformers.dart b/core/lib/presentation/utils/html_transformer/dom/block_quoted_transformers.dart
index e447aad75..f1487d4aa 100644
--- a/core/lib/presentation/utils/html_transformer/dom/block_quoted_transformers.dart
+++ b/core/lib/presentation/utils/html_transformer/dom/block_quoted_transformers.dart
@@ -1,6 +1,7 @@
import 'package:core/data/network/dio_client.dart';
import 'package:core/presentation/utils/html_transformer/base/dom_transformer.dart';
+import 'package:core/utils/app_logger.dart';
import 'package:html/dom.dart';
class BlockQuotedTransformer extends DomTransformer {
@@ -13,15 +14,22 @@ class BlockQuotedTransformer extends DomTransformer {
required DioClient dioClient,
Map? mapUrlDownloadCID,
}) async {
- final quotedElements = document.getElementsByTagName('blockquote');
- await Future.wait(quotedElements.map((quotedElement) async {
- quotedElement.attributes['style'] = '''
+ try {
+ final quotedElements = document.getElementsByTagName('blockquote');
+
+ if (quotedElements.isEmpty) return;
+
+ await Future.wait(quotedElements.map((quotedElement) async {
+ quotedElement.attributes['style'] = '''
margin-left: 4px;
margin-right: 4px;
padding-left: 8px;
padding-right: 8px;
border-left: 2px solid #eee;
''';
- }));
+ }));
+ } catch (e) {
+ logError('$runtimeType::process:Exception = $e');
+ }
}
}
\ No newline at end of file
diff --git a/core/lib/presentation/utils/html_transformer/dom/hide_draft_signature_transformer.dart b/core/lib/presentation/utils/html_transformer/dom/hide_draft_signature_transformer.dart
index e22d081a0..572cbc221 100644
--- a/core/lib/presentation/utils/html_transformer/dom/hide_draft_signature_transformer.dart
+++ b/core/lib/presentation/utils/html_transformer/dom/hide_draft_signature_transformer.dart
@@ -1,5 +1,6 @@
import 'package:core/data/network/dio_client.dart';
import 'package:core/presentation/utils/html_transformer/base/dom_transformer.dart';
+import 'package:core/utils/app_logger.dart';
import 'package:html/dom.dart';
class HideDraftSignatureTransformer extends DomTransformer {
@@ -12,15 +13,19 @@ class HideDraftSignatureTransformer extends DomTransformer {
required DioClient dioClient,
Map? mapUrlDownloadCID
}) async {
- final signature = document.querySelector('div.tmail-signature');
- if (signature == null) return;
- final currentStyle = signature.attributes['style']?.trim();
- if (currentStyle == null) {
- signature.attributes['style'] = 'display: none;';
- } else if (currentStyle.endsWith(';')) {
- signature.attributes['style'] = '$currentStyle display: none;';
- } else {
- signature.attributes['style'] = '$currentStyle; display: none;';
+ try {
+ final signature = document.querySelector('div.tmail-signature');
+ if (signature == null) return;
+ final currentStyle = signature.attributes['style']?.trim();
+ if (currentStyle == null) {
+ signature.attributes['style'] = 'display: none;';
+ } else if (currentStyle.endsWith(';')) {
+ signature.attributes['style'] = '$currentStyle display: none;';
+ } else {
+ signature.attributes['style'] = '$currentStyle; display: none;';
+ }
+ } catch (e) {
+ logError('$runtimeType::process:Exception = $e');
}
}
}
\ No newline at end of file
diff --git a/core/lib/presentation/utils/html_transformer/dom/image_transformers.dart b/core/lib/presentation/utils/html_transformer/dom/image_transformers.dart
index 2c1dfbf5c..f0dd38661 100644
--- a/core/lib/presentation/utils/html_transformer/dom/image_transformers.dart
+++ b/core/lib/presentation/utils/html_transformer/dom/image_transformers.dart
@@ -5,6 +5,7 @@ import 'package:core/data/network/dio_client.dart';
import 'package:core/data/utils/compress_file_utils.dart';
import 'package:core/presentation/extensions/html_extension.dart';
import 'package:core/presentation/utils/html_transformer/base/dom_transformer.dart';
+import 'package:core/utils/app_logger.dart';
import 'package:core/utils/platform_info.dart';
import 'package:dio/dio.dart';
import 'package:flutter/foundation.dart';
@@ -20,41 +21,48 @@ class ImageTransformer extends DomTransformer {
required DioClient dioClient,
Map? mapUrlDownloadCID,
}) async {
- final imageElements = document.querySelectorAll('img');
- await Future.wait(imageElements.map((imageElement) async {
- var exStyle = imageElement.attributes['style'];
- if (exStyle != null) {
- if (!exStyle.trim().endsWith(';')) {
- exStyle = '$exStyle;';
- }
- if (!exStyle.contains('display')) {
- exStyle = '$exStyle display:inline;';
- }
- if (!exStyle.contains('max-width')) {
- exStyle = '$exStyle max-width:100%;';
- }
- imageElement.attributes['style'] = exStyle;
- } else {
- imageElement.attributes['style'] = 'display:inline;max-width:100%;';
- }
- final src = imageElement.attributes['src'];
+ try {
+ final imageElements = document.querySelectorAll('img');
- if (src == null) return;
+ if (imageElements.isEmpty) return;
- if (src.startsWith('cid:') && mapUrlDownloadCID != null) {
- final imageBase64 = await _convertCidToBase64Image(
- dioClient: dioClient,
- mapUrlDownloadCID: mapUrlDownloadCID,
- imageSource: src
- );
- imageElement.attributes['src'] = imageBase64 ?? src;
- imageElement.attributes['id'] ??= src;
- } else if (src.startsWith('https://') || src.startsWith('http://')) {
- if (!imageElement.attributes.containsKey('loading')) {
- imageElement.attributes['loading'] = 'lazy';
+ await Future.wait(imageElements.map((imageElement) async {
+ var exStyle = imageElement.attributes['style'];
+ if (exStyle != null) {
+ if (!exStyle.trim().endsWith(';')) {
+ exStyle = '$exStyle;';
+ }
+ if (!exStyle.contains('display')) {
+ exStyle = '$exStyle display:inline;';
+ }
+ if (!exStyle.contains('max-width')) {
+ exStyle = '$exStyle max-width:100%;';
+ }
+ imageElement.attributes['style'] = exStyle;
+ } else {
+ imageElement.attributes['style'] = 'display:inline;max-width:100%;';
}
- }
- }));
+ final src = imageElement.attributes['src'];
+
+ if (src == null) return;
+
+ if (src.startsWith('cid:') && mapUrlDownloadCID != null) {
+ final imageBase64 = await _convertCidToBase64Image(
+ dioClient: dioClient,
+ mapUrlDownloadCID: mapUrlDownloadCID,
+ imageSource: src
+ );
+ imageElement.attributes['src'] = imageBase64 ?? src;
+ imageElement.attributes['id'] ??= src;
+ } else if (src.startsWith('https://') || src.startsWith('http://')) {
+ if (!imageElement.attributes.containsKey('loading')) {
+ imageElement.attributes['loading'] = 'lazy';
+ }
+ }
+ }));
+ } catch (e) {
+ logError('$runtimeType::process:Exception = $e');
+ }
}
Future _convertCidToBase64Image({
diff --git a/core/lib/presentation/utils/html_transformer/dom/remove_collapsed_signature_button_transformers.dart b/core/lib/presentation/utils/html_transformer/dom/remove_collapsed_signature_button_transformers.dart
index 68b97c2af..bae5ba3ae 100644
--- a/core/lib/presentation/utils/html_transformer/dom/remove_collapsed_signature_button_transformers.dart
+++ b/core/lib/presentation/utils/html_transformer/dom/remove_collapsed_signature_button_transformers.dart
@@ -1,6 +1,7 @@
import 'package:core/data/network/dio_client.dart';
import 'package:core/presentation/utils/html_transformer/base/dom_transformer.dart';
+import 'package:core/utils/app_logger.dart';
import 'package:html/dom.dart';
class RemoveCollapsedSignatureButtonTransformer extends DomTransformer {
@@ -13,9 +14,16 @@ class RemoveCollapsedSignatureButtonTransformer extends DomTransformer {
required DioClient dioClient,
Map? mapUrlDownloadCID,
}) async {
- final elements = document.querySelectorAll('.tmail-signature-button');
- await Future.wait(elements.map((element) async {
- element.remove();
- }));
+ try {
+ final elements = document.querySelectorAll('.tmail-signature-button');
+
+ if (elements.isEmpty) return;
+
+ await Future.wait(elements.map((element) async {
+ element.remove();
+ }));
+ } catch (e) {
+ logError('$runtimeType::process:Exception = $e');
+ }
}
}
\ No newline at end of file
diff --git a/core/lib/presentation/utils/html_transformer/dom/remove_lazy_loading_for_background_image_transformers.dart b/core/lib/presentation/utils/html_transformer/dom/remove_lazy_loading_for_background_image_transformers.dart
index e64926f2a..9a4cc0c2b 100644
--- a/core/lib/presentation/utils/html_transformer/dom/remove_lazy_loading_for_background_image_transformers.dart
+++ b/core/lib/presentation/utils/html_transformer/dom/remove_lazy_loading_for_background_image_transformers.dart
@@ -1,5 +1,6 @@
import 'package:core/data/network/dio_client.dart';
import 'package:core/presentation/utils/html_transformer/base/dom_transformer.dart';
+import 'package:core/utils/app_logger.dart';
import 'package:html/dom.dart';
class RemoveLazyLoadingForBackgroundImageTransformer extends DomTransformer {
@@ -11,19 +12,26 @@ class RemoveLazyLoadingForBackgroundImageTransformer extends DomTransformer {
required DioClient dioClient,
Map? mapUrlDownloadCID,
}) async {
- final elements = document.querySelectorAll('[lazy]');
- await Future.wait(elements.map((element) async {
- var exStyle = element.attributes['style'];
- final dataSrc = element.attributes['data-src'];
- final backgroundImgUrl = 'background-image:url($dataSrc);';
- if (exStyle != null) {
- exStyle = '$exStyle;$backgroundImgUrl';
- element.attributes['style'] = exStyle;
- } else {
- element.attributes['style'] = backgroundImgUrl;
- }
- element.attributes.remove('data-src');
- element.attributes.remove('lazy');
- }));
+ try {
+ final elements = document.querySelectorAll('[lazy]');
+
+ if (elements.isEmpty) return;
+
+ await Future.wait(elements.map((element) async {
+ var exStyle = element.attributes['style'];
+ final dataSrc = element.attributes['data-src'];
+ final backgroundImgUrl = 'background-image:url($dataSrc);';
+ if (exStyle != null) {
+ exStyle = '$exStyle;$backgroundImgUrl';
+ element.attributes['style'] = exStyle;
+ } else {
+ element.attributes['style'] = backgroundImgUrl;
+ }
+ element.attributes.remove('data-src');
+ element.attributes.remove('lazy');
+ }));
+ } catch (e) {
+ logError('$runtimeType::process:Exception = $e');
+ }
}
}
diff --git a/core/lib/presentation/utils/html_transformer/dom/remove_lazy_loading_image_transformers.dart b/core/lib/presentation/utils/html_transformer/dom/remove_lazy_loading_image_transformers.dart
index 857d04192..ca427e37f 100644
--- a/core/lib/presentation/utils/html_transformer/dom/remove_lazy_loading_image_transformers.dart
+++ b/core/lib/presentation/utils/html_transformer/dom/remove_lazy_loading_image_transformers.dart
@@ -1,5 +1,6 @@
import 'package:core/data/network/dio_client.dart';
import 'package:core/presentation/utils/html_transformer/base/dom_transformer.dart';
+import 'package:core/utils/app_logger.dart';
import 'package:html/dom.dart';
class RemoveLazyLoadingImageTransformer extends DomTransformer {
@@ -11,9 +12,16 @@ class RemoveLazyLoadingImageTransformer extends DomTransformer {
required DioClient dioClient,
Map? mapUrlDownloadCID,
}) async {
- final elements = document.querySelectorAll('img[loading]');
- await Future.wait(elements.map((element) async {
- element.attributes.remove('loading');
- }));
+ try {
+ final elements = document.querySelectorAll('img[loading]');
+
+ if (elements.isEmpty) return;
+
+ await Future.wait(elements.map((element) async {
+ element.attributes.remove('loading');
+ }));
+ } catch (e) {
+ logError('$runtimeType::process:Exception = $e');
+ }
}
}
diff --git a/core/lib/presentation/utils/html_transformer/dom/remove_max_width_in_image_style_transformers.dart b/core/lib/presentation/utils/html_transformer/dom/remove_max_width_in_image_style_transformers.dart
index d1ac864cc..b16810686 100644
--- a/core/lib/presentation/utils/html_transformer/dom/remove_max_width_in_image_style_transformers.dart
+++ b/core/lib/presentation/utils/html_transformer/dom/remove_max_width_in_image_style_transformers.dart
@@ -1,5 +1,6 @@
import 'package:core/data/network/dio_client.dart';
import 'package:core/presentation/utils/html_transformer/base/dom_transformer.dart';
+import 'package:core/utils/app_logger.dart';
import 'package:html/dom.dart';
class RemoveMaxWidthInImageStyleTransformer extends DomTransformer {
@@ -12,13 +13,20 @@ class RemoveMaxWidthInImageStyleTransformer extends DomTransformer {
required DioClient dioClient,
Map? mapUrlDownloadCID,
}) async {
- final imageElements = document.querySelectorAll('img[style*="max-width"]');
- await Future.wait(imageElements.map((imageElement) async {
- var exStyle = imageElement.attributes['style'];
- if (exStyle != null) {
- exStyle = exStyle.replaceAll('max-width:100%;', '');
- imageElement.attributes['style'] = exStyle;
- }
- }));
+ try {
+ final imageElements = document.querySelectorAll('img[style*="max-width"]');
+
+ if (imageElements.isEmpty) return;
+
+ await Future.wait(imageElements.map((imageElement) async {
+ var exStyle = imageElement.attributes['style'];
+ if (exStyle != null) {
+ exStyle = exStyle.replaceAll('max-width:100%;', '');
+ imageElement.attributes['style'] = exStyle;
+ }
+ }));
+ } catch (e) {
+ logError('$runtimeType::process:Exception = $e');
+ }
}
}
\ No newline at end of file
diff --git a/core/lib/presentation/utils/html_transformer/dom/remove_style_tag_outside_transformers.dart b/core/lib/presentation/utils/html_transformer/dom/remove_style_tag_outside_transformers.dart
index e275ef7fa..9c8ce8132 100644
--- a/core/lib/presentation/utils/html_transformer/dom/remove_style_tag_outside_transformers.dart
+++ b/core/lib/presentation/utils/html_transformer/dom/remove_style_tag_outside_transformers.dart
@@ -1,5 +1,6 @@
import 'package:core/data/network/dio_client.dart';
import 'package:core/presentation/utils/html_transformer/base/dom_transformer.dart';
+import 'package:core/utils/app_logger.dart';
import 'package:html/dom.dart';
class RemoveStyleTagOutsideTransformer extends DomTransformer {
@@ -12,9 +13,16 @@ class RemoveStyleTagOutsideTransformer extends DomTransformer {
required DioClient dioClient,
Map? mapUrlDownloadCID,
}) async {
- final styleElements = document.querySelectorAll('style');
- await Future.wait(styleElements.map((element) async {
- element.remove();
- }));
+ try {
+ final styleElements = document.querySelectorAll('style');
+
+ if (styleElements.isEmpty) return;
+
+ await Future.wait(styleElements.map((element) async {
+ element.remove();
+ }));
+ } catch (e) {
+ logError('$runtimeType::process:Exception = $e');
+ }
}
}
\ No newline at end of file
diff --git a/core/lib/presentation/utils/html_transformer/dom/remove_tooltip_link_transformers.dart b/core/lib/presentation/utils/html_transformer/dom/remove_tooltip_link_transformers.dart
index 4b3447d8a..68085ca58 100644
--- a/core/lib/presentation/utils/html_transformer/dom/remove_tooltip_link_transformers.dart
+++ b/core/lib/presentation/utils/html_transformer/dom/remove_tooltip_link_transformers.dart
@@ -1,6 +1,7 @@
import 'package:core/data/network/dio_client.dart';
import 'package:core/presentation/utils/html_transformer/base/dom_transformer.dart';
+import 'package:core/utils/app_logger.dart';
import 'package:core/utils/html/html_template.dart';
import 'package:html/dom.dart';
@@ -14,20 +15,27 @@ class RemoveTooltipLinkTransformer extends DomTransformer {
required DioClient dioClient,
Map? mapUrlDownloadCID,
}) async {
- final linkElements = document.querySelectorAll('a.${HtmlTemplate.nameClassToolTip}');
- await Future.wait(linkElements.map((linkElement) async {
- final classAttribute = linkElement.attributes['class'];
- if (classAttribute != null) {
- final newClassAttribute = classAttribute.replaceFirst(HtmlTemplate.nameClassToolTip, '');
- linkElement.attributes['class'] = newClassAttribute;
- }
- final listSpanTag = linkElement.querySelectorAll('span.tooltiptext');
- if (listSpanTag.isNotEmpty) {
- for (var element in listSpanTag) {
- element.remove();
+ try {
+ final linkElements = document.querySelectorAll('a.${HtmlTemplate.nameClassToolTip}');
+
+ if (linkElements.isEmpty) return;
+
+ await Future.wait(linkElements.map((linkElement) async {
+ final classAttribute = linkElement.attributes['class'];
+ if (classAttribute != null) {
+ final newClassAttribute = classAttribute.replaceFirst(HtmlTemplate.nameClassToolTip, '');
+ linkElement.attributes['class'] = newClassAttribute;
}
- }
- }));
+ final listSpanTag = linkElement.querySelectorAll('span.tooltiptext');
+ if (listSpanTag.isNotEmpty) {
+ for (var element in listSpanTag) {
+ element.remove();
+ }
+ }
+ }));
+ } catch (e) {
+ logError('$runtimeType::process:Exception = $e');
+ }
}
}
\ No newline at end of file
diff --git a/core/lib/presentation/utils/html_transformer/dom/sanitize_hyper_link_tag_in_html_transformers.dart b/core/lib/presentation/utils/html_transformer/dom/sanitize_hyper_link_tag_in_html_transformers.dart
index bb84bbf88..812660404 100644
--- a/core/lib/presentation/utils/html_transformer/dom/sanitize_hyper_link_tag_in_html_transformers.dart
+++ b/core/lib/presentation/utils/html_transformer/dom/sanitize_hyper_link_tag_in_html_transformers.dart
@@ -1,6 +1,7 @@
import 'package:core/data/network/dio_client.dart';
import 'package:core/presentation/utils/html_transformer/base/dom_transformer.dart';
import 'package:core/presentation/utils/html_transformer/sanitize_url.dart';
+import 'package:core/utils/app_logger.dart';
import 'package:core/utils/html/html_template.dart';
import 'package:html/dom.dart';
@@ -16,15 +17,22 @@ class SanitizeHyperLinkTagInHtmlTransformer extends DomTransformer {
required DioClient dioClient,
Map? mapUrlDownloadCID,
}) async {
- final elements = document.querySelectorAll('a');
- await Future.wait(elements.map((element) async {
- _sanitizeUrlResource(element);
- if (useTooltip) {
- _addToolTipWhenHoverLink(element);
- }
- _addBlankForTargetProperty(element);
- _addNoReferrerForRelProperty(element);
- }));
+ try {
+ final elements = document.querySelectorAll('a');
+
+ if (elements.isEmpty) return;
+
+ await Future.wait(elements.map((element) async {
+ _sanitizeUrlResource(element);
+ if (useTooltip) {
+ _addToolTipWhenHoverLink(element);
+ }
+ _addBlankForTargetProperty(element);
+ _addNoReferrerForRelProperty(element);
+ }));
+ } catch (e) {
+ logError('$runtimeType::process:Exception = $e');
+ }
}
void _sanitizeUrlResource(Element element) {
diff --git a/core/lib/presentation/utils/html_transformer/dom/script_transformers.dart b/core/lib/presentation/utils/html_transformer/dom/script_transformers.dart
index a021f60b9..9d9a81e67 100644
--- a/core/lib/presentation/utils/html_transformer/dom/script_transformers.dart
+++ b/core/lib/presentation/utils/html_transformer/dom/script_transformers.dart
@@ -1,5 +1,6 @@
import 'package:core/data/network/dio_client.dart';
+import 'package:core/utils/app_logger.dart';
import 'package:html/dom.dart';
import 'package:core/presentation/utils/html_transformer/base/dom_transformer.dart';
@@ -13,9 +14,16 @@ class RemoveScriptTransformer extends DomTransformer {
required DioClient dioClient,
Map? mapUrlDownloadCID,
}) async {
- final scriptElements = document.getElementsByTagName('script');
- await Future.wait(scriptElements.map((scriptElement) async {
- scriptElement.remove();
- }));
+ try {
+ final scriptElements = document.getElementsByTagName('script');
+
+ if (scriptElements.isEmpty) return;
+
+ await Future.wait(scriptElements.map((scriptElement) async {
+ scriptElement.remove();
+ }));
+ } catch (e) {
+ logError('$runtimeType::process:Exception = $e');
+ }
}
}
\ No newline at end of file
diff --git a/core/lib/presentation/utils/html_transformer/dom/signature_transformers.dart b/core/lib/presentation/utils/html_transformer/dom/signature_transformers.dart
index c82bedf8f..ec21b0352 100644
--- a/core/lib/presentation/utils/html_transformer/dom/signature_transformers.dart
+++ b/core/lib/presentation/utils/html_transformer/dom/signature_transformers.dart
@@ -1,6 +1,7 @@
import 'package:core/data/network/dio_client.dart';
import 'package:core/presentation/utils/html_transformer/base/dom_transformer.dart';
+import 'package:core/utils/app_logger.dart';
import 'package:html/dom.dart';
class SignatureTransformer extends DomTransformer {
@@ -13,9 +14,16 @@ class SignatureTransformer extends DomTransformer {
required DioClient dioClient,
Map? mapUrlDownloadCID,
}) async {
- final signatureElements = document.querySelectorAll('div.tmail-signature');
- await Future.wait(signatureElements.map((element) async {
- element.attributes['class'] = 'tmail-signature-blocked';
- }));
+ try {
+ final signatureElements = document.querySelectorAll('div.tmail-signature');
+
+ if (signatureElements.isEmpty) return;
+
+ await Future.wait(signatureElements.map((element) async {
+ element.attributes['class'] = 'tmail-signature-blocked';
+ }));
+ } catch (e) {
+ logError('$runtimeType::process:Exception = $e');
+ }
}
}
\ No newline at end of file
diff --git a/core/lib/presentation/utils/html_transformer/sanitize_autolink_filter.dart b/core/lib/presentation/utils/html_transformer/sanitize_autolink_filter.dart
index 86b2712db..92ab8c2e5 100644
--- a/core/lib/presentation/utils/html_transformer/sanitize_autolink_filter.dart
+++ b/core/lib/presentation/utils/html_transformer/sanitize_autolink_filter.dart
@@ -21,38 +21,43 @@ class SanitizeAutolinkFilter {
SanitizeAutolinkFilter(this.htmlEscape);
String process(String inputText) {
- if (inputText.isEmpty) {
- return '';
- }
-
- final elements = linkify(
- inputText,
- options: _linkifyOption,
- linkifiers: _linkifier
- );
- log('AutolinkFilter::process:elements: $elements');
- final htmlTextBuffer = StringBuffer();
-
- for (var element in elements) {
- if (element is TextElement) {
- final escapedHtml = htmlEscape.convert(element.text);
- htmlTextBuffer.write(escapedHtml);
- } else if (element is EmailElement) {
- final emailLinkTag = _buildEmailLinkTag(
- mailToLink: element.url,
- value: element.text
- );
- htmlTextBuffer.write(emailLinkTag);
- } else if (element is UrlElement) {
- final urlLinkTag = _buildUrlLinkTag(
- urlLink: element.url,
- value: element.text
- );
- htmlTextBuffer.write(urlLinkTag);
+ try {
+ if (inputText.isEmpty) {
+ return '';
}
- }
- return htmlTextBuffer.toString();
+ final elements = linkify(
+ inputText,
+ options: _linkifyOption,
+ linkifiers: _linkifier,
+ );
+ log('AutolinkFilter::process:elements: $elements');
+ final htmlTextBuffer = StringBuffer();
+
+ for (var element in elements) {
+ if (element is TextElement) {
+ final escapedHtml = htmlEscape.convert(element.text);
+ htmlTextBuffer.write(escapedHtml);
+ } else if (element is EmailElement) {
+ final emailLinkTag = _buildEmailLinkTag(
+ mailToLink: element.url,
+ value: element.text
+ );
+ htmlTextBuffer.write(emailLinkTag);
+ } else if (element is UrlElement) {
+ final urlLinkTag = _buildUrlLinkTag(
+ urlLink: element.url,
+ value: element.text
+ );
+ htmlTextBuffer.write(urlLinkTag);
+ }
+ }
+
+ return htmlTextBuffer.toString();
+ } catch (e) {
+ logError('$runtimeType::process:Exception = $e');
+ return inputText;
+ }
}
String _buildUrlLinkTag({required String urlLink, required String value}) {
diff --git a/core/lib/presentation/utils/html_transformer/sanitize_url.dart b/core/lib/presentation/utils/html_transformer/sanitize_url.dart
index fc773655b..4fba06903 100644
--- a/core/lib/presentation/utils/html_transformer/sanitize_url.dart
+++ b/core/lib/presentation/utils/html_transformer/sanitize_url.dart
@@ -1,3 +1,4 @@
+import 'package:core/utils/app_logger.dart';
import 'package:get/get.dart';
class SanitizeUrl {
@@ -12,17 +13,20 @@ class SanitizeUrl {
);
String process(String inputText) {
- var originalUrl = inputText;
-
- originalUrl = Uri.decodeFull(originalUrl);
-
- if (GetUtils.isURL(originalUrl)) {
- if (!originalUrl.startsWith(_protocolIdentifierRegex)) {
- originalUrl = (defaultToHttps ? "https://" : "http://") + originalUrl;
+ try {
+ log('SanitizeUrl::process:inputText = $inputText');
+ var originalUrl = Uri.decodeFull(inputText);
+ if (GetUtils.isURL(originalUrl)) {
+ originalUrl = !originalUrl.startsWith(_protocolIdentifierRegex)
+ ? (defaultToHttps ? "https://" : "http://") + originalUrl
+ : originalUrl;
+ } else {
+ originalUrl = '';
}
- } else {
- originalUrl = '';
+ return originalUrl;
+ } catch (e) {
+ logError('SanitizeUrl::process:Exception = $e');
+ return inputText;
}
- return originalUrl;
}
}
\ No newline at end of file
diff --git a/core/test/sanitize_url_test.dart b/core/test/sanitize_url_test.dart
index f4df853fa..62a09c1e6 100644
--- a/core/test/sanitize_url_test.dart
+++ b/core/test/sanitize_url_test.dart
@@ -108,5 +108,17 @@ void main() {
equals('http://linagora.com')
);
});
+
+ test('SHOULD returns original input WHEN get an exception', () {
+ // Arrange
+ const inputText = "%E0%A4%A";
+ const expectedOutput = inputText;
+
+ // Act
+ final result = sanitizeUrl.process(inputText);
+
+ // Assert
+ expect(result, expectedOutput);
+ });
});
}
\ No newline at end of file