TF-3349 Escape messages when forward and reply email
This commit is contained in:
@@ -53,62 +53,63 @@ extension EmailActionTypeExtension on EmailActionType {
|
||||
}
|
||||
|
||||
String? getHeaderEmailQuoted({
|
||||
required BuildContext context,
|
||||
required Locale locale,
|
||||
required AppLocalizations appLocalizations,
|
||||
required PresentationEmail presentationEmail
|
||||
}) {
|
||||
final locale = Localizations.localeOf(context).toLanguageTag();
|
||||
final languageTag = locale.toLanguageTag();
|
||||
switch(this) {
|
||||
case EmailActionType.reply:
|
||||
case EmailActionType.replyAll:
|
||||
final receivedAt = presentationEmail.receivedAt;
|
||||
final emailAddress = presentationEmail.from.listEmailAddressToString(isFullEmailAddress: true);
|
||||
return AppLocalizations.of(context).header_email_quoted(
|
||||
receivedAt.formatDateToLocal(pattern: 'MMM d, y h:mm a', locale: locale),
|
||||
final emailAddress = presentationEmail.from.toEscapeHtmlStringUseCommaSeparator();
|
||||
return appLocalizations.header_email_quoted(
|
||||
receivedAt.formatDateToLocal(pattern: 'MMM d, y h:mm a', locale: languageTag),
|
||||
emailAddress
|
||||
);
|
||||
case EmailActionType.forward:
|
||||
var headerQuoted = '------- ${AppLocalizations.of(context).forwarded_message} -------'.addNewLineTag();
|
||||
var headerQuoted = '------- ${appLocalizations.forwarded_message} -------'.addNewLineTag();
|
||||
|
||||
final subject = presentationEmail.subject ?? '';
|
||||
final subject = presentationEmail.subject?.escapeLtGtHtmlString() ?? '';
|
||||
final receivedAt = presentationEmail.receivedAt;
|
||||
final fromEmailAddress = presentationEmail.from.listEmailAddressToString(isFullEmailAddress: true);
|
||||
final toEmailAddress = presentationEmail.to.listEmailAddressToString(isFullEmailAddress: true);
|
||||
final ccEmailAddress = presentationEmail.cc.listEmailAddressToString(isFullEmailAddress: true);
|
||||
final bccEmailAddress = presentationEmail.bcc.listEmailAddressToString(isFullEmailAddress: true);
|
||||
final fromEmailAddress = presentationEmail.from.toEscapeHtmlStringUseCommaSeparator();
|
||||
final toEmailAddress = presentationEmail.to.toEscapeHtmlStringUseCommaSeparator();
|
||||
final ccEmailAddress = presentationEmail.cc.toEscapeHtmlStringUseCommaSeparator();
|
||||
final bccEmailAddress = presentationEmail.bcc.toEscapeHtmlStringUseCommaSeparator();
|
||||
|
||||
if (subject.isNotEmpty) {
|
||||
headerQuoted = headerQuoted
|
||||
.append('${AppLocalizations.of(context).subject_email}: ')
|
||||
.append('${appLocalizations.subject_email}: ')
|
||||
.append(subject)
|
||||
.addNewLineTag();
|
||||
}
|
||||
if (receivedAt != null) {
|
||||
headerQuoted = headerQuoted
|
||||
.append('${AppLocalizations.of(context).date}: ')
|
||||
.append(receivedAt.formatDateToLocal(pattern: 'MMM d, y h:mm a', locale: locale))
|
||||
.append('${appLocalizations.date}: ')
|
||||
.append(receivedAt.formatDateToLocal(pattern: 'MMM d, y h:mm a', locale: languageTag))
|
||||
.addNewLineTag();
|
||||
}
|
||||
if (fromEmailAddress.isNotEmpty) {
|
||||
headerQuoted = headerQuoted
|
||||
.append('${AppLocalizations.of(context).from_email_address_prefix}: ')
|
||||
.append('${appLocalizations.from_email_address_prefix}: ')
|
||||
.append(fromEmailAddress)
|
||||
.addNewLineTag();
|
||||
}
|
||||
if (toEmailAddress.isNotEmpty) {
|
||||
headerQuoted = headerQuoted
|
||||
.append('${AppLocalizations.of(context).to_email_address_prefix}: ')
|
||||
.append('${appLocalizations.to_email_address_prefix}: ')
|
||||
.append(toEmailAddress)
|
||||
.addNewLineTag();
|
||||
}
|
||||
if (ccEmailAddress.isNotEmpty) {
|
||||
headerQuoted = headerQuoted
|
||||
.append('${AppLocalizations.of(context).cc_email_address_prefix}: ')
|
||||
.append('${appLocalizations.cc_email_address_prefix}: ')
|
||||
.append(ccEmailAddress)
|
||||
.addNewLineTag();
|
||||
}
|
||||
if (bccEmailAddress.isNotEmpty) {
|
||||
headerQuoted = headerQuoted
|
||||
.append('${AppLocalizations.of(context).bcc_email_address_prefix}: ')
|
||||
.append('${appLocalizations.bcc_email_address_prefix}: ')
|
||||
.append(bccEmailAddress)
|
||||
.addNewLineTag();
|
||||
}
|
||||
|
||||
@@ -5,16 +5,19 @@ import 'package:flutter/material.dart';
|
||||
import 'package:model/email/email_action_type.dart';
|
||||
import 'package:model/email/presentation_email.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/extensions/email_action_type_extension.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
|
||||
mixin EditorViewMixin {
|
||||
String getEmailContentQuotedAsHtml({
|
||||
required BuildContext context,
|
||||
required Locale locale,
|
||||
required AppLocalizations appLocalizations,
|
||||
required String emailContent,
|
||||
required EmailActionType emailActionType,
|
||||
required PresentationEmail presentationEmail,
|
||||
}) {
|
||||
final headerEmailQuoted = emailActionType.getHeaderEmailQuoted(
|
||||
context: context,
|
||||
locale: locale,
|
||||
appLocalizations: appLocalizations,
|
||||
presentationEmail: presentationEmail
|
||||
);
|
||||
log('EditorViewMixin::getEmailContentQuotedAsHtml:headerEmailQuoted: $headerEmailQuoted');
|
||||
|
||||
@@ -10,6 +10,7 @@ import 'package:tmail_ui_user/features/composer/presentation/widgets/mobile/mobi
|
||||
import 'package:tmail_ui_user/features/email/domain/state/get_email_content_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/transform_html_email_content_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||
|
||||
class MobileEditorView extends StatelessWidget with EditorViewMixin {
|
||||
@@ -87,7 +88,8 @@ class MobileEditorView extends StatelessWidget with EditorViewMixin {
|
||||
return contentViewState!.fold(
|
||||
(failure) {
|
||||
final emailContentQuoted = getEmailContentQuotedAsHtml(
|
||||
context: context,
|
||||
locale: Localizations.localeOf(context),
|
||||
appLocalizations: AppLocalizations.of(context),
|
||||
emailContent: '',
|
||||
emailActionType: arguments!.emailActionType,
|
||||
presentationEmail: arguments!.presentationEmail!
|
||||
@@ -104,7 +106,8 @@ class MobileEditorView extends StatelessWidget with EditorViewMixin {
|
||||
return const CupertinoLoadingWidget(padding: EdgeInsets.all(16.0));
|
||||
} else {
|
||||
final emailContentQuoted = getEmailContentQuotedAsHtml(
|
||||
context: context,
|
||||
locale: Localizations.localeOf(context),
|
||||
appLocalizations: AppLocalizations.of(context),
|
||||
emailContent: success is TransformHtmlEmailContentSuccess
|
||||
? success.htmlContent
|
||||
: '',
|
||||
|
||||
@@ -13,6 +13,7 @@ import 'package:tmail_ui_user/features/composer/presentation/widgets/web/web_edi
|
||||
import 'package:tmail_ui_user/features/email/domain/state/get_email_content_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/transform_html_email_content_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||
|
||||
class WebEditorView extends StatelessWidget with EditorViewMixin {
|
||||
@@ -152,7 +153,8 @@ class WebEditorView extends StatelessWidget with EditorViewMixin {
|
||||
return contentViewState!.fold(
|
||||
(failure) {
|
||||
final emailContentQuoted = getEmailContentQuotedAsHtml(
|
||||
context: context,
|
||||
locale: Localizations.localeOf(context),
|
||||
appLocalizations: AppLocalizations.of(context),
|
||||
emailContent: '',
|
||||
emailActionType: arguments!.emailActionType,
|
||||
presentationEmail: arguments!.presentationEmail!
|
||||
@@ -181,7 +183,8 @@ class WebEditorView extends StatelessWidget with EditorViewMixin {
|
||||
return const CupertinoLoadingWidget(padding: EdgeInsets.all(16.0));
|
||||
} else {
|
||||
final emailContentQuoted = getEmailContentQuotedAsHtml(
|
||||
context: context,
|
||||
locale: Localizations.localeOf(context),
|
||||
appLocalizations: AppLocalizations.of(context),
|
||||
emailContent: success is TransformHtmlEmailContentSuccess
|
||||
? success.htmlContent
|
||||
: '',
|
||||
|
||||
Reference in New Issue
Block a user