TF-996: Previous / Next message when searching email

This commit is contained in:
ManhNTX
2022-10-28 18:46:19 +07:00
committed by Dat H. Pham
parent 4e3385dc84
commit 2e16cc7f6c
6 changed files with 61 additions and 53 deletions
@@ -1,25 +0,0 @@
import 'package:equatable/equatable.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:model/model.dart';
class EmailLoaded with EquatableMixin {
final List<EmailContent> emailContents;
final List<EmailContent> emailContentsDisplayed;
final List<Attachment> attachments;
final Email? emailCurrent;
EmailLoaded(
this.emailContents,
this.emailContentsDisplayed,
this.attachments,
this.emailCurrent
);
@override
List<Object?> get props => [
emailContents,
emailContentsDisplayed,
attachments,
emailCurrent
];
}
@@ -4,7 +4,6 @@ import 'package:flutter/foundation.dart';
import 'package:jmap_dart_client/jmap/account_id.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/email_loaded.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';
@@ -13,41 +12,31 @@ class GetEmailContentInteractor {
GetEmailContentInteractor(this.emailRepository);
Stream<Either<Failure, Success>> execute(AccountId accountId, EmailId emailId, String? baseDownloadUrl, {EmailLoaded? emailLoaded}) async* {
Stream<Either<Failure, Success>> execute(AccountId accountId, EmailId emailId, String? baseDownloadUrl) async* {
try {
yield Right<Failure, Success>(GetEmailContentLoading());
final email = await emailRepository.getEmailContent(accountId, emailId);
if(emailLoaded != null) {
await Future.delayed(const Duration(milliseconds: 300));
if (email.emailContentList.isNotEmpty) {
final newEmailContents = await emailRepository.transformEmailContent(
email.emailContentList,
email.allAttachments.listAttachmentsDisplayedInContent,
baseDownloadUrl,
accountId);
final newEmailContentsDisplayed = kIsWeb
? await emailRepository.addTooltipWhenHoverOnLink(newEmailContents)
: newEmailContents;
yield Right<Failure, Success>(GetEmailContentSuccess(
emailLoaded.emailContents,
emailLoaded.emailContentsDisplayed,
emailLoaded.attachments,
emailLoaded.emailCurrent));
newEmailContents,
newEmailContentsDisplayed,
email.allAttachments,
email));
} else if (email.allAttachments.isNotEmpty) {
yield Right<Failure, Success>(GetEmailContentSuccess([], [], email.allAttachments, email));
} else if (email.headers?.isNotEmpty == true) {
yield Right<Failure, Success>(GetEmailContentSuccess([], [], [], email));
} else {
final email = await emailRepository.getEmailContent(accountId, emailId);
if (email.emailContentList.isNotEmpty) {
final newEmailContents = await emailRepository.transformEmailContent(
email.emailContentList,
email.allAttachments.listAttachmentsDisplayedInContent,
baseDownloadUrl,
accountId);
final newEmailContentsDisplayed = kIsWeb
? await emailRepository.addTooltipWhenHoverOnLink(newEmailContents)
: newEmailContents;
yield Right<Failure, Success>(GetEmailContentSuccess(
newEmailContents,
newEmailContentsDisplayed,
email.allAttachments,
email));
} else if (email.allAttachments.isNotEmpty) {
yield Right<Failure, Success>(GetEmailContentSuccess([], [], email.allAttachments, email));
} else if (email.headers?.isNotEmpty == true) {
yield Right<Failure, Success>(GetEmailContentSuccess([], [], [], email));
} else {
yield Left(GetEmailContentFailure(null));
}
yield Left(GetEmailContentFailure(null));
}
} catch (e) {
log('GetEmailContentInteractor::execute(): exception = $e');