TF-1923 Fix logic store opened email

(cherry picked from commit 8d9c8d3ee8ea519e683d5a7cbb5b080d2f78e292)
This commit is contained in:
dab246
2023-06-20 23:32:53 +07:00
committed by Dat H. Pham
parent 002a543865
commit 4ea620cc2b
11 changed files with 86 additions and 70 deletions
@@ -67,15 +67,15 @@ class GetEmailContentInteractor {
: newEmailContents;
yield Right<Failure, Success>(GetEmailContentSuccess(
emailContents: newEmailContents.asHtmlString,
emailContentsDisplayed: newEmailContentsDisplayed,
emailContent: newEmailContents.asHtmlString,
emailContentDisplayed: newEmailContentsDisplayed.asHtmlString,
attachments: email.allAttachments,
emailCurrent: email
));
} else {
yield Right<Failure, Success>(GetEmailContentSuccess(
emailContents: '',
emailContentsDisplayed: [],
emailContent: '',
emailContentDisplayed: '',
attachments: email.allAttachments,
emailCurrent: email
));
@@ -99,7 +99,7 @@ class GetEmailContentInteractor {
try {
final detailedEmail = await emailRepository.getStoredOpenedEmail(session, accountId, emailId);
yield Right<Failure, Success>(GetEmailContentFromCacheSuccess(
emailContentString: detailedEmail.htmlEmailContent ?? "",
emailContent: detailedEmail.htmlEmailContent ?? "",
attachments: detailedEmail.attachments ?? [],
emailCurrent: Email(
id: emailId,
@@ -132,7 +132,7 @@ class GetEmailContentInteractor {
try {
final detailedEmail = await emailRepository.getStoredNewEmail(session, accountId, emailId);
yield Right<Failure, Success>(GetEmailContentFromCacheSuccess(
emailContentString: detailedEmail.htmlEmailContent ?? "",
emailContent: detailedEmail.htmlEmailContent ?? "",
attachments: detailedEmail.attachments ?? [],
emailCurrent: Email(
id: emailId,
@@ -1,8 +1,10 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/utils/app_logger.dart';
import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:tmail_ui_user/features/email/domain/exceptions/email_cache_exceptions.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/store_opened_email_state.dart';
@@ -19,10 +21,27 @@ class StoreOpenedEmailInteractor {
) async* {
try {
yield Right<Failure, Success>(StoreOpenedEmailLoading());
await _emailRepository.storeOpenedEmail(session, accountId, detailedEmail);
yield Right<Failure, Success>(StoreOpenedEmailSuccess());
final isOpenedEmailExist = await _isOpenedEmailAlreadyStored(session, accountId, detailedEmail);
log('StoreOpenedEmailInteractor::execute():isOpenedEmailExist: $isOpenedEmailExist');
if (!isOpenedEmailExist) {
await _emailRepository.storeOpenedEmail(session, accountId, detailedEmail);
yield Right<Failure, Success>(StoreOpenedEmailSuccess());
} else {
yield Left<Failure, Success>(StoreOpenedEmailFailure(OpenedEmailAlreadyStoredException()));
}
} catch (e) {
yield Left<Failure, Success>(StoreOpenedEmailFailure(e));
}
}
Future<bool> _isOpenedEmailAlreadyStored(Session session, AccountId accountId, DetailedEmail detailedEmail) async {
try {
final storedOpenEmail = await _emailRepository.getStoredOpenedEmail(session, accountId, detailedEmail.emailId);
log('StoreOpenedEmailInteractor::isOpenedEmailAlreadyStored():storedOpenEmail: $storedOpenEmail');
return true;
} catch (err) {
logError('StoreOpenedEmailInteractor::isOpenedEmailAlreadyStored():EXCEPTION: $err');
return false;
}
}
}