TF-1710 Add empty spam folder interactor

(cherry picked from commit f0d22cd8925185607b5dea74f2cf40052980d19c)
This commit is contained in:
dab246
2023-08-03 16:01:29 +07:00
committed by Dat Vu
parent 18c007d0b2
commit b83eb87675
12 changed files with 158 additions and 48 deletions
@@ -0,0 +1,45 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.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:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart';
import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart';
import 'package:tmail_ui_user/features/thread/domain/state/empty_spam_folder_state.dart';
class EmptySpamFolderInteractor {
final ThreadRepository threadRepository;
final MailboxRepository _mailboxRepository;
final EmailRepository _emailRepository;
EmptySpamFolderInteractor(
this.threadRepository,
this._mailboxRepository,
this._emailRepository
);
Stream<Either<Failure, Success>> execute(Session session, AccountId accountId, MailboxId spamMailboxId) async* {
try {
yield Right<Failure, Success>(EmptySpamFolderLoading());
final listState = await Future.wait([
_mailboxRepository.getMailboxState(session, accountId),
_emailRepository.getEmailState(session, accountId),
], eagerError: true);
final currentMailboxState = listState.first;
final currentEmailState = listState.last;
final emailIdDeleted = await threadRepository.emptySpamFolder(session, accountId, spamMailboxId);
yield Right<Failure, Success>(EmptySpamFolderSuccess(
emailIdDeleted,
currentMailboxState: currentMailboxState,
currentEmailState: currentEmailState,
));
} catch (e) {
yield Left<Failure, Success>(EmptySpamFolderFailure(e));
}
}
}
@@ -21,7 +21,7 @@ class EmptyTrashFolderInteractor {
Stream<Either<Failure, Success>> execute(Session session, AccountId accountId, MailboxId trashMailboxId) async* {
try {
yield Right<Failure, Success>(LoadingState());
yield Right<Failure, Success>(EmptyTrashFolderLoading());
final listState = await Future.wait([
_mailboxRepository.getMailboxState(session, accountId),
@@ -31,15 +31,12 @@ class EmptyTrashFolderInteractor {
final currentMailboxState = listState.first;
final currentEmailState = listState.last;
final result = await threadRepository.emptyTrashFolder(session, accountId, trashMailboxId);
if (result.isNotEmpty) {
yield Right<Failure, Success>(EmptyTrashFolderSuccess(
currentMailboxState: currentMailboxState,
currentEmailState: currentEmailState,
));
} else {
yield Left<Failure, Success>(EmptyTrashFolderFailure(null));
}
final emailIdDeleted = await threadRepository.emptyTrashFolder(session, accountId, trashMailboxId);
yield Right<Failure, Success>(EmptyTrashFolderSuccess(
emailIdDeleted,
currentMailboxState: currentMailboxState,
currentEmailState: currentEmailState,
));
} catch (e) {
yield Left<Failure, Success>(EmptyTrashFolderFailure(e));
}