TF-153 Combine moveToMailbox and moveToTrash to moveToMailbox using EmailActionType object

This commit is contained in:
dab246
2022-04-15 15:51:37 +07:00
committed by Dat H. Pham
parent 60aabfb6d1
commit 16c5aed64e
45 changed files with 268 additions and 722 deletions
@@ -1,13 +1,15 @@
import 'package:core/core.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/model.dart';
import 'package:model/email/email_action_type.dart';
import 'package:tmail_ui_user/features/email/domain/model/move_action.dart';
class MoveMultipleEmailToMailboxAllSuccess extends UIState {
final List<EmailId> movedListEmailId;
final MailboxId currentMailboxId;
final MailboxId destinationMailboxId;
final MoveAction moveAction;
final EmailActionType emailActionType;
final String? destinationPath;
MoveMultipleEmailToMailboxAllSuccess(
@@ -15,7 +17,9 @@ class MoveMultipleEmailToMailboxAllSuccess extends UIState {
this.currentMailboxId,
this.destinationMailboxId,
this.moveAction,
this.destinationPath);
this.emailActionType,
{this.destinationPath}
);
@override
List<Object?> get props => [
@@ -23,16 +27,19 @@ class MoveMultipleEmailToMailboxAllSuccess extends UIState {
currentMailboxId,
destinationMailboxId,
moveAction,
destinationPath];
emailActionType,
destinationPath
];
}
class MoveMultipleEmailToMailboxAllFailure extends FeatureFailure {
final MoveAction moveAction;
final EmailActionType emailActionType;
MoveMultipleEmailToMailboxAllFailure(this.moveAction);
MoveMultipleEmailToMailboxAllFailure(this.moveAction, this.emailActionType);
@override
List<Object> get props => [moveAction];
List<Object> get props => [moveAction, emailActionType];
}
class MoveMultipleEmailToMailboxHasSomeEmailFailure extends UIState {
@@ -40,6 +47,7 @@ class MoveMultipleEmailToMailboxHasSomeEmailFailure extends UIState {
final MailboxId currentMailboxId;
final MailboxId destinationMailboxId;
final MoveAction moveAction;
final EmailActionType emailActionType;
final String? destinationPath;
MoveMultipleEmailToMailboxHasSomeEmailFailure(
@@ -47,7 +55,9 @@ class MoveMultipleEmailToMailboxHasSomeEmailFailure extends UIState {
this.currentMailboxId,
this.destinationMailboxId,
this.moveAction,
this.destinationPath);
this.emailActionType,
{this.destinationPath}
);
@override
List<Object?> get props => [
@@ -55,15 +65,18 @@ class MoveMultipleEmailToMailboxHasSomeEmailFailure extends UIState {
currentMailboxId,
destinationMailboxId,
moveAction,
destinationPath];
emailActionType,
destinationPath
];
}
class MoveMultipleEmailToMailboxFailure extends FeatureFailure {
final exception;
final MoveAction moveAction;
final EmailActionType emailActionType;
MoveMultipleEmailToMailboxFailure(this.exception, this.moveAction);
MoveMultipleEmailToMailboxFailure(this.exception, this.emailActionType, this.moveAction);
@override
List<Object> get props => [exception, moveAction];
List<Object> get props => [exception, emailActionType, moveAction];
}
@@ -1,67 +0,0 @@
import 'package:core/core.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/model.dart';
class MoveMultipleEmailToTrashAllSuccess extends UIState {
final List<EmailId> movedListEmailId;
final MailboxId currentMailboxId;
final MailboxId trashMailboxId;
final MoveAction moveAction;
MoveMultipleEmailToTrashAllSuccess(
this.movedListEmailId,
this.currentMailboxId,
this.trashMailboxId,
this.moveAction,
);
@override
List<Object?> get props => [
movedListEmailId,
currentMailboxId,
trashMailboxId,
moveAction,
];
}
class MoveMultipleEmailToTrashAllFailure extends FeatureFailure {
final MoveAction moveAction;
MoveMultipleEmailToTrashAllFailure(this.moveAction);
@override
List<Object> get props => [moveAction];
}
class MoveMultipleEmailToTrashHasSomeEmailFailure extends UIState {
final List<EmailId> movedListEmailId;
final MailboxId currentMailboxId;
final MailboxId trashMailboxId;
final MoveAction moveAction;
MoveMultipleEmailToTrashHasSomeEmailFailure(
this.movedListEmailId,
this.currentMailboxId,
this.trashMailboxId,
this.moveAction,
);
@override
List<Object?> get props => [
movedListEmailId,
currentMailboxId,
trashMailboxId,
moveAction,
];
}
class MoveMultipleEmailToTrashFailure extends FeatureFailure {
final exception;
final MoveAction moveAction;
MoveMultipleEmailToTrashFailure(this.exception, this.moveAction);
@override
List<Object> get props => [exception, moveAction];
}
@@ -18,7 +18,7 @@ class MarkAsMultipleEmailReadInteractor {
) async* {
try {
final listEmailNeedMarkAsRead = emails
.where((email) => readAction == ReadActions.markAsUnread ? email.isReadEmail() : email.isUnReadEmail())
.where((email) => readAction == ReadActions.markAsUnread ? email.hasRead : !email.hasRead)
.toList();
final result = await _emailRepository.markAsRead(accountId, listEmailNeedMarkAsRead, readAction);
@@ -18,7 +18,7 @@ class MarkAsStarMultipleEmailInteractor {
) async* {
try {
final listEmailNeedMarkStar = emails
.where((email) => markStarAction == MarkStarAction.unMarkStar ? email.isFlaggedEmail() : !email.isFlaggedEmail())
.where((email) => markStarAction == MarkStarAction.unMarkStar ? email.hasStarred : !email.hasStarred)
.toList();
final result = await _emailRepository.markAsStar(accountId, listEmailNeedMarkStar, markStarAction);
@@ -3,7 +3,7 @@ import 'dart:async';
import 'package:core/core.dart';
import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:tmail_ui_user/features/email/domain/model/move_request.dart';
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
import 'package:tmail_ui_user/features/thread/domain/state/move_multiple_email_to_mailbox_state.dart';
@@ -12,7 +12,7 @@ class MoveMultipleEmailToMailboxInteractor {
MoveMultipleEmailToMailboxInteractor(this._emailRepository);
Stream<Either<Failure, Success>> execute(AccountId accountId, MoveRequest moveRequest) async* {
Stream<Either<Failure, Success>> execute(AccountId accountId, MoveToMailboxRequest moveRequest) async* {
try {
final result = await _emailRepository.moveToMailbox(accountId, moveRequest);
@@ -22,19 +22,21 @@ class MoveMultipleEmailToMailboxInteractor {
moveRequest.currentMailboxId,
moveRequest.destinationMailboxId,
moveRequest.moveAction,
moveRequest.destinationPath));
moveRequest.emailActionType,
destinationPath: moveRequest.destinationPath));
} else if (result.isEmpty) {
yield Left(MoveMultipleEmailToMailboxAllFailure(moveRequest.moveAction));
yield Left(MoveMultipleEmailToMailboxAllFailure(moveRequest.moveAction, moveRequest.emailActionType));
} else {
yield Right(MoveMultipleEmailToMailboxHasSomeEmailFailure(
result,
moveRequest.currentMailboxId,
moveRequest.destinationMailboxId,
moveRequest.moveAction,
moveRequest.destinationPath));
moveRequest.emailActionType,
destinationPath: moveRequest.destinationPath));
}
} catch (e) {
yield Left(MoveMultipleEmailToMailboxFailure(e, moveRequest.moveAction));
yield Left(MoveMultipleEmailToMailboxFailure(e, moveRequest.emailActionType, moveRequest.moveAction));
}
}
}
@@ -1,38 +0,0 @@
import 'dart:async';
import 'package:core/core.dart';
import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:tmail_ui_user/features/email/domain/model/move_to_trash_request.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
import 'package:tmail_ui_user/features/thread/domain/state/move_multiple_email_to_trash_state.dart';
class MoveMultipleEmailToTrashInteractor {
final EmailRepository _emailRepository;
MoveMultipleEmailToTrashInteractor(this._emailRepository);
Stream<Either<Failure, Success>> execute(AccountId accountId, MoveToTrashRequest moveRequest) async* {
try {
final result = await _emailRepository.moveToTrash(accountId, moveRequest);
if (moveRequest.emailIds.length == result.length) {
yield Right(MoveMultipleEmailToTrashAllSuccess(
result,
moveRequest.currentMailboxId,
moveRequest.trashMailboxId,
moveRequest.moveAction));
} else if (result.isEmpty) {
yield Left(MoveMultipleEmailToTrashAllFailure(moveRequest.moveAction));
} else {
yield Right(MoveMultipleEmailToTrashHasSomeEmailFailure(
result,
moveRequest.currentMailboxId,
moveRequest.trashMailboxId,
moveRequest.moveAction));
}
} catch (e) {
yield Left(MoveMultipleEmailToTrashFailure(e, moveRequest.moveAction));
}
}
}