TF-2611 Execute Email/get to get detailed email level one-by-one in FCM

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2024-02-19 16:32:00 +07:00
committed by Dat Vu
parent 82956378e5
commit 652fb48493
10 changed files with 34 additions and 62 deletions
@@ -11,9 +11,8 @@ 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/session/session.dart';
import 'package:jmap_dart_client/jmap/core/sort/comparator.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:model/account/account_request.dart';
import 'package:model/download/download_task_id.dart';
import 'package:model/email/attachment.dart';
@@ -91,7 +90,7 @@ abstract class EmailRepository {
Future<void> storeDetailedNewEmail(Session session, AccountId accountId, DetailedEmail detailedEmail);
Future<List<Email>> getListDetailedEmailById(Session session, AccountId accountId, Set<EmailId> emailIds, {Set<Comparator>? sort});
Future<Email> getDetailedEmailById(Session session, AccountId accountId, EmailId emailId);
Future<void> storeEmail(Session session, AccountId accountId, Email email);
@@ -1,12 +1,11 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/presentation/utils/html_transformer/transform_configuration.dart';
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/extensions/utc_date_extension.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/core/sort/comparator.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:model/extensions/email_extension.dart';
import 'package:model/extensions/list_attachment_extension.dart';
@@ -24,28 +23,21 @@ class GetListDetailedEmailByIdInteractor {
Stream<Either<Failure, Success>> execute(
Session session,
AccountId accountId,
Set<EmailId> emailIds,
String baseDownloadUrl,
{Set<Comparator>? sort}
List<EmailId> emailIds,
String baseDownloadUrl
) async* {
try {
yield Right<Failure, Success>(GetDetailedEmailByIdLoading());
final listEmails = await _emailRepository.getListDetailedEmailById(session, accountId, emailIds, sort: sort);
final listTuple2Email = await Future.wait(
listEmails.map((email) => _parsingEmailToDetailedEmail(accountId, email, baseDownloadUrl)),
eagerError: true);
listTuple2Email.sort((detailedEmail1, detailedEmail2) {
return detailedEmail1.value1.receivedAt.compareToSort(detailedEmail1.value1.receivedAt, true);
});
final mapDetailedEmails = {
for (var tuple2 in listTuple2Email)
tuple2.value1 : tuple2.value2
};
final ascendingEmailIds = emailIds.reversed.toList();
Map<Email, DetailedEmail> mapDetailedEmails = {};
for (var emailId in ascendingEmailIds) {
final email = await _emailRepository.getDetailedEmailById(session, accountId, emailId);
final tupleEmail = await _convertEmailToDetailedEmail(accountId, email, baseDownloadUrl);
mapDetailedEmails[tupleEmail.value1] = tupleEmail.value2;
}
log('GetListDetailedEmailByIdInteractor::execute: mapDetailedEmails = ${mapDetailedEmails.length}');
yield Right<Failure, Success>(GetDetailedEmailByIdSuccess(
mapDetailedEmails,
accountId,
@@ -56,7 +48,7 @@ class GetListDetailedEmailByIdInteractor {
}
}
Future<Tuple2<Email, DetailedEmail>> _parsingEmailToDetailedEmail(
Future<Tuple2<Email, DetailedEmail>> _convertEmailToDetailedEmail(
AccountId accountId,
Email email,
String baseDownloadUrl