From 74f9f0492b5e786e6913355375d0c9a42485f326 Mon Sep 17 00:00:00 2001 From: dab246 Date: Tue, 16 Aug 2022 11:05:06 +0700 Subject: [PATCH] TF-838 Use `firstState` to update `RefreshChanges` mailbox and email --- .../presentation/mailbox_controller.dart | 85 +++++++++++-------- .../presentation/thread_controller.dart | 71 ++++++++++------ 2 files changed, 92 insertions(+), 64 deletions(-) diff --git a/lib/features/mailbox/presentation/mailbox_controller.dart b/lib/features/mailbox/presentation/mailbox_controller.dart index 6a5fcb450..963510eaa 100644 --- a/lib/features/mailbox/presentation/mailbox_controller.dart +++ b/lib/features/mailbox/presentation/mailbox_controller.dart @@ -8,7 +8,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/id.dart'; -import 'package:jmap_dart_client/jmap/core/state.dart' as jmap_state; +import 'package:jmap_dart_client/jmap/core/state.dart' as jmap; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:model/model.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart'; @@ -95,7 +95,7 @@ class MailboxController extends BaseMailboxController { final searchFocus = FocusNode(); final mailboxListScrollController = ScrollController(); - jmap_state.State? currentMailboxState; + jmap.State? _currentMailboxState; List listMailboxNameAsStringExist = []; late Worker accountIdWorker, viewStateWorker; @@ -144,11 +144,11 @@ class MailboxController extends BaseMailboxController { super.onData(newState); newState.map((success) async { if (success is GetAllMailboxSuccess) { - currentMailboxState = success.currentMailboxState; + _currentMailboxState = success.currentMailboxState; await buildTree(success.mailboxList); _setUpMapMailboxIdDefault(success.mailboxList, defaultMailboxTree.value, folderMailboxTree.value); } else if (success is RefreshChangesAllMailboxSuccess) { - currentMailboxState = success.currentMailboxState; + _currentMailboxState = success.currentMailboxState; await refreshTree(success.mailboxList); _setUpMapMailboxIdDefault(success.mailboxList, defaultMailboxTree.value, folderMailboxTree.value); } @@ -177,7 +177,7 @@ class MailboxController extends BaseMailboxController { } else if ((success is GetAllMailboxSuccess || success is RefreshChangesAllMailboxSuccess) && isSearchActive()) { _searchMailboxAction(allMailboxes, searchQuery.value); } else if (success is RenameMailboxSuccess) { - refreshMailboxChanges(); + refreshMailboxChanges(currentMailboxState: success.currentMailboxState); } else if (success is MoveMailboxSuccess) { _moveMailboxSuccess(success); } @@ -197,37 +197,46 @@ class MailboxController extends BaseMailboxController { viewStateWorker = ever(mailboxDashBoardController.viewState, (state) { if (state is Either) { - state.fold((failure) { - if (failure is EmptyTrashFolderFailure) { + state.fold((failure) => null, (success) { + if (success is MarkAsMultipleEmailReadAllSuccess) { mailboxDashBoardController.clearState(); - refreshMailboxChanges(); - } - }, (success) { - if (success is MarkAsMultipleEmailReadAllSuccess || - success is MarkAsMultipleEmailReadHasSomeEmailFailure) { + refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + } else if (success is MarkAsMultipleEmailReadHasSomeEmailFailure) { mailboxDashBoardController.clearState(); - refreshMailboxChanges(); - } else if (success is MoveMultipleEmailToMailboxAllSuccess || - success is MoveMultipleEmailToMailboxHasSomeEmailFailure) { + refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + } else if (success is MoveMultipleEmailToMailboxAllSuccess) { mailboxDashBoardController.clearState(); - refreshMailboxChanges(); - } else if (success is DeleteMultipleEmailsPermanentlyAllSuccess || - success is DeleteMultipleEmailsPermanentlyHasSomeEmailFailure) { + refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + } else if (success is MoveMultipleEmailToMailboxHasSomeEmailFailure) { mailboxDashBoardController.clearState(); - refreshMailboxChanges(); + refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + } else if (success is DeleteMultipleEmailsPermanentlyAllSuccess) { + mailboxDashBoardController.clearState(); + refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + } else if (success is DeleteMultipleEmailsPermanentlyHasSomeEmailFailure) { + mailboxDashBoardController.clearState(); + refreshMailboxChanges(currentMailboxState: success.currentMailboxState); } else if (success is EmptyTrashFolderSuccess) { mailboxDashBoardController.clearState(); - refreshMailboxChanges(); - } else if (success is MarkAsEmailReadSuccess || - success is MoveToMailboxSuccess || - success is DeleteEmailPermanentlySuccess || - success is SaveEmailAsDraftsSuccess || - success is RemoveEmailDraftsSuccess || - success is SendEmailSuccess || - success is MarkAsMailboxReadAllSuccess || - success is MarkAsMailboxReadHasSomeEmailFailure || - success is UpdateEmailDraftsSuccess) { - refreshMailboxChanges(); + refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + } else if (success is MarkAsEmailReadSuccess) { + refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + } else if (success is MoveToMailboxSuccess) { + refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + } else if (success is DeleteEmailPermanentlySuccess) { + refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + } else if (success is SaveEmailAsDraftsSuccess) { + refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + } else if (success is RemoveEmailDraftsSuccess) { + refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + } else if (success is SendEmailSuccess) { + refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + } else if (success is MarkAsMailboxReadAllSuccess) { + refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + } else if (success is MarkAsMailboxReadHasSomeEmailFailure) { + refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + } else if (success is UpdateEmailDraftsSuccess) { + refreshMailboxChanges(currentMailboxState: success.currentMailboxState); } }); } @@ -276,11 +285,13 @@ class MailboxController extends BaseMailboxController { } } - void refreshMailboxChanges() { - log('MailboxController::refreshMailboxChanges():'); + void refreshMailboxChanges({jmap.State? currentMailboxState}) { + log('MailboxController::refreshMailboxChanges(): currentMailboxState: $currentMailboxState'); + final newMailboxState = currentMailboxState ?? _currentMailboxState; + log('MailboxController::refreshMailboxChanges(): newMailboxState: $newMailboxState'); final accountId = mailboxDashBoardController.accountId.value; - if (accountId != null && currentMailboxState != null) { - consumeState(_refreshAllMailboxInteractor.execute(accountId, currentMailboxState!)); + if (accountId != null && newMailboxState != null) { + consumeState(_refreshAllMailboxInteractor.execute(accountId, newMailboxState)); } } @@ -387,7 +398,7 @@ class MailboxController extends BaseMailboxController { icon: _imagePaths.icFolderMailbox); } - refreshMailboxChanges(); + refreshMailboxChanges(currentMailboxState: success.currentMailboxState); } void _createNewMailboxFailure(CreateNewMailboxFailure failure) { @@ -581,7 +592,7 @@ class MailboxController extends BaseMailboxController { if (success.mailboxIdDeleted == mailboxDashBoardController.selectedMailbox.value?.id) { _switchBackToMailboxDefault(); } - refreshMailboxChanges(); + refreshMailboxChanges(currentMailboxState: success.currentMailboxState); } void _switchBackToMailboxDefault() { @@ -750,7 +761,7 @@ class MailboxController extends BaseMailboxController { maxWidth: _responsiveUtils.getMaxWidthToast(currentContext!)); } - refreshMailboxChanges(); + refreshMailboxChanges(currentMailboxState: success.currentMailboxState); } void _undoMovingMailbox(MoveMailboxRequest newMoveRequest) { diff --git a/lib/features/thread/presentation/thread_controller.dart b/lib/features/thread/presentation/thread_controller.dart index 6d825fc18..9e15adce4 100644 --- a/lib/features/thread/presentation/thread_controller.dart +++ b/lib/features/thread/presentation/thread_controller.dart @@ -196,8 +196,6 @@ class ThreadController extends BaseController { } else if (failure is MarkAsStarMultipleEmailAllFailure || failure is MarkAsStarMultipleEmailFailure) { _markAsStarMultipleEmailFailure(failure); - } else if (failure is EmptyTrashFolderFailure) { - _emptyTrashFolderFailure(failure); } else if (failure is LoadMoreEmailsFailure) { stopFpsMeter(); } @@ -291,17 +289,26 @@ class ThreadController extends BaseController { if (success is SearchEmailNewQuery){ mailboxDashBoardController.clearState(); _searchEmail(); - } else if (success is MarkAsEmailReadSuccess - || success is MoveToMailboxSuccess - || success is MarkAsStarEmailSuccess - || success is DeleteEmailPermanentlySuccess - || success is SaveEmailAsDraftsSuccess - || success is RemoveEmailDraftsSuccess - || success is SendEmailSuccess - || success is MarkAsMailboxReadAllSuccess - || success is MarkAsMailboxReadHasSomeEmailFailure - || success is UpdateEmailDraftsSuccess) { - _refreshEmailChanges(); + } else if (success is MarkAsEmailReadSuccess) { + _refreshEmailChanges(currentEmailState: success.currentEmailState); + } else if (success is MoveToMailboxSuccess) { + _refreshEmailChanges(currentEmailState: success.currentEmailState); + } else if (success is MarkAsStarEmailSuccess) { + _refreshEmailChanges(currentEmailState: success.currentEmailState); + } else if (success is DeleteEmailPermanentlySuccess) { + _refreshEmailChanges(currentEmailState: success.currentEmailState); + } else if (success is SaveEmailAsDraftsSuccess) { + _refreshEmailChanges(currentEmailState: success.currentEmailState); + } else if (success is RemoveEmailDraftsSuccess) { + _refreshEmailChanges(currentEmailState: success.currentEmailState); + } else if (success is SendEmailSuccess) { + _refreshEmailChanges(currentEmailState: success.currentEmailState); + } else if (success is UpdateEmailDraftsSuccess) { + _refreshEmailChanges(currentEmailState: success.currentEmailState); + } else if (success is MarkAsMailboxReadAllSuccess) { + _refreshEmailChanges(currentEmailState: success.currentEmailState); + } else if (success is MarkAsMailboxReadHasSomeEmailFailure) { + _refreshEmailChanges(currentEmailState: success.currentEmailState); } }); } @@ -405,7 +412,8 @@ class ThreadController extends BaseController { } } - void _refreshEmailChanges() { + void _refreshEmailChanges({jmap.State? currentEmailState}) { + log('ThreadController::_refreshEmailChanges(): currentEmailState: $currentEmailState'); if (isSearchActive()) { if (_accountId != null && searchQuery != null) { final limit = emailList.isNotEmpty @@ -414,10 +422,12 @@ class ThreadController extends BaseController { _searchEmail(limit: limit); } } else { - if (_accountId != null && _currentEmailState != null) { + final newEmailState = currentEmailState ?? _currentEmailState; + log('ThreadController::_refreshEmailChanges(): newEmailState: $newEmailState'); + if (_accountId != null && newEmailState != null) { consumeState(_refreshChangesEmailsInMailboxInteractor.execute( _accountId!, - _currentEmailState!, + newEmailState, sort: _sortOrder, propertiesCreated: ThreadConstants.propertiesDefault, propertiesUpdated: ThreadConstants.propertiesUpdatedDefault, @@ -517,11 +527,14 @@ class ThreadController extends BaseController { mailboxDashBoardController.dispatchState(Right(success)); ReadActions? readActions; + jmap.State? currentEmailState; if (success is MarkAsMultipleEmailReadAllSuccess) { readActions = success.readActions; + currentEmailState = success.currentEmailState; } else if (success is MarkAsMultipleEmailReadHasSomeEmailFailure) { readActions = success.readActions; + currentEmailState = success.currentEmailState; } if (currentContext != null && readActions != null && currentOverlayContext != null) { @@ -533,7 +546,7 @@ class ThreadController extends BaseController { message: message, icon: readActions == ReadActions.markAsUnread ? _imagePaths.icUnreadToast : _imagePaths.icReadToast); } - _refreshEmailChanges(); + _refreshEmailChanges(currentEmailState: currentEmailState); } void _markAsReadSelectedMultipleEmailFailure(Failure failure) { @@ -635,6 +648,7 @@ class ThreadController extends BaseController { MailboxId? destinationMailboxId; MoveAction? moveAction; EmailActionType? emailActionType; + jmap.State? currentEmailState; if (success is MoveMultipleEmailToMailboxAllSuccess) { destinationPath = success.destinationPath; @@ -643,6 +657,7 @@ class ThreadController extends BaseController { destinationMailboxId = success.destinationMailboxId; moveAction = success.moveAction; emailActionType = success.emailActionType; + currentEmailState = success.currentEmailState; } else if (success is MoveMultipleEmailToMailboxHasSomeEmailFailure) { destinationPath = success.destinationPath; movedEmailIds = success.movedListEmailId; @@ -650,6 +665,7 @@ class ThreadController extends BaseController { destinationMailboxId = success.destinationMailboxId; moveAction = success.moveAction; emailActionType = success.emailActionType; + currentEmailState = success.currentEmailState; } if (currentContext != null && currentOverlayContext != null @@ -674,7 +690,7 @@ class ThreadController extends BaseController { ); } - _refreshEmailChanges(); + _refreshEmailChanges(currentEmailState: currentEmailState); } void moveSelectedMultipleEmailToTrash(List listEmail) async { @@ -757,8 +773,8 @@ class ThreadController extends BaseController { } } - void _markAsStarEmailSuccess(Success success) { - _refreshEmailChanges(); + void _markAsStarEmailSuccess(MarkAsStarEmailSuccess success) { + _refreshEmailChanges(currentEmailState: success.currentEmailState); } void markAsStarSelectedMultipleEmail(List listPresentationEmail) { @@ -773,13 +789,16 @@ class ThreadController extends BaseController { void _markAsStarMultipleEmailSuccess(Success success) { MarkStarAction? markStarAction; int countMarkStarSuccess = 0; + jmap.State? currentEmailState; if (success is MarkAsStarMultipleEmailAllSuccess) { markStarAction = success.markStarAction; countMarkStarSuccess = success.countMarkStarSuccess; + currentEmailState = success.currentEmailState; } else if (success is MarkAsStarMultipleEmailHasSomeEmailFailure) { markStarAction = success.markStarAction; countMarkStarSuccess = success.countMarkStarSuccess; + currentEmailState = success.currentEmailState; } if (currentContext != null && markStarAction != null && currentOverlayContext != null) { @@ -792,7 +811,7 @@ class ThreadController extends BaseController { icon: markStarAction == MarkStarAction.unMarkStar ? _imagePaths.icUnStar : _imagePaths.icStar); } - _refreshEmailChanges(); + _refreshEmailChanges(currentEmailState: currentEmailState); } void _markAsStarMultipleEmailFailure(Failure failure) { @@ -1176,11 +1195,14 @@ class ThreadController extends BaseController { void _deleteMultipleEmailsPermanentlySuccess(Success success) { mailboxDashBoardController.dispatchState(Right(success)); + jmap.State? currentEmailState; List listEmailIdResult = []; if (success is DeleteMultipleEmailsPermanentlyAllSuccess) { listEmailIdResult = success.emailIds; + currentEmailState = success.currentEmailState; } else if (success is DeleteMultipleEmailsPermanentlyHasSomeEmailFailure) { listEmailIdResult = success.emailIds; + currentEmailState = success.currentEmailState; } if (currentContext != null && currentOverlayContext != null && listEmailIdResult.isNotEmpty) { @@ -1191,7 +1213,7 @@ class ThreadController extends BaseController { icon: _imagePaths.icDeleteToast); } - _refreshEmailChanges(); + _refreshEmailChanges(currentEmailState: currentEmailState); } void _emptyTrashFolderAction() { @@ -1218,11 +1240,6 @@ class ThreadController extends BaseController { refreshAllEmail(); } - void _emptyTrashFolderFailure(EmptyTrashFolderFailure failure) { - mailboxDashBoardController.dispatchState(Left(failure)); - refreshAllEmail(); - } - void selectQuickSearchFilter(QuickSearchFilter filter) { mailboxDashBoardController.selectQuickSearchFilter( quickSearchFilter: filter,