TF-1923 Fix logic store opened email
(cherry picked from commit 8d9c8d3ee8ea519e683d5a7cbb5b080d2f78e292)
This commit is contained in:
@@ -3,4 +3,6 @@ class NotFoundStoredOpenedEmailException implements Exception {}
|
||||
|
||||
class NotFoundStoredNewEmailException implements Exception {}
|
||||
|
||||
class NotFoundStoredEmailException implements Exception {}
|
||||
class NotFoundStoredEmailException implements Exception {}
|
||||
|
||||
class OpenedEmailAlreadyStoredException implements Exception {}
|
||||
@@ -2,46 +2,45 @@ import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:model/email/attachment.dart';
|
||||
import 'package:model/email/email_content.dart';
|
||||
|
||||
class GetEmailContentLoading extends LoadingState {}
|
||||
|
||||
class GetEmailContentSuccess extends UIState {
|
||||
final String emailContents;
|
||||
final List<EmailContent> emailContentsDisplayed;
|
||||
final String emailContent;
|
||||
final String emailContentDisplayed;
|
||||
final List<Attachment> attachments;
|
||||
final Email? emailCurrent;
|
||||
|
||||
GetEmailContentSuccess({
|
||||
required this.emailContents,
|
||||
required this.emailContentsDisplayed,
|
||||
required this.emailContent,
|
||||
required this.emailContentDisplayed,
|
||||
required this.attachments,
|
||||
required this.emailCurrent
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
emailContents,
|
||||
emailContentsDisplayed,
|
||||
emailContent,
|
||||
emailContentDisplayed,
|
||||
attachments,
|
||||
emailCurrent
|
||||
];
|
||||
}
|
||||
|
||||
class GetEmailContentFromCacheSuccess extends UIState {
|
||||
final String emailContentString;
|
||||
final String emailContent;
|
||||
final List<Attachment> attachments;
|
||||
final Email? emailCurrent;
|
||||
|
||||
GetEmailContentFromCacheSuccess({
|
||||
required this.emailContentString,
|
||||
required this.emailContent,
|
||||
required this.attachments,
|
||||
this.emailCurrent
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
emailContentString,
|
||||
emailContent,
|
||||
attachments,
|
||||
emailCurrent,
|
||||
];
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user