TF-3349 Escape messages when print email

This commit is contained in:
dab246
2024-12-18 12:10:53 +07:00
committed by Dat H. Pham
parent 490196b36f
commit e9547c780c
7 changed files with 32 additions and 21 deletions
@@ -119,6 +119,7 @@ class ComposerBindings extends BaseBindings {
Get.find<PrintUtils>(),
Get.find<ImagePaths>(),
Get.find<FileUtils>(),
Get.find<HtmlAnalyzer>(),
Get.find<CacheExceptionThrower>()
));
Get.lazyPut(() => EmailHiveCacheDataSourceImpl(
@@ -1,12 +1,16 @@
import 'package:core/data/model/print_attachment.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/utils/html_transformer/transform_configuration.dart';
import 'package:core/utils/app_logger.dart';
import 'package:core/utils/file_utils.dart';
import 'package:core/utils/print_utils.dart';
import 'package:filesize/filesize.dart';
import 'package:model/email/attachment.dart';
import 'package:model/extensions/email_extension.dart';
import 'package:tmail_ui_user/features/email/data/datasource/print_file_datasource.dart';
import 'package:tmail_ui_user/features/email/data/local/html_analyzer.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';
@@ -16,18 +20,23 @@ class PrintFileDataSourceImpl extends PrintFileDataSource {
final PrintUtils _printUtils;
final ImagePaths _imagePaths;
final FileUtils _fileUtils;
final HtmlAnalyzer _htmlAnalyzer;
final ExceptionThrower _exceptionThrower;
PrintFileDataSourceImpl(
this._printUtils,
this._imagePaths,
this._fileUtils,
this._htmlAnalyzer,
this._exceptionThrower
);
@override
Future<void> printEmail(EmailPrint emailPrint) {
return Future.sync(() async {
final emailContentEscaped = await _transformHtmlEmailContent(
emailPrint.emailContent);
final sender = emailPrint.emailInformation.from?.isNotEmpty == true
? emailPrint.emailInformation.from!.first
: null;
@@ -43,7 +52,7 @@ class PrintFileDataSourceImpl extends PrintFileDataSource {
final iconBase64Data = await _fileUtils.convertImageAssetToBase64(attachment.getIcon(_imagePaths));
final printAttachment = PrintAttachment(
iconBase64Data: iconBase64Data,
name: attachment.name ?? '',
name: attachment.name.escapeLtGtHtmlString(),
size: filesize(attachment.size?.value)
);
listPrintAttachment.add(printAttachment);
@@ -53,9 +62,9 @@ class PrintFileDataSourceImpl extends PrintFileDataSource {
return await _printUtils.printEmail(
appName: emailPrint.appName,
userName: emailPrint.userName,
subject: emailPrint.emailInformation.subject ?? '',
emailContent: emailPrint.emailContent,
senderName: sender?.name ?? '',
subject: emailPrint.emailInformation.subject?.escapeLtGtHtmlString() ?? '',
emailContent: emailContentEscaped,
senderName: sender?.name.escapeLtGtHtmlString() ?? '',
senderEmailAddress: sender?.email ?? '',
dateTime: receiveTime,
fromPrefix: emailPrint.fromPrefix,
@@ -72,4 +81,17 @@ class PrintFileDataSourceImpl extends PrintFileDataSource {
);
}).catchError(_exceptionThrower.throwException);
}
Future<String> _transformHtmlEmailContent(String emailContent) async {
try {
final htmlContentTransformed = await _htmlAnalyzer.transformHtmlEmailContent(
emailContent,
TransformConfiguration.forPrintEmail(),
);
return htmlContentTransformed;
} catch (e) {
logError('PrintFileDataSourceImpl::_transformHtmlEmailContent: Exception: $e');
return emailContent;
}
}
}
@@ -1,7 +1,5 @@
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';
@@ -14,24 +12,10 @@ class PrintEmailInteractor {
Stream<Either<Failure, Success>> execute(EmailPrint emailPrint) async* {
try {
final htmlContentTransformed = await _transformHtmlEmailContent(emailPrint.emailContent);
final newEmailPrint = emailPrint.fromEmailContent(htmlContentTransformed);
await emailRepository.printEmail(newEmailPrint);
await emailRepository.printEmail(emailPrint);
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());
return htmlContentTransformed;
} catch (e) {
logError('PrintEmailInteractor::_transformHtmlEmailContent: Exception: $e');
return emailContent;
}
}
}
@@ -106,6 +106,7 @@ class EmailBindings extends BaseBindings {
Get.find<PrintUtils>(),
Get.find<ImagePaths>(),
Get.find<FileUtils>(),
Get.find<HtmlAnalyzer>(),
Get.find<CacheExceptionThrower>()
));
Get.lazyPut(() => EmailHiveCacheDataSourceImpl(
@@ -231,6 +231,7 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.find<PrintUtils>(),
Get.find<ImagePaths>(),
Get.find<FileUtils>(),
Get.find<HtmlAnalyzer>(),
Get.find<CacheExceptionThrower>()
));
Get.lazyPut(() => MailboxDataSourceImpl(
@@ -77,6 +77,7 @@ class SendEmailInteractorBindings extends InteractorsBindings {
Get.find<PrintUtils>(),
Get.find<ImagePaths>(),
Get.find<FileUtils>(),
Get.find<HtmlAnalyzer>(),
Get.find<CacheExceptionThrower>(),
));
Get.lazyPut(() => EmailHiveCacheDataSourceImpl(
@@ -115,6 +115,7 @@ class FcmInteractorBindings extends InteractorsBindings {
Get.find<PrintUtils>(),
Get.find<ImagePaths>(),
Get.find<FileUtils>(),
Get.find<HtmlAnalyzer>(),
Get.find<CacheExceptionThrower>()
));
Get.lazyPut(() => EmailHiveCacheDataSourceImpl(