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
new file mode 100644
index 000000000..e22d081a0
--- /dev/null
+++ b/core/lib/presentation/utils/html_transformer/dom/hide_draft_signature_transformer.dart
@@ -0,0 +1,26 @@
+import 'package:core/data/network/dio_client.dart';
+import 'package:core/presentation/utils/html_transformer/base/dom_transformer.dart';
+import 'package:html/dom.dart';
+
+class HideDraftSignatureTransformer extends DomTransformer {
+
+ const HideDraftSignatureTransformer();
+
+ @override
+ Future process({
+ required Document document,
+ 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;';
+ }
+ }
+}
\ No newline at end of file
diff --git a/core/lib/presentation/utils/html_transformer/transform_configuration.dart b/core/lib/presentation/utils/html_transformer/transform_configuration.dart
index 45a009175..aee876b22 100644
--- a/core/lib/presentation/utils/html_transformer/transform_configuration.dart
+++ b/core/lib/presentation/utils/html_transformer/transform_configuration.dart
@@ -6,6 +6,7 @@ import 'package:core/presentation/utils/html_transformer/dom/add_target_blank_in
import 'package:core/presentation/utils/html_transformer/dom/add_tooltip_link_transformers.dart';
import 'package:core/presentation/utils/html_transformer/dom/blockcode_transformers.dart';
import 'package:core/presentation/utils/html_transformer/dom/blockquoted_transformers.dart';
+import 'package:core/presentation/utils/html_transformer/dom/hide_draft_signature_transformer.dart';
import 'package:core/presentation/utils/html_transformer/dom/image_transformers.dart';
import 'package:core/presentation/utils/html_transformer/dom/remove_collapsed_signature_button_transformers.dart';
import 'package:core/presentation/utils/html_transformer/dom/remove_lazy_loading_for_background_image_transformers.dart';
@@ -47,6 +48,9 @@ class TransformConfiguration {
]);
factory TransformConfiguration.forDraftsEmail() => TransformConfiguration.fromDomTransformers([const ImageTransformer()]);
+ factory TransformConfiguration.forEditDraftsEmail() => TransformConfiguration.fromDomTransformers([
+ ...TransformConfiguration.forDraftsEmail().domTransformers,
+ const HideDraftSignatureTransformer()]);
factory TransformConfiguration.forPreviewEmailOnWeb() => TransformConfiguration.create(
customDomTransformers: [
diff --git a/lib/features/composer/data/repository/composer_repository_impl.dart b/lib/features/composer/data/repository/composer_repository_impl.dart
index 2f502bd40..f435699ba 100644
--- a/lib/features/composer/data/repository/composer_repository_impl.dart
+++ b/lib/features/composer/data/repository/composer_repository_impl.dart
@@ -44,7 +44,10 @@ class ComposerRepositoryImpl extends ComposerRepository {
}
@override
- Future generateEmail(CreateEmailRequest createEmailRequest) async {
+ Future generateEmail(
+ CreateEmailRequest createEmailRequest,
+ {bool withIdentityHeader = false}
+ ) async {
String emailContent = createEmailRequest.emailContent;
Set emailAttachments = Set.from(createEmailRequest.createAttachments());
@@ -69,7 +72,8 @@ class ComposerRepositoryImpl extends ComposerRepository {
newEmailContent: emailContent,
newEmailAttachments: emailAttachments,
userAgent: userAgent,
- partId: emailBodyPartId
+ partId: emailBodyPartId,
+ withIdentityHeader: withIdentityHeader,
);
return emailObject;
diff --git a/lib/features/composer/domain/repository/composer_repository.dart b/lib/features/composer/domain/repository/composer_repository.dart
index 8ba787980..caeac9e62 100644
--- a/lib/features/composer/domain/repository/composer_repository.dart
+++ b/lib/features/composer/domain/repository/composer_repository.dart
@@ -5,7 +5,9 @@ import 'package:tmail_ui_user/features/composer/presentation/model/create_email_
import 'package:tmail_ui_user/features/upload/domain/model/upload_attachment.dart';
abstract class ComposerRepository {
- Future generateEmail(CreateEmailRequest createEmailRequest);
+ Future generateEmail(
+ CreateEmailRequest createEmailRequest,
+ {bool withIdentityHeader = false});
Future uploadAttachment(FileInfo fileInfo, Uri uploadUri, {CancelToken? cancelToken});
diff --git a/lib/features/composer/domain/usecases/create_new_and_save_email_to_drafts_interactor.dart b/lib/features/composer/domain/usecases/create_new_and_save_email_to_drafts_interactor.dart
index 0c20eeff1..dd7649a7d 100644
--- a/lib/features/composer/domain/usecases/create_new_and_save_email_to_drafts_interactor.dart
+++ b/lib/features/composer/domain/usecases/create_new_and_save_email_to_drafts_interactor.dart
@@ -103,7 +103,9 @@ class CreateNewAndSaveEmailToDraftsInteractor {
Future _createEmailObject(CreateEmailRequest createEmailRequest) async {
try {
- final emailCreated = await _composerRepository.generateEmail(createEmailRequest);
+ final emailCreated = await _composerRepository.generateEmail(
+ createEmailRequest,
+ withIdentityHeader: true);
return emailCreated;
} catch (e) {
logError('CreateNewAndSaveEmailToDraftsInteractor::_createEmailObject: Exception: $e');
diff --git a/lib/features/composer/domain/usecases/save_composer_cache_on_web_interactor.dart b/lib/features/composer/domain/usecases/save_composer_cache_on_web_interactor.dart
index 4877dc469..4abf6166e 100644
--- a/lib/features/composer/domain/usecases/save_composer_cache_on_web_interactor.dart
+++ b/lib/features/composer/domain/usecases/save_composer_cache_on_web_interactor.dart
@@ -24,13 +24,14 @@ class SaveComposerCacheOnWebInteractor {
UserName userName,
) async {
try {
- final emailCreated = await _composerRepository.generateEmail(createEmailRequest);
+ final emailCreated = await _composerRepository.generateEmail(
+ createEmailRequest,
+ withIdentityHeader: true);
await _composerCacheRepository.saveComposerCacheOnWeb(
accountId: accountId,
userName: userName,
composerCache: ComposerCache(
email: emailCreated,
- identity: createEmailRequest.identity,
hasRequestReadReceipt: createEmailRequest.hasRequestReadReceipt,
displayMode: createEmailRequest.displayMode
));
diff --git a/lib/features/composer/presentation/composer_controller.dart b/lib/features/composer/presentation/composer_controller.dart
index 032bafe1b..c55a1107a 100644
--- a/lib/features/composer/presentation/composer_controller.dart
+++ b/lib/features/composer/presentation/composer_controller.dart
@@ -17,9 +17,11 @@ import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:html_editor_enhanced/html_editor.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
+import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
import 'package:jmap_dart_client/jmap/identities/identity.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
+import 'package:jmap_dart_client/jmap/mail/email/individual_header_identifier.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/model.dart';
import 'package:permission_handler/permission_handler.dart';
@@ -58,6 +60,7 @@ import 'package:tmail_ui_user/features/composer/presentation/extensions/list_sha
import 'package:tmail_ui_user/features/composer/presentation/mixin/drag_drog_file_mixin.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/create_email_request.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/draggable_email_address.dart';
+import 'package:tmail_ui_user/features/composer/presentation/model/signature_status.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/inline_image.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/prefix_recipient_state.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/screen_display_mode.dart';
@@ -191,6 +194,7 @@ class ComposerController extends BaseController with DragDropFileMixin implement
ButtonState _closeComposerButtonState = ButtonState.enabled;
ButtonState _saveToDraftButtonState = ButtonState.enabled;
ButtonState _sendButtonState = ButtonState.enabled;
+ SignatureStatus _identityContentOnOpenPolicy = SignatureStatus.editedAvailable;
late Worker uploadInlineImageWorker;
late Worker dashboardViewStateWorker;
@@ -258,6 +262,7 @@ class ComposerController extends BaseController with DragDropFileMixin implement
} else {
richTextMobileTabletController = null;
}
+ _identityContentOnOpenPolicy = SignatureStatus.editedAvailable;
super.onClose();
}
@@ -716,14 +721,21 @@ class ComposerController extends BaseController with DragDropFileMixin implement
}
}
+ Identity? _selectIdentityFromId(IdentityId? identityId) {
+ if (identityId == null) return null;
+
+ return listFromIdentities.firstWhereOrNull(
+ (identity) => identity.id == identityId);
+ }
+
void _initIdentities(ComposerArguments composerArguments) {
listFromIdentities.value = composerArguments.identities ?? [];
+ final selectedIdentityFromId = _selectIdentityFromId(
+ composerArguments.selectedIdentityId);
if (listFromIdentities.isEmpty) {
_getAllIdentities();
- } else if (composerArguments.selectedIdentity != null
- && listFromIdentities.contains(composerArguments.selectedIdentity!)
- ) {
- _selectIdentity(composerArguments.selectedIdentity!);
+ } else if (selectedIdentityFromId != null) {
+ _selectIdentity(selectedIdentityFromId);
} else if (composerArguments.identities?.isNotEmpty == true) {
_selectIdentity(composerArguments.identities!.first);
}
@@ -744,11 +756,10 @@ class ComposerController extends BaseController with DragDropFileMixin implement
listFromIdentities.value = listIdentitiesMayDeleted;
if (identitySelected.value == null) {
- final selectedIdentityFromArguments = composerArguments.value?.selectedIdentity;
- if (selectedIdentityFromArguments != null
- && listFromIdentities.contains(selectedIdentityFromArguments)
- ) {
- await _selectIdentity(selectedIdentityFromArguments);
+ final selectedIdentityFromId = _selectIdentityFromId(
+ composerArguments.value?.selectedIdentityId);
+ if (selectedIdentityFromId != null) {
+ await _selectIdentity(selectedIdentityFromId);
} else {
await _selectIdentity(listIdentitiesMayDeleted.firstOrNull);
}
@@ -1389,7 +1400,9 @@ class ComposerController extends BaseController with DragDropFileMixin implement
accountId,
emailId,
mailboxDashBoardController.baseDownloadUrl,
- TransformConfiguration.forDraftsEmail()
+ TransformConfiguration.forEditDraftsEmail(),
+ additionalProperties: Properties({
+ IndividualHeaderIdentifier.identityHeader.value}),
));
}
@@ -1412,9 +1425,18 @@ class ComposerController extends BaseController with DragDropFileMixin implement
if (composerArguments.value?.emailActionType == EmailActionType.editDraft) {
_setUpRequestReadReceiptForDraftEmail(success.emailCurrent);
+ _restoreIdentityFromHeader(success.emailCurrent);
}
}
+ void _restoreIdentityFromHeader(Email? email) {
+ final identityIdFromHeader = email?.identityIdFromHeader;
+ if (identityIdFromHeader == null) return;
+ final selectedIdentityFromHeader = _selectIdentityFromId(identityIdFromHeader);
+ if (selectedIdentityFromHeader == null) return;
+ identitySelected.value = selectedIdentityFromHeader;
+ }
+
void _transformHtmlEmailContent(String? emailContent) {
emailContentsViewState(Right(TransformHtmlEmailContentLoading()));
if (emailContent?.isEmpty == true) {
@@ -1662,11 +1684,18 @@ class ComposerController extends BaseController with DragDropFileMixin implement
identitySelected.value = newIdentity;
if (newIdentity == null) return;
- if (composerArguments.value?.emailActionType == EmailActionType.reopenComposerBrowser) {
- composerArguments.value = composerArguments.value?.copyWith(
- emailActionType: EmailActionType.editDraft);
- } else {
- await _applyIdentityForAllFieldComposer(formerIdentity, newIdentity);
+ final emailActionType = composerArguments.value?.emailActionType;
+ switch (emailActionType) {
+ case EmailActionType.reopenComposerBrowser:
+ case EmailActionType.editDraft:
+ if (_identityContentOnOpenPolicy == SignatureStatus.editedAvailable) {
+ _identityContentOnOpenPolicy = SignatureStatus.editedApplied;
+ } else {
+ await _applyIdentityForAllFieldComposer(formerIdentity, newIdentity);
+ }
+ break;
+ default:
+ await _applyIdentityForAllFieldComposer(formerIdentity, newIdentity);
}
}
@@ -1891,7 +1920,9 @@ class ComposerController extends BaseController with DragDropFileMixin implement
if (identitySelected.value == null) {
_getAllIdentities();
} else {
- await _selectIdentity(identitySelected.value);
+ if (composerArguments.value?.emailActionType != EmailActionType.editDraft) {
+ await _selectIdentity(identitySelected.value);
+ }
_autoFocusFieldWhenLauncher();
}
}
diff --git a/lib/features/composer/presentation/extensions/create_email_request_extension.dart b/lib/features/composer/presentation/extensions/create_email_request_extension.dart
index cd0e6d0bc..f6de928bb 100644
--- a/lib/features/composer/presentation/extensions/create_email_request_extension.dart
+++ b/lib/features/composer/presentation/extensions/create_email_request_extension.dart
@@ -105,6 +105,7 @@ extension CreateEmailRequestExtension on CreateEmailRequest {
required Set newEmailAttachments,
required String userAgent,
required PartId partId,
+ bool withIdentityHeader = false,
}) {
return Email(
mailboxIds: createMailboxIds(),
@@ -145,6 +146,9 @@ extension CreateEmailRequestExtension on CreateEmailRequest {
headerMdn: hasRequestReadReceipt
? { IndividualHeaderIdentifier.headerMdn: createMdnEmailAddress() }
: null,
+ identityHeader: withIdentityHeader
+ ? {IndividualHeaderIdentifier.identityHeader: identity?.id?.id.value}
+ : null
);
}
diff --git a/lib/features/composer/presentation/model/signature_status.dart b/lib/features/composer/presentation/model/signature_status.dart
new file mode 100644
index 000000000..773978344
--- /dev/null
+++ b/lib/features/composer/presentation/model/signature_status.dart
@@ -0,0 +1,4 @@
+enum SignatureStatus {
+ editedAvailable,
+ editedApplied,
+}
\ No newline at end of file
diff --git a/lib/features/email/data/datasource/email_datasource.dart b/lib/features/email/data/datasource/email_datasource.dart
index 612468edf..2cfa7a9b4 100644
--- a/lib/features/email/data/datasource/email_datasource.dart
+++ b/lib/features/email/data/datasource/email_datasource.dart
@@ -9,6 +9,7 @@ import 'package:dio/dio.dart';
import 'package:email_recovery/email_recovery/email_recovery_action.dart';
import 'package:email_recovery/email_recovery/email_recovery_action_id.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
+import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
@@ -26,7 +27,11 @@ import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_r
import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart';
abstract class EmailDataSource {
- Future getEmailContent(Session session, AccountId accountId, EmailId emailId);
+ Future getEmailContent(
+ Session session,
+ AccountId accountId,
+ EmailId emailId,
+ {Properties? additionalProperties});
Future sendEmail(
Session session,
diff --git a/lib/features/email/data/datasource_impl/email_datasource_impl.dart b/lib/features/email/data/datasource_impl/email_datasource_impl.dart
index 407c1c1a0..c64e3ea66 100644
--- a/lib/features/email/data/datasource_impl/email_datasource_impl.dart
+++ b/lib/features/email/data/datasource_impl/email_datasource_impl.dart
@@ -10,6 +10,7 @@ import 'package:email_recovery/email_recovery/email_recovery_action.dart';
import 'package:email_recovery/email_recovery/email_recovery_action_id.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
+import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
@@ -35,9 +36,18 @@ class EmailDataSourceImpl extends EmailDataSource {
EmailDataSourceImpl(this.emailAPI, this._exceptionThrower);
@override
- Future getEmailContent(Session session, AccountId accountId, EmailId emailId) {
+ Future getEmailContent(
+ Session session,
+ AccountId accountId,
+ EmailId emailId,
+ {Properties? additionalProperties}
+ ) {
return Future.sync(() async {
- return await emailAPI.getEmailContent(session, accountId, emailId);
+ return await emailAPI.getEmailContent(
+ session,
+ accountId,
+ emailId,
+ additionalProperties: additionalProperties);
}).catchError(_exceptionThrower.throwException);
}
diff --git a/lib/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart b/lib/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart
index fe9a6eade..e866992c1 100644
--- a/lib/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart
+++ b/lib/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart
@@ -12,6 +12,7 @@ import 'package:dio/dio.dart';
import 'package:email_recovery/email_recovery/email_recovery_action.dart';
import 'package:email_recovery/email_recovery/email_recovery_action_id.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
+import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
@@ -109,7 +110,12 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource {
}
@override
- Future getEmailContent(Session session, AccountId accountId, EmailId emailId) {
+ Future getEmailContent(
+ Session session,
+ AccountId accountId,
+ EmailId emailId,
+ {Properties? additionalProperties}
+ ) {
throw UnimplementedError();
}
diff --git a/lib/features/email/data/network/email_api.dart b/lib/features/email/data/network/email_api.dart
index 4a148a663..4ff128005 100644
--- a/lib/features/email/data/network/email_api.dart
+++ b/lib/features/email/data/network/email_api.dart
@@ -81,7 +81,12 @@ class EmailAPI with HandleSetErrorMixin {
EmailAPI(this._httpClient, this._downloadManager, this._dioClient, this._uuid);
- Future getEmailContent(Session session, AccountId accountId, EmailId emailId) async {
+ Future getEmailContent(
+ Session session,
+ AccountId accountId,
+ EmailId emailId,
+ {Properties? additionalProperties}
+ ) async {
final processingInvocation = ProcessingInvocation();
final jmapRequestBuilder = JmapRequestBuilder(_httpClient, processingInvocation);
@@ -90,6 +95,9 @@ class EmailAPI with HandleSetErrorMixin {
..addIds({emailId.id})
..addProperties(ThreadConstants.propertiesGetEmailContent)
..addFetchHTMLBodyValues(true);
+ if (additionalProperties != null) {
+ getEmailMethod.addProperties(additionalProperties);
+ }
final getEmailInvocation = jmapRequestBuilder.invocation(getEmailMethod);
diff --git a/lib/features/email/data/repository/email_repository_impl.dart b/lib/features/email/data/repository/email_repository_impl.dart
index 2d699dc11..57860f7ef 100644
--- a/lib/features/email/data/repository/email_repository_impl.dart
+++ b/lib/features/email/data/repository/email_repository_impl.dart
@@ -11,6 +11,7 @@ import 'package:dio/dio.dart';
import 'package:email_recovery/email_recovery/email_recovery_action.dart';
import 'package:email_recovery/email_recovery/email_recovery_action_id.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
+import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
@@ -49,8 +50,17 @@ class EmailRepositoryImpl extends EmailRepository {
);
@override
- Future getEmailContent(Session session, AccountId accountId, EmailId emailId) {
- return emailDataSource[DataSourceType.network]!.getEmailContent(session ,accountId, emailId);
+ Future getEmailContent(
+ Session session,
+ AccountId accountId,
+ EmailId emailId,
+ {Properties? additionalProperties}
+ ) {
+ return emailDataSource[DataSourceType.network]!.getEmailContent(
+ session,
+ accountId,
+ emailId,
+ additionalProperties: additionalProperties);
}
@override
diff --git a/lib/features/email/domain/repository/email_repository.dart b/lib/features/email/domain/repository/email_repository.dart
index 38488b058..88ae516c2 100644
--- a/lib/features/email/domain/repository/email_repository.dart
+++ b/lib/features/email/domain/repository/email_repository.dart
@@ -10,6 +10,7 @@ import 'package:dio/dio.dart';
import 'package:email_recovery/email_recovery/email_recovery_action.dart';
import 'package:email_recovery/email_recovery/email_recovery_action_id.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
+import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
@@ -28,7 +29,11 @@ import 'package:tmail_ui_user/features/email/domain/model/restore_deleted_messag
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
abstract class EmailRepository {
- Future getEmailContent(Session session, AccountId accountId, EmailId emailId);
+ Future getEmailContent(
+ Session session,
+ AccountId accountId,
+ EmailId emailId,
+ {Properties? additionalProperties});
Future sendEmail(
Session session,
diff --git a/lib/features/email/domain/usecases/get_email_content_interactor.dart b/lib/features/email/domain/usecases/get_email_content_interactor.dart
index 7480304b6..19622cbc5 100644
--- a/lib/features/email/domain/usecases/get_email_content_interactor.dart
+++ b/lib/features/email/domain/usecases/get_email_content_interactor.dart
@@ -6,6 +6,7 @@ import 'package:core/utils/app_logger.dart';
import 'package:core/utils/platform_info.dart';
import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
+import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:model/model.dart';
@@ -23,14 +24,27 @@ class GetEmailContentInteractor {
EmailId emailId,
String baseDownloadUrl,
TransformConfiguration transformConfiguration,
+ {Properties? additionalProperties}
) async* {
try {
yield Right(GetEmailContentLoading());
if (PlatformInfo.isMobile) {
- yield* _getStoredOpenedEmail(session, accountId, emailId, baseDownloadUrl, transformConfiguration);
+ yield* _getStoredOpenedEmail(
+ session,
+ accountId,
+ emailId,
+ baseDownloadUrl,
+ transformConfiguration,
+ additionalProperties: additionalProperties);
} else {
- yield* _getContentEmailFromServer(session, accountId, emailId, baseDownloadUrl, transformConfiguration);
+ yield* _getContentEmailFromServer(
+ session,
+ accountId,
+ emailId,
+ baseDownloadUrl,
+ transformConfiguration,
+ additionalProperties: additionalProperties);
}
} catch (e) {
log('GetEmailContentInteractor::execute(): exception = $e');
@@ -44,9 +58,14 @@ class GetEmailContentInteractor {
EmailId emailId,
String baseDownloadUrl,
TransformConfiguration transformConfiguration,
+ {Properties? additionalProperties}
) async* {
try {
- final email = await emailRepository.getEmailContent(session, accountId, emailId);
+ final email = await emailRepository.getEmailContent(
+ session,
+ accountId,
+ emailId,
+ additionalProperties: additionalProperties);
final listAttachments = email.allAttachments.getListAttachmentsDisplayedOutside(email.htmlBodyAttachments);
final listInlineImages = email.allAttachments.listAttachmentsDisplayedInContent;
@@ -87,6 +106,7 @@ class GetEmailContentInteractor {
EmailId emailId,
String baseDownloadUrl,
TransformConfiguration transformConfiguration,
+ {Properties? additionalProperties}
) async* {
try {
log('GetEmailContentInteractor::_getStoredOpenedEmail(): CALLED');
@@ -109,7 +129,8 @@ class GetEmailContentInteractor {
accountId,
emailId,
baseDownloadUrl,
- transformConfiguration
+ transformConfiguration,
+ additionalProperties: additionalProperties
);
}
}
@@ -120,6 +141,7 @@ class GetEmailContentInteractor {
EmailId emailId,
String baseDownloadUrl,
TransformConfiguration transformConfiguration,
+ {Properties? additionalProperties}
) async* {
try {
log('GetEmailContentInteractor::_getStoredNewEmail():CALLED');
@@ -142,7 +164,8 @@ class GetEmailContentInteractor {
accountId,
emailId,
baseDownloadUrl,
- transformConfiguration
+ transformConfiguration,
+ additionalProperties: additionalProperties
);
}
}
diff --git a/lib/features/email/presentation/extensions/composer_arguments_extension.dart b/lib/features/email/presentation/extensions/composer_arguments_extension.dart
index 3840d6ece..7653000fe 100644
--- a/lib/features/email/presentation/extensions/composer_arguments_extension.dart
+++ b/lib/features/email/presentation/extensions/composer_arguments_extension.dart
@@ -3,10 +3,10 @@ import 'package:tmail_ui_user/features/email/presentation/model/composer_argumen
extension ComposerArgumentsExtension on ComposerArguments {
- ComposerArguments withIdentity({List? identities, Identity? selectedIdentity}) {
+ ComposerArguments withIdentity({List? identities, IdentityId? selectedIdentityId}) {
return copyWith(
identities: identities,
- selectedIdentity: selectedIdentity,
+ selectedIdentityId: selectedIdentityId,
);
}
}
\ No newline at end of file
diff --git a/lib/features/email/presentation/model/composer_arguments.dart b/lib/features/email/presentation/model/composer_arguments.dart
index edaebe3c6..fc9b9f281 100644
--- a/lib/features/email/presentation/model/composer_arguments.dart
+++ b/lib/features/email/presentation/model/composer_arguments.dart
@@ -26,7 +26,7 @@ class ComposerArguments extends RouterArguments {
final MessageIdsHeaderValue? references;
final EmailId? previousEmailId;
final List? identities;
- final Identity? selectedIdentity;
+ final IdentityId? selectedIdentityId;
final List? inlineImages;
final bool? hasRequestReadReceipt;
final ScreenDisplayMode displayMode;
@@ -46,7 +46,7 @@ class ComposerArguments extends RouterArguments {
this.references,
this.previousEmailId,
this.identities,
- this.selectedIdentity,
+ this.selectedIdentityId,
this.inlineImages,
this.hasRequestReadReceipt,
this.displayMode = ScreenDisplayMode.normal
@@ -87,7 +87,7 @@ class ComposerArguments extends RouterArguments {
factory ComposerArguments.editDraftEmail(PresentationEmail presentationEmail) =>
ComposerArguments(
emailActionType: EmailActionType.editDraft,
- presentationEmail: presentationEmail
+ presentationEmail: presentationEmail,
);
factory ComposerArguments.fromSessionStorageBrowser(ComposerCache composerCache) =>
@@ -96,7 +96,7 @@ class ComposerArguments extends RouterArguments {
presentationEmail: composerCache.email?.toPresentationEmail(),
emailContents: composerCache.email?.emailContentList.asHtmlString,
attachments: composerCache.email?.allAttachments.getListAttachmentsDisplayedOutside(composerCache.email?.htmlBodyAttachments ?? []),
- selectedIdentity: composerCache.identity,
+ selectedIdentityId: composerCache.email?.identityIdFromHeader,
inlineImages: composerCache.email?.allAttachments.listAttachmentsDisplayedInContent,
hasRequestReadReceipt: composerCache.hasRequestReadReceipt,
displayMode: composerCache.displayMode,
@@ -189,7 +189,7 @@ class ComposerArguments extends RouterArguments {
references,
previousEmailId,
identities,
- selectedIdentity,
+ selectedIdentityId,
inlineImages,
hasRequestReadReceipt,
displayMode,
@@ -210,7 +210,7 @@ class ComposerArguments extends RouterArguments {
MessageIdsHeaderValue? references,
EmailId? previousEmailId,
List? identities,
- Identity? selectedIdentity,
+ IdentityId? selectedIdentityId,
List? inlineImages,
bool? hasRequestReadReceipt,
ScreenDisplayMode? displayMode,
@@ -230,7 +230,7 @@ class ComposerArguments extends RouterArguments {
references: references ?? this.references,
previousEmailId: previousEmailId ?? this.previousEmailId,
identities: identities ?? this.identities,
- selectedIdentity: selectedIdentity ?? this.selectedIdentity,
+ selectedIdentityId: selectedIdentityId ?? this.selectedIdentityId,
inlineImages: inlineImages ?? this.inlineImages,
hasRequestReadReceipt: hasRequestReadReceipt ?? this.hasRequestReadReceipt,
displayMode: displayMode ?? this.displayMode,
diff --git a/lib/features/mailbox_dashboard/data/model/composer_cache.dart b/lib/features/mailbox_dashboard/data/model/composer_cache.dart
index 359980234..39cb541c4 100644
--- a/lib/features/mailbox_dashboard/data/model/composer_cache.dart
+++ b/lib/features/mailbox_dashboard/data/model/composer_cache.dart
@@ -1,5 +1,4 @@
import 'package:equatable/equatable.dart';
-import 'package:jmap_dart_client/jmap/identities/identity.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/screen_display_mode.dart';
@@ -10,13 +9,11 @@ part 'composer_cache.g.dart';
class ComposerCache with EquatableMixin {
final Email? email;
- final Identity? identity;
final bool? hasRequestReadReceipt;
final ScreenDisplayMode displayMode;
ComposerCache({
this.email,
- this.identity,
this.hasRequestReadReceipt,
this.displayMode = ScreenDisplayMode.normal
});
@@ -28,7 +25,6 @@ class ComposerCache with EquatableMixin {
@override
List