TF-3385 Fix loading forever when empty <20 items mailbox
This commit is contained in:
+13
-3
@@ -1,15 +1,16 @@
|
||||
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
import 'package:model/email/presentation_email.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_action.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
||||
|
||||
extension MoveEmailsToMailboxExtension on MailboxDashBoardController {
|
||||
void handleMoveEmailsToMailbox({
|
||||
required Map<MailboxId,List<EmailId>> originalMailboxIdsWithEmailIds,
|
||||
required MailboxId destinationMailboxId,
|
||||
required MoveAction moveAction,
|
||||
}) {
|
||||
if (destinationMailboxId == selectedMailbox.value?.id) return;
|
||||
|
||||
final currentEmails = List<PresentationEmail>.from(
|
||||
emailsInCurrentMailbox,
|
||||
);
|
||||
@@ -23,9 +24,18 @@ extension MoveEmailsToMailboxExtension on MailboxDashBoardController {
|
||||
final currentEmailsToBeMoved = currentEmails
|
||||
.where((email) => movedEmailIds.contains(email.id))
|
||||
.toList();
|
||||
if (currentEmailsToBeMoved.isNotEmpty && destinationMailboxId != selectedMailbox.value?.id) {
|
||||
if (currentEmailsToBeMoved.isNotEmpty) {
|
||||
currentEmails.removeWhere(currentEmailsToBeMoved.contains);
|
||||
updateEmailList(currentEmails);
|
||||
}
|
||||
final currentMailbox = selectedMailbox.value;
|
||||
final currentTotalEmails = currentMailbox?.totalEmails;
|
||||
if (currentMailbox != null && currentTotalEmails != null) {
|
||||
int newTotalEmails = currentTotalEmails.value.value.toInt() - movedEmailIds.length;
|
||||
if (newTotalEmails < 0) newTotalEmails = 0;
|
||||
selectedMailbox.value = currentMailbox.copyWith(
|
||||
totalEmails: TotalEmails(UnsignedInt(newTotalEmails)),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -356,32 +356,38 @@ class ThreadController extends BaseController with EmailActionController {
|
||||
mailboxDashBoardController.handleMoveEmailsToMailbox(
|
||||
originalMailboxIdsWithEmailIds: reactionState.originalMailboxIdsWithEmailIds,
|
||||
destinationMailboxId: reactionState.destinationMailboxId,
|
||||
moveAction: reactionState.moveAction,
|
||||
);
|
||||
_checkIfCurrentMailboxCanLoadMore();
|
||||
} else if (reactionState is MoveMultipleEmailToMailboxAllSuccess) {
|
||||
mailboxDashBoardController.handleMoveEmailsToMailbox(
|
||||
originalMailboxIdsWithEmailIds: reactionState.originalMailboxIdsWithEmailIds,
|
||||
destinationMailboxId: reactionState.destinationMailboxId,
|
||||
moveAction: reactionState.moveAction,
|
||||
);
|
||||
_checkIfCurrentMailboxCanLoadMore();
|
||||
} else if (reactionState is MoveMultipleEmailToMailboxHasSomeEmailFailure) {
|
||||
mailboxDashBoardController.handleMoveEmailsToMailbox(
|
||||
originalMailboxIdsWithEmailIds: reactionState.originalMailboxIdsWithMoveSucceededEmailIds,
|
||||
destinationMailboxId: reactionState.destinationMailboxId,
|
||||
moveAction: reactionState.moveAction,
|
||||
);
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
_checkIfCurrentMailboxCanLoadMore();
|
||||
});
|
||||
} else if (reactionState is DeleteEmailPermanentlySuccess
|
||||
|| reactionState is DeleteMultipleEmailsPermanentlyAllSuccess
|
||||
|| reactionState is DeleteMultipleEmailsPermanentlyHasSomeEmailFailure
|
||||
) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
_checkIfCurrentMailboxCanLoadMore();
|
||||
});
|
||||
_checkIfCurrentMailboxCanLoadMore();
|
||||
} else if (reactionState is DeleteEmailPermanentlySuccess) {
|
||||
_handleDeleteEmailsPermanentlyFromMailboxId(
|
||||
reactionState.mailboxId,
|
||||
deletedEmailsCount: 1,
|
||||
);
|
||||
_checkIfCurrentMailboxCanLoadMore();
|
||||
} else if (reactionState is DeleteMultipleEmailsPermanentlyAllSuccess) {
|
||||
_handleDeleteEmailsPermanentlyFromMailboxId(
|
||||
reactionState.mailboxId,
|
||||
deletedEmailsCount: reactionState.emailIds.length,
|
||||
);
|
||||
_checkIfCurrentMailboxCanLoadMore();
|
||||
} else if (reactionState is DeleteMultipleEmailsPermanentlyHasSomeEmailFailure) {
|
||||
_handleDeleteEmailsPermanentlyFromMailboxId(
|
||||
reactionState.mailboxId,
|
||||
deletedEmailsCount: reactionState.emailIds.length,
|
||||
);
|
||||
_checkIfCurrentMailboxCanLoadMore();
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -397,6 +403,22 @@ class ThreadController extends BaseController with EmailActionController {
|
||||
mailboxDashBoardController.emailsInCurrentMailbox.refresh();
|
||||
}
|
||||
|
||||
void _handleDeleteEmailsPermanentlyFromMailboxId(
|
||||
MailboxId? mailboxId, {
|
||||
required int deletedEmailsCount,
|
||||
}) {
|
||||
if (mailboxDashBoardController.selectedMailbox.value?.id != mailboxId) return;
|
||||
final currentMailbox = mailboxDashBoardController.selectedMailbox.value;
|
||||
final currentTotalEmails = currentMailbox?.totalEmails;
|
||||
if (currentMailbox != null && currentTotalEmails != null) {
|
||||
int newTotalEmails = currentTotalEmails.value.value.toInt() - deletedEmailsCount;
|
||||
if (newTotalEmails < 0) newTotalEmails = 0;
|
||||
mailboxDashBoardController.selectedMailbox.value = currentMailbox.copyWith(
|
||||
totalEmails: TotalEmails(UnsignedInt(newTotalEmails)),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void _checkIfCurrentMailboxCanLoadMore() {
|
||||
final currentMailbox = mailboxDashBoardController.selectedMailbox.value;
|
||||
if (currentMailbox == null) return;
|
||||
|
||||
Reference in New Issue
Block a user