TF-3370 Handle SetError when make email action (Mark as read/star/move/delete)

This commit is contained in:
dab246
2025-01-02 13:58:30 +07:00
committed by Dat H. Pham
parent 47963d162b
commit 0f94e52d35
17 changed files with 800 additions and 181 deletions
@@ -10,6 +10,8 @@ import 'package:dio/dio.dart';
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/error/set_error.dart';
import 'package:jmap_dart_client/jmap/core/id.dart';
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/core/state.dart' as jmap;
@@ -45,7 +47,10 @@ abstract class EmailRepository {
}
);
Future<List<EmailId>> markAsRead(
Future<({
List<EmailId> emailIdsSuccess,
Map<Id, SetError> mapErrors,
})> markAsRead(
Session session,
AccountId accountId,
List<EmailId> emailIds,
@@ -77,9 +82,19 @@ abstract class EmailRepository {
{CancelToken? cancelToken}
);
Future<List<EmailId>> moveToMailbox(Session session, AccountId accountId, MoveToMailboxRequest moveRequest);
Future<({
List<EmailId> emailIdsSuccess,
Map<Id, SetError> mapErrors,
})> moveToMailbox(
Session session,
AccountId accountId,
MoveToMailboxRequest moveRequest,
);
Future<List<EmailId>> markAsStar(
Future<({
List<EmailId> emailIdsSuccess,
Map<Id, SetError> mapErrors,
})> markAsStar(
Session session,
AccountId accountId,
List<EmailId> emailIds,
@@ -114,7 +129,14 @@ abstract class EmailRepository {
{CancelToken? cancelToken}
);
Future<List<EmailId>> deleteMultipleEmailsPermanently(Session session, AccountId accountId, List<EmailId> emailIds);
Future<({
List<EmailId> emailIdsSuccess,
Map<Id, SetError> mapErrors,
})> deleteMultipleEmailsPermanently(
Session session,
AccountId accountId,
List<EmailId> emailIds,
);
Future<bool> deleteEmailPermanently(
Session session,
@@ -16,10 +16,10 @@ class DeleteMultipleEmailsPermanentlyInteractor {
try {
yield Right<Failure, Success>(LoadingDeleteMultipleEmailsPermanentlyAll());
final listResult = await _emailRepository.deleteMultipleEmailsPermanently(session, accountId, emailIds);
if (listResult.length == emailIds.length) {
yield Right<Failure, Success>(DeleteMultipleEmailsPermanentlyAllSuccess(listResult));
} else if (listResult.isNotEmpty) {
yield Right<Failure, Success>(DeleteMultipleEmailsPermanentlyHasSomeEmailFailure(listResult));
if (listResult.emailIdsSuccess.length == emailIds.length) {
yield Right<Failure, Success>(DeleteMultipleEmailsPermanentlyAllSuccess(listResult.emailIdsSuccess));
} else if (listResult.emailIdsSuccess.isNotEmpty) {
yield Right<Failure, Success>(DeleteMultipleEmailsPermanentlyHasSomeEmailFailure(listResult.emailIdsSuccess));
} else {
yield Left<Failure, Success>(DeleteMultipleEmailsPermanentlyAllFailure());
}
@@ -29,11 +29,15 @@ class MarkAsEmailReadInteractor {
readAction,
);
yield Right(MarkAsEmailReadSuccess(
result.first,
readAction,
markReadAction,
));
if (result.emailIdsSuccess.isEmpty) {
yield Left(MarkAsEmailReadFailure(readAction));
} else {
yield Right(MarkAsEmailReadSuccess(
result.emailIdsSuccess.first,
readAction,
markReadAction,
));
}
} catch (e) {
yield Left(MarkAsEmailReadFailure(readAction, exception: e));
}
@@ -16,9 +16,9 @@ class MoveToMailboxInteractor {
try {
yield Right(LoadingMoveToMailbox());
final result = await _emailRepository.moveToMailbox(session, accountId, moveRequest);
if (result.isNotEmpty) {
if (result.emailIdsSuccess.isNotEmpty) {
yield Right(MoveToMailboxSuccess(
result.first,
result.emailIdsSuccess.first,
moveRequest.currentMailboxes.keys.first,
moveRequest.destinationMailboxId,
moveRequest.moveAction,