TF-3427 Implement print draft

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-01-15 16:46:50 +07:00
committed by Dat H. Pham
parent 78600f09e9
commit 6fa66efce2
14 changed files with 454 additions and 66 deletions
@@ -1,5 +1,4 @@
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';
@@ -8,7 +7,6 @@ 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';
@@ -37,14 +35,6 @@ class PrintFileDataSourceImpl extends PrintFileDataSource {
final emailContentEscaped = await _transformHtmlEmailContent(
emailPrint.emailContent);
final sender = emailPrint.emailInformation.from?.isNotEmpty == true
? emailPrint.emailInformation.from!.first
: null;
final receiveTime = emailPrint.emailInformation.getReceivedAt(
newLocale: emailPrint.locale,
pattern: emailPrint.emailInformation.receivedAt?.value.toLocal().toPatternForPrinting(emailPrint.locale)
);
final List<PrintAttachment> listPrintAttachment = [];
if (emailPrint.attachments?.isNotEmpty == true) {
@@ -62,11 +52,11 @@ class PrintFileDataSourceImpl extends PrintFileDataSource {
return await _printUtils.printEmail(
appName: emailPrint.appName,
userName: emailPrint.userName,
subject: emailPrint.emailInformation.subject?.escapeLtGtHtmlString() ?? '',
subject: emailPrint.subject?.escapeLtGtHtmlString() ?? '',
emailContent: emailContentEscaped,
senderName: sender?.name.escapeLtGtHtmlString() ?? '',
senderEmailAddress: sender?.email ?? '',
dateTime: receiveTime,
senderName: emailPrint.sender?.name.escapeLtGtHtmlString() ?? '',
senderEmailAddress: emailPrint.sender?.email ?? '',
dateTime: emailPrint.receiveTime,
fromPrefix: emailPrint.fromPrefix,
toPrefix: emailPrint.toPrefix,
ccPrefix: emailPrint.ccPrefix,
@@ -1,11 +1,10 @@
import 'package:equatable/equatable.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
import 'package:model/email/attachment.dart';
class EmailPrint with EquatableMixin {
final String appName;
final String userName;
final Email emailInformation;
final String emailContent;
final String locale;
final String toPrefix;
@@ -14,16 +13,18 @@ class EmailPrint with EquatableMixin {
final String bccPrefix;
final String replyToPrefix;
final String titleAttachment;
final String receiveTime;
final List<Attachment>? attachments;
final String? toAddress;
final String? ccAddress;
final String? bccAddress;
final String? replyToAddress;
final EmailAddress? sender;
final String? subject;
EmailPrint({
required this.appName,
required this.userName,
required this.emailInformation,
required this.emailContent,
required this.locale,
required this.fromPrefix,
@@ -32,18 +33,20 @@ class EmailPrint with EquatableMixin {
required this.bccPrefix,
required this.replyToPrefix,
required this.titleAttachment,
required this.receiveTime,
this.attachments,
this.toAddress,
this.ccAddress,
this.bccAddress,
this.replyToAddress,
this.sender,
this.subject,
});
@override
List<Object?> get props => [
appName,
userName,
emailInformation,
emailContent,
locale,
fromPrefix,
@@ -52,11 +55,14 @@ class EmailPrint with EquatableMixin {
bccPrefix,
replyToPrefix,
titleAttachment,
receiveTime,
attachments,
toAddress,
ccAddress,
bccAddress,
replyToAddress,
sender,
subject,
];
}
@@ -65,9 +71,9 @@ extension EmailPrintExtension on EmailPrint {
return EmailPrint(
appName: appName,
userName: userName,
emailInformation: emailInformation,
emailContent: newEmailContent,
titleAttachment: titleAttachment,
receiveTime: receiveTime,
locale: locale,
fromPrefix: fromPrefix,
toPrefix: toPrefix,
@@ -79,6 +85,8 @@ extension EmailPrintExtension on EmailPrint {
ccAddress: ccAddress,
bccAddress: bccAddress,
replyToAddress: replyToAddress,
sender: sender,
subject: subject,
);
}
}
@@ -12,6 +12,7 @@ class PrintEmailInteractor {
Stream<Either<Failure, Success>> execute(EmailPrint emailPrint) async* {
try {
yield Right(PrintEmailLoading());
await emailRepository.printEmail(emailPrint);
yield Right(PrintEmailSuccess());
} catch (e) {
@@ -1742,25 +1742,38 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
_printEmailButtonState = ButtonState.disabled;
final locale = Localizations.localeOf(context);
final appLocalizations = AppLocalizations.of(context);
consumeState(
_printEmailInteractor.execute(
EmailPrint(
appName: AppLocalizations.of(context).app_name,
appName: appLocalizations.app_name,
userName: mailboxDashBoardController.userEmail,
emailInformation: email.toEmail(),
attachments: currentEmailLoaded.value!.attachments,
emailContent: currentEmailLoaded.value!.htmlContent,
locale: Localizations.localeOf(context).toLanguageTag(),
fromPrefix: AppLocalizations.of(context).from_email_address_prefix,
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(),
locale: locale.toLanguageTag(),
fromPrefix: appLocalizations.from_email_address_prefix,
toPrefix: appLocalizations.to_email_address_prefix,
ccPrefix: appLocalizations.cc_email_address_prefix,
bccPrefix: appLocalizations.bcc_email_address_prefix,
replyToPrefix: appLocalizations.replyToEmailAddressPrefix,
titleAttachment: appLocalizations.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),
sender: email.from?.isNotEmpty == true
? email.from!.first
: null,
receiveTime: email.getReceivedAt(
locale.toLanguageTag(),
pattern: email.receivedAt
?.value
.toLocal()
.toPatternForPrinting(locale.toLanguageTag()),
),
subject: email.subject,
)
)
);