TF-3385 Update move emails
This commit is contained in:
@@ -14,6 +14,8 @@ class MoveMultipleEmailToMailboxAllSuccess extends UIState {
|
||||
final MoveAction moveAction;
|
||||
final EmailActionType emailActionType;
|
||||
final String? destinationPath;
|
||||
final Map<MailboxId,List<EmailId>> originalMailboxIdsWithEmailIds;
|
||||
final Map<EmailId, bool> emailIdsWithReadStatus;
|
||||
|
||||
MoveMultipleEmailToMailboxAllSuccess(
|
||||
this.movedListEmailId,
|
||||
@@ -23,6 +25,8 @@ class MoveMultipleEmailToMailboxAllSuccess extends UIState {
|
||||
this.emailActionType,
|
||||
{
|
||||
this.destinationPath,
|
||||
required this.originalMailboxIdsWithEmailIds,
|
||||
required this.emailIdsWithReadStatus,
|
||||
}
|
||||
);
|
||||
|
||||
@@ -34,6 +38,8 @@ class MoveMultipleEmailToMailboxAllSuccess extends UIState {
|
||||
moveAction,
|
||||
emailActionType,
|
||||
destinationPath,
|
||||
originalMailboxIdsWithEmailIds,
|
||||
emailIdsWithReadStatus,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -54,6 +60,8 @@ class MoveMultipleEmailToMailboxHasSomeEmailFailure extends UIState {
|
||||
final MoveAction moveAction;
|
||||
final EmailActionType emailActionType;
|
||||
final String? destinationPath;
|
||||
final Map<MailboxId,List<EmailId>> originalMailboxIdsWithMoveSucceededEmailIds;
|
||||
final Map<EmailId, bool> moveSucceededEmailIdsWithReadStatus;
|
||||
|
||||
MoveMultipleEmailToMailboxHasSomeEmailFailure(
|
||||
this.movedListEmailId,
|
||||
@@ -63,6 +71,8 @@ class MoveMultipleEmailToMailboxHasSomeEmailFailure extends UIState {
|
||||
this.emailActionType,
|
||||
{
|
||||
this.destinationPath,
|
||||
required this.originalMailboxIdsWithMoveSucceededEmailIds,
|
||||
required this.moveSucceededEmailIdsWithReadStatus,
|
||||
}
|
||||
);
|
||||
|
||||
@@ -74,6 +84,8 @@ class MoveMultipleEmailToMailboxHasSomeEmailFailure extends UIState {
|
||||
moveAction,
|
||||
emailActionType,
|
||||
destinationPath,
|
||||
originalMailboxIdsWithMoveSucceededEmailIds,
|
||||
moveSucceededEmailIdsWithReadStatus,
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:core/presentation/extensions/map_extensions.dart';
|
||||
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/email/email.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.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';
|
||||
@@ -17,7 +20,8 @@ class MoveMultipleEmailToMailboxInteractor {
|
||||
Stream<Either<Failure, Success>> execute(
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
MoveToMailboxRequest moveRequest
|
||||
MoveToMailboxRequest moveRequest,
|
||||
Map<EmailId, bool> emailIdsWithReadStatus,
|
||||
) async* {
|
||||
try {
|
||||
yield Right(LoadingMoveMultipleEmailToMailboxAll());
|
||||
@@ -30,10 +34,22 @@ class MoveMultipleEmailToMailboxInteractor {
|
||||
moveRequest.moveAction,
|
||||
moveRequest.emailActionType,
|
||||
destinationPath: moveRequest.destinationPath,
|
||||
originalMailboxIdsWithEmailIds: moveRequest.currentMailboxes,
|
||||
emailIdsWithReadStatus: emailIdsWithReadStatus,
|
||||
));
|
||||
} else if (result.emailIdsSuccess.isEmpty) {
|
||||
yield Left(MoveMultipleEmailToMailboxAllFailure(moveRequest.moveAction, moveRequest.emailActionType));
|
||||
} else {
|
||||
final originalMailboxIdsWithEmailIds = Map<MailboxId, List<EmailId>>.from(
|
||||
moveRequest.currentMailboxes,
|
||||
);
|
||||
final originalMailboxIdsWithMoveSucceededEmailIds = originalMailboxIdsWithEmailIds
|
||||
.map((key, value) => MapEntry(
|
||||
key,
|
||||
value.where(result.emailIdsSuccess.contains).toList()
|
||||
));
|
||||
final moveSucceededEmailIdsWithReadStatus = emailIdsWithReadStatus
|
||||
.where((emailId, _) => result.emailIdsSuccess.contains(emailId));
|
||||
yield Right(MoveMultipleEmailToMailboxHasSomeEmailFailure(
|
||||
result.emailIdsSuccess,
|
||||
moveRequest.currentMailboxes.keys.first,
|
||||
@@ -41,6 +57,8 @@ class MoveMultipleEmailToMailboxInteractor {
|
||||
moveRequest.moveAction,
|
||||
moveRequest.emailActionType,
|
||||
destinationPath: moveRequest.destinationPath,
|
||||
originalMailboxIdsWithMoveSucceededEmailIds: originalMailboxIdsWithMoveSucceededEmailIds,
|
||||
moveSucceededEmailIdsWithReadStatus: moveSucceededEmailIdsWithReadStatus,
|
||||
));
|
||||
}
|
||||
} catch (e) {
|
||||
|
||||
@@ -11,6 +11,7 @@ import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:get/get.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/email/email.dart';
|
||||
import 'package:model/email/email_action_type.dart';
|
||||
import 'package:model/email/mark_star_action.dart';
|
||||
import 'package:model/email/presentation_email.dart';
|
||||
@@ -60,13 +61,24 @@ mixin EmailActionController {
|
||||
{mailboxContain.id: email.id != null ? [email.id!] : []},
|
||||
trashMailboxId,
|
||||
MoveAction.moving,
|
||||
EmailActionType.moveToTrash)
|
||||
EmailActionType.moveToTrash),
|
||||
email.id != null ? {email.id! : email.hasRead} : {},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void _moveToTrashAction(Session session, AccountId accountId, MoveToMailboxRequest moveRequest) {
|
||||
mailboxDashBoardController.moveToMailbox(session, accountId, moveRequest);
|
||||
void _moveToTrashAction(
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
MoveToMailboxRequest moveRequest,
|
||||
Map<EmailId, bool> emailIdsWithReadStatus,
|
||||
) {
|
||||
mailboxDashBoardController.moveToMailbox(
|
||||
session,
|
||||
accountId,
|
||||
moveRequest,
|
||||
emailIdsWithReadStatus,
|
||||
);
|
||||
}
|
||||
|
||||
void moveToSpam(PresentationEmail email, {PresentationMailbox? mailboxContain}) async {
|
||||
@@ -82,7 +94,8 @@ mixin EmailActionController {
|
||||
{mailboxContain.id: email.id != null ? [email.id!] : []},
|
||||
spamMailboxId,
|
||||
MoveAction.moving,
|
||||
EmailActionType.moveToSpam)
|
||||
EmailActionType.moveToSpam),
|
||||
email.id != null ? {email.id! : email.hasRead} : {},
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -101,13 +114,24 @@ mixin EmailActionController {
|
||||
{spamMailboxId: email.id != null ? [email.id!] : []},
|
||||
inboxMailboxId,
|
||||
MoveAction.moving,
|
||||
EmailActionType.unSpam)
|
||||
EmailActionType.unSpam),
|
||||
email.id != null ? {email.id! : email.hasRead} : {},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void moveToSpamAction(Session session, AccountId accountId, MoveToMailboxRequest moveRequest) {
|
||||
mailboxDashBoardController.moveToMailbox(session, accountId, moveRequest);
|
||||
void moveToSpamAction(
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
MoveToMailboxRequest moveRequest,
|
||||
Map<EmailId, bool> emailIdsWithReadStatus,
|
||||
) {
|
||||
mailboxDashBoardController.moveToMailbox(
|
||||
session,
|
||||
accountId,
|
||||
moveRequest,
|
||||
emailIdsWithReadStatus,
|
||||
);
|
||||
}
|
||||
|
||||
void moveToMailbox(
|
||||
@@ -157,7 +181,8 @@ mixin EmailActionController {
|
||||
{currentMailbox.id: emailSelected.id != null ? [emailSelected.id!] : []},
|
||||
destinationMailbox.id,
|
||||
MoveAction.moving,
|
||||
EmailActionType.moveToTrash));
|
||||
EmailActionType.moveToTrash),
|
||||
emailSelected.id != null ? {emailSelected.id! : emailSelected.hasRead} : {});
|
||||
} else if (destinationMailbox.isSpam) {
|
||||
moveToSpamAction(
|
||||
session,
|
||||
@@ -166,7 +191,8 @@ mixin EmailActionController {
|
||||
{currentMailbox.id: emailSelected.id != null ? [emailSelected.id!] : []},
|
||||
destinationMailbox.id,
|
||||
MoveAction.moving,
|
||||
EmailActionType.moveToSpam));
|
||||
EmailActionType.moveToSpam),
|
||||
emailSelected.id != null ? {emailSelected.id! : emailSelected.hasRead} : {});
|
||||
} else {
|
||||
_moveToMailboxAction(
|
||||
session,
|
||||
@@ -176,12 +202,23 @@ mixin EmailActionController {
|
||||
destinationMailbox.id,
|
||||
MoveAction.moving,
|
||||
EmailActionType.moveToMailbox,
|
||||
destinationPath: destinationMailbox.mailboxPath));
|
||||
destinationPath: destinationMailbox.mailboxPath),
|
||||
emailSelected.id != null ? {emailSelected.id! : emailSelected.hasRead} : {});
|
||||
}
|
||||
}
|
||||
|
||||
void _moveToMailboxAction(Session session, AccountId accountId, MoveToMailboxRequest moveRequest) {
|
||||
mailboxDashBoardController.moveToMailbox(session, accountId, moveRequest);
|
||||
void _moveToMailboxAction(
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
MoveToMailboxRequest moveRequest,
|
||||
Map<EmailId, bool> emailIdsWithReadStatus,
|
||||
) {
|
||||
mailboxDashBoardController.moveToMailbox(
|
||||
session,
|
||||
accountId,
|
||||
moveRequest,
|
||||
emailIdsWithReadStatus,
|
||||
);
|
||||
}
|
||||
|
||||
void deleteEmailPermanently(BuildContext context, PresentationEmail email) {
|
||||
|
||||
@@ -24,6 +24,7 @@ import 'package:tmail_ui_user/features/email/domain/state/delete_email_permanent
|
||||
import 'package:tmail_ui_user/features/email/domain/state/delete_multiple_emails_permanently_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_read_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_star_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/move_to_mailbox_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/utils/email_utils.dart';
|
||||
import 'package:tmail_ui_user/features/home/data/exceptions/session_exceptions.dart';
|
||||
@@ -31,6 +32,7 @@ import 'package:tmail_ui_user/features/mailbox/domain/state/mark_as_mailbox_read
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart' as search;
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/delete_emails_in_mailbox_extension.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/move_emails_to_mailbox_extension.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/update_current_emails_flags_extension.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_sort_order_type.dart';
|
||||
@@ -56,6 +58,7 @@ import 'package:tmail_ui_user/features/thread/domain/state/get_email_by_id_state
|
||||
import 'package:tmail_ui_user/features/thread/domain/state/load_more_emails_state.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/state/mark_as_multiple_email_read_state.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/state/mark_as_star_multiple_email_state.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/state/move_multiple_email_to_mailbox_state.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/state/refresh_all_email_state.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/state/refresh_changes_all_email_state.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/state/search_email_state.dart';
|
||||
@@ -407,6 +410,21 @@ class ThreadController extends BaseController with EmailActionController {
|
||||
emailIds: reactionState.emailIds,
|
||||
affectedMailboxId: reactionState.mailboxId,
|
||||
);
|
||||
} else if (reactionState is MoveToMailboxSuccess) {
|
||||
mailboxDashBoardController.handleMoveEmailsToMailbox(
|
||||
originalMailboxIdsWithEmailIds: reactionState.originalMailboxIdsWithEmailIds,
|
||||
destinationMailboxId: reactionState.destinationMailboxId,
|
||||
);
|
||||
} else if (reactionState is MoveMultipleEmailToMailboxAllSuccess) {
|
||||
mailboxDashBoardController.handleMoveEmailsToMailbox(
|
||||
originalMailboxIdsWithEmailIds: reactionState.originalMailboxIdsWithEmailIds,
|
||||
destinationMailboxId: reactionState.destinationMailboxId,
|
||||
);
|
||||
} else if (reactionState is MoveMultipleEmailToMailboxHasSomeEmailFailure) {
|
||||
mailboxDashBoardController.handleMoveEmailsToMailbox(
|
||||
originalMailboxIdsWithEmailIds: reactionState.originalMailboxIdsWithMoveSucceededEmailIds,
|
||||
destinationMailboxId: reactionState.destinationMailboxId,
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user