diff --git a/core/lib/presentation/utils/html_transformer/base/dom_transformer.dart b/core/lib/presentation/utils/html_transformer/base/dom_transformer.dart
index ff1c2a55b..32d0f332c 100644
--- a/core/lib/presentation/utils/html_transformer/base/dom_transformer.dart
+++ b/core/lib/presentation/utils/html_transformer/base/dom_transformer.dart
@@ -7,12 +7,11 @@ abstract class DomTransformer {
const DomTransformer();
- /// Uses the `DOM` [document] and specified [message] to transform the `document`.
+ /// Uses the `DOM` [document] to transform the `document`.
///
/// All changes will be visible to subsequent transformers.
Future process(
Document document,
- String message,
{
Map? mapUrlDownloadCID,
DioClient? dioClient,
diff --git a/core/lib/presentation/utils/html_transformer/dom/add_tooltip_link_transformers.dart b/core/lib/presentation/utils/html_transformer/dom/add_tooltip_link_transformers.dart
index 67960f895..a085814ea 100644
--- a/core/lib/presentation/utils/html_transformer/dom/add_tooltip_link_transformers.dart
+++ b/core/lib/presentation/utils/html_transformer/dom/add_tooltip_link_transformers.dart
@@ -12,7 +12,6 @@ class AddTooltipLinkTransformer extends DomTransformer {
@override
Future process(
Document document,
- String message,
{
Map? mapUrlDownloadCID,
DioClient? dioClient
diff --git a/core/lib/presentation/utils/html_transformer/dom/blockcode_transformers.dart b/core/lib/presentation/utils/html_transformer/dom/blockcode_transformers.dart
index 2173e7028..8f7e71026 100644
--- a/core/lib/presentation/utils/html_transformer/dom/blockcode_transformers.dart
+++ b/core/lib/presentation/utils/html_transformer/dom/blockcode_transformers.dart
@@ -10,7 +10,6 @@ class BlockCodeTransformer extends DomTransformer {
@override
Future process(
Document document,
- String message,
{
Map? mapUrlDownloadCID,
DioClient? dioClient
diff --git a/core/lib/presentation/utils/html_transformer/dom/blockquoted_transformers.dart b/core/lib/presentation/utils/html_transformer/dom/blockquoted_transformers.dart
index 1fefccf8d..7c8df307c 100644
--- a/core/lib/presentation/utils/html_transformer/dom/blockquoted_transformers.dart
+++ b/core/lib/presentation/utils/html_transformer/dom/blockquoted_transformers.dart
@@ -10,7 +10,6 @@ class BlockQuotedTransformer extends DomTransformer {
@override
Future process(
Document document,
- String message,
{
Map? mapUrlDownloadCID,
DioClient? dioClient
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 df16fa0e2..22d00f12d 100644
--- a/core/lib/presentation/utils/html_transformer/dom/image_transformers.dart
+++ b/core/lib/presentation/utils/html_transformer/dom/image_transformers.dart
@@ -14,7 +14,6 @@ class ImageTransformer extends DomTransformer {
@override
Future process(
Document document,
- String message,
{
Map? mapUrlDownloadCID,
DioClient? dioClient
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 11be37cc3..3176f363e 100644
--- a/core/lib/presentation/utils/html_transformer/dom/script_transformers.dart
+++ b/core/lib/presentation/utils/html_transformer/dom/script_transformers.dart
@@ -10,7 +10,6 @@ class RemoveScriptTransformer extends DomTransformer {
@override
Future process(
Document document,
- String message,
{
Map? mapUrlDownloadCID,
DioClient? dioClient
diff --git a/core/lib/presentation/utils/html_transformer/dom/sigature_transformers.dart b/core/lib/presentation/utils/html_transformer/dom/sigature_transformers.dart
index 2b8fd1f46..a8466c861 100644
--- a/core/lib/presentation/utils/html_transformer/dom/sigature_transformers.dart
+++ b/core/lib/presentation/utils/html_transformer/dom/sigature_transformers.dart
@@ -10,7 +10,6 @@ class SignatureTransformer extends DomTransformer {
@override
Future process(
Document document,
- String message,
{
Map? mapUrlDownloadCID,
DioClient? dioClient
diff --git a/core/lib/presentation/utils/html_transformer/html_transform.dart b/core/lib/presentation/utils/html_transformer/html_transform.dart
index c85f308f0..1dd8f021a 100644
--- a/core/lib/presentation/utils/html_transformer/html_transform.dart
+++ b/core/lib/presentation/utils/html_transformer/html_transform.dart
@@ -1,6 +1,5 @@
import 'package:core/core.dart';
import 'package:core/presentation/utils/html_transformer/message_content_transformer.dart';
-import 'package:html/dom.dart';
class HtmlTransform {
@@ -18,14 +17,20 @@ class HtmlTransform {
/// Transforms this message to HTML code.
Future transformToHtml({TransformConfiguration? transformConfiguration}) async {
- final document = await transformToDocument(transformConfiguration: transformConfiguration);
+ transformConfiguration ??= TransformConfiguration.create();
+ final transformer = MessageContentTransformer(transformConfiguration);
+ final document = await transformer.toDocument(
+ _contentHtml,
+ mapUrlDownloadCID: mapUrlDownloadCID,
+ dioClient: dioClient);
return document.outerHtml;
}
- /// Transforms this message to Document.
- Future transformToDocument({TransformConfiguration? transformConfiguration}) async {
+ /// Transforms this message to Text Plain.
+ String transformToTextPlain({TransformConfiguration? transformConfiguration}) {
transformConfiguration ??= TransformConfiguration.create();
final transformer = MessageContentTransformer(transformConfiguration);
- return await transformer.toDocument(_contentHtml, mapUrlDownloadCID: mapUrlDownloadCID, dioClient: dioClient);
+ final message = transformer.toMessage(_contentHtml);
+ return message;
}
}
\ No newline at end of file
diff --git a/core/lib/presentation/utils/html_transformer/message_content_transformer.dart b/core/lib/presentation/utils/html_transformer/message_content_transformer.dart
index 875a9e131..3aaff3a75 100644
--- a/core/lib/presentation/utils/html_transformer/message_content_transformer.dart
+++ b/core/lib/presentation/utils/html_transformer/message_content_transformer.dart
@@ -9,26 +9,48 @@ class MessageContentTransformer {
MessageContentTransformer(this.configuration);
- Future transformDocument(
+ Future _transformDocument(
Document document,
- String message,
{
Map? mapUrlDownloadCID,
DioClient? dioClient
}
) async {
await Future.wait([
- if (configuration.domTransformers.isNotEmpty) ...configuration.domTransformers.map((domTransformer) async =>
- domTransformer.process(document, message, mapUrlDownloadCID: mapUrlDownloadCID, dioClient: dioClient)),
- if (configuration.textTransformers.isNotEmpty) ...configuration.textTransformers.map((textTransformer) async =>
- textTransformer.process(message))
+ if (configuration.domTransformers.isNotEmpty)
+ ...configuration.domTransformers.map((domTransformer) async =>
+ domTransformer.process(
+ document,
+ mapUrlDownloadCID: mapUrlDownloadCID,
+ dioClient: dioClient))
]);
}
- Future toDocument(String message, {Map? mapUrlDownloadCID, DioClient? dioClient}) async {
- var html = message;
- final document = parse(html);
- await transformDocument(document, message, mapUrlDownloadCID: mapUrlDownloadCID, dioClient: dioClient);
+ Future toDocument(
+ String message,
+ {
+ Map? mapUrlDownloadCID,
+ DioClient? dioClient
+ }
+ ) async {
+ final document = parse(message);
+ await _transformDocument(
+ document,
+ mapUrlDownloadCID: mapUrlDownloadCID,
+ dioClient: dioClient);
return document;
}
+
+ String _transformMessage(String message) {
+ if (configuration.textTransformers.isNotEmpty) {
+ configuration.textTransformers.forEach((transformer) {
+ message = transformer.process(message);
+ });
+ }
+ return message;
+ }
+
+ String toMessage(String message) {
+ return _transformMessage(message);
+ }
}
\ No newline at end of file
diff --git a/core/lib/presentation/utils/html_transformer/text/convert_url_string_to_html_links_transformers.dart b/core/lib/presentation/utils/html_transformer/text/convert_url_string_to_html_links_transformers.dart
new file mode 100644
index 000000000..96d7c6bcd
--- /dev/null
+++ b/core/lib/presentation/utils/html_transformer/text/convert_url_string_to_html_links_transformers.dart
@@ -0,0 +1,17 @@
+
+import 'package:core/presentation/utils/html_transformer/base/text_transformer.dart';
+import 'package:core/utils/app_logger.dart';
+import 'package:core/utils/linkify_html.dart';
+
+class ConvertUrlStringToHtmlLinksTransformers extends TextTransformer {
+
+ const ConvertUrlStringToHtmlLinksTransformers();
+
+ @override
+ String process(String text) {
+ log('ConvertUrlStringToHtmlLinksTransformers::process(): BEFORE: $text');
+ final texValid = LinkifyHtml().generateLinkify(text);
+ log('ConvertUrlStringToHtmlLinksTransformers::process(): AFTER: $texValid');
+ return texValid;
+ }
+}
\ No newline at end of file
diff --git a/lib/features/email/data/local/html_analyzer.dart b/lib/features/email/data/local/html_analyzer.dart
index d109e8004..9517a38e3 100644
--- a/lib/features/email/data/local/html_analyzer.dart
+++ b/lib/features/email/data/local/html_analyzer.dart
@@ -1,5 +1,6 @@
import 'package:core/core.dart';
+import 'package:core/presentation/utils/html_transformer/text/convert_url_string_to_html_links_transformers.dart';
import 'package:model/model.dart';
class HtmlAnalyzer {
@@ -17,6 +18,12 @@ class HtmlAnalyzer {
mapUrlDownloadCID: mapUrlDownloadCID);
final htmlContent = await htmlTransform.transformToHtml();
return EmailContent(emailContent.type, htmlContent);
+ case EmailContentType.textPlain:
+ final htmlTransform = HtmlTransform(emailContent.content);
+ final message = htmlTransform.transformToTextPlain(
+ transformConfiguration: TransformConfiguration.create(
+ customTextTransformers: [const ConvertUrlStringToHtmlLinksTransformers()]));
+ return EmailContent(emailContent.type, message);
default:
return emailContent;
}
@@ -27,7 +34,8 @@ class HtmlAnalyzer {
case EmailContentType.textHtml:
final htmlTransform = HtmlTransform(emailContent.content);
final htmlContent = await htmlTransform.transformToHtml(
- transformConfiguration: TransformConfiguration.create(customDomTransformers: [AddTooltipLinkTransformer()]));
+ transformConfiguration: TransformConfiguration.create(
+ customDomTransformers: [const AddTooltipLinkTransformer()]));
return EmailContent(emailContent.type, htmlContent);
default:
return emailContent;
diff --git a/lib/features/email/presentation/email_controller.dart b/lib/features/email/presentation/email_controller.dart
index 14756ef82..76705a3c4 100644
--- a/lib/features/email/presentation/email_controller.dart
+++ b/lib/features/email/presentation/email_controller.dart
@@ -4,7 +4,6 @@ import 'package:core/core.dart';
import 'package:dartz/dartz.dart';
import 'package:dio/dio.dart';
import 'package:flutter/cupertino.dart';
-import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_svg/flutter_svg.dart';