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 90fba7772..6e7baeb36 100644 --- a/lib/features/email/domain/usecases/get_email_content_interactor.dart +++ b/lib/features/email/domain/usecases/get_email_content_interactor.dart @@ -10,6 +10,7 @@ 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'; +import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart'; import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart'; import 'package:tmail_ui_user/features/email/domain/state/get_email_content_state.dart'; @@ -109,16 +110,19 @@ class GetEmailContentInteractor { {Properties? additionalProperties} ) async* { try { - final detailedEmail = await emailRepository.getStoredOpenedEmail(session, accountId, emailId); + final tupleEmail = await Future.wait([ + emailRepository.getStoredEmail(session, accountId, emailId), + emailRepository.getStoredOpenedEmail(session, accountId, emailId), + ], eagerError: true); + final emailCache = tupleEmail[0] as Email; + final detailedEmail = tupleEmail[1] as DetailedEmail; log('GetEmailContentInteractor::_getStoredOpenedEmail: attachments = ${detailedEmail.attachments?.length} | inlineImages = ${detailedEmail.inlineImages?.length}'); yield Right(GetEmailContentFromCacheSuccess( htmlEmailContent: detailedEmail.htmlEmailContent ?? '', attachments: detailedEmail.attachments ?? [], inlineImages: detailedEmail.inlineImages ?? [], - emailCurrent: Email( - id: emailId, + emailCurrent: emailCache.copyWith( headers: detailedEmail.headers, - keywords: detailedEmail.keywords, sMimeStatusHeader: detailedEmail.sMimeStatusHeader, ) )); @@ -144,16 +148,19 @@ class GetEmailContentInteractor { {Properties? additionalProperties} ) async* { try { - final detailedEmail = await emailRepository.getStoredNewEmail(session, accountId, emailId); + final tupleEmail = await Future.wait([ + emailRepository.getStoredEmail(session, accountId, emailId), + emailRepository.getStoredNewEmail(session, accountId, emailId), + ], eagerError: true); + final emailCache = tupleEmail[0] as Email; + final detailedEmail = tupleEmail[1] as DetailedEmail; log('GetEmailContentInteractor::_getStoredNewEmail: attachments = ${detailedEmail.attachments?.length} | inlineImages = ${detailedEmail.inlineImages?.length}'); yield Right(GetEmailContentFromCacheSuccess( htmlEmailContent: detailedEmail.htmlEmailContent ?? '', attachments: detailedEmail.attachments ?? [], inlineImages: detailedEmail.inlineImages ?? [], - emailCurrent: Email( - id: emailId, + emailCurrent: emailCache.copyWith( headers: detailedEmail.headers, - keywords: detailedEmail.keywords, sMimeStatusHeader: detailedEmail.sMimeStatusHeader, ) )); diff --git a/lib/features/email/presentation/controller/single_email_controller.dart b/lib/features/email/presentation/controller/single_email_controller.dart index 398fb13a2..b9c729b55 100644 --- a/lib/features/email/presentation/controller/single_email_controller.dart +++ b/lib/features/email/presentation/controller/single_email_controller.dart @@ -735,6 +735,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin { AppLocalizations.of(currentContext!).yes, onConfirmAction: () => _handleSendReceiptToSenderAction(currentContext!), showAsBottomSheet: true, + dialogMargin: MediaQuery.paddingOf(currentContext!).add(const EdgeInsets.only(bottom: 12)), title: AppLocalizations.of(currentContext!).titleReadReceiptRequestNotificationMessage, cancelTitle: AppLocalizations.of(currentContext!).no, icon: SvgPicture.asset(imagePaths.icReadReceiptMessage, fit: BoxFit.fill), diff --git a/model/lib/extensions/email_extension.dart b/model/lib/extensions/email_extension.dart index 4bbeb2aff..6d6c8b594 100644 --- a/model/lib/extensions/email_extension.dart +++ b/model/lib/extensions/email_extension.dart @@ -54,7 +54,7 @@ extension EmailExtension on Email { final mailboxCurrent = findMailboxContain(mapMailbox); return !hasMdnSent && headers.readReceiptHasBeenRequested && - mailboxCurrent?.isSent == false; + mailboxCurrent?.isSent != true; } String getReceivedAt({required String newLocale, String? pattern}) {