From 75231636e2accabf9d10100ca76707e89e06ff1b Mon Sep 17 00:00:00 2001 From: dab246 Date: Wed, 18 Dec 2024 14:01:10 +0700 Subject: [PATCH] TF-3334 Auto resynchronisation mailbox search view when receives websocket notification --- .../presentation/mailbox_controller.dart | 1 - .../search_mailbox_controller.dart | 166 +++++++++--------- 2 files changed, 79 insertions(+), 88 deletions(-) diff --git a/lib/features/mailbox/presentation/mailbox_controller.dart b/lib/features/mailbox/presentation/mailbox_controller.dart index 4458c50ee..d6ac44031 100644 --- a/lib/features/mailbox/presentation/mailbox_controller.dart +++ b/lib/features/mailbox/presentation/mailbox_controller.dart @@ -239,7 +239,6 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM mailboxDashBoardController.clearMailboxUIAction(); } else if (action is RefreshChangeMailboxAction) { _refreshMailboxChanges(newState: action.newState); - mailboxDashBoardController.clearMailboxUIAction(); } else if (action is OpenMailboxAction) { if (currentContext != null) { _handleOpenMailbox(currentContext!, action.presentationMailbox); diff --git a/lib/features/search/mailbox/presentation/search_mailbox_controller.dart b/lib/features/search/mailbox/presentation/search_mailbox_controller.dart index 917658366..3447b9ff5 100644 --- a/lib/features/search/mailbox/presentation/search_mailbox_controller.dart +++ b/lib/features/search/mailbox/presentation/search_mailbox_controller.dart @@ -11,7 +11,6 @@ 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/error/method/error_method_response.dart'; -import 'package:jmap_dart_client/jmap/core/properties/properties.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/state.dart' as jmap; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; @@ -34,7 +33,6 @@ import 'package:tmail_ui_user/features/mailbox/domain/model/subscribe_request.da import 'package:tmail_ui_user/features/mailbox/domain/state/create_new_mailbox_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/delete_multiple_mailbox_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/get_all_mailboxes_state.dart'; -import 'package:tmail_ui_user/features/mailbox/domain/state/mark_as_mailbox_read_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/move_mailbox_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/refresh_changes_all_mailboxes_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/rename_mailbox_state.dart'; @@ -88,6 +86,10 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa PresentationEmail? get selectedEmail => dashboardController.selectedEmail.value; + AccountId? get accountId => dashboardController.accountId.value; + + Session? get session => dashboardController.sessionCurrent; + SearchMailboxController( this._searchMailboxInteractor, this._renameMailboxInteractor, @@ -111,6 +113,7 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa void onInit() { super.onInit(); _initializeDebounceTimeTextSearchChange(); + _registerObxStreamListener(); _getAllMailboxAction(); } @@ -144,15 +147,6 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa searchMailboxAction(); } else if (success is SearchMailboxSuccess) { _handleSearchMailboxSuccess(success); - } else if (success is MarkAsMailboxReadAllSuccess) { - _refreshMailboxChanges(mailboxState: success.currentMailboxState); - } else if (success is MarkAsMailboxReadHasSomeEmailFailure) { - _refreshMailboxChanges(mailboxState: success.currentMailboxState); - } else if (success is RenameMailboxSuccess) { - _refreshMailboxChanges( - mailboxState: success.currentMailboxState, - properties: MailboxConstants.propertiesDefault - ); } else if (success is MoveMailboxSuccess) { _moveMailboxSuccess(success); } else if (success is DeleteMultipleMailboxAllSuccess) { @@ -183,27 +177,34 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa }); } + void _registerObxStreamListener() { + ever(dashboardController.mailboxUIAction, (action) { + if (action is RefreshChangeMailboxAction) { + _refreshMailboxChanges(newState: action.newState); + } + }); + } + void _getAllMailboxAction() { - final session = dashboardController.sessionCurrent; - final accountId = dashboardController.accountId.value; if (session != null && accountId != null) { - getAllMailbox(session, accountId); + getAllMailbox(session!, accountId!); } } - void _refreshMailboxChanges({jmap.State? mailboxState, Properties? properties}) { - dashboardController.dispatchMailboxUIAction(RefreshChangeMailboxAction(null)); - final newMailboxState = mailboxState ?? currentMailboxState; - final accountId = dashboardController.accountId.value; - final session = dashboardController.sessionCurrent; - if (session != null && accountId != null && newMailboxState != null) { - refreshMailboxChanges( - session, - accountId, - newMailboxState, - properties: properties - ); + void _refreshMailboxChanges({jmap.State? newState}) { + if (accountId == null || + session == null || + currentMailboxState == null || + newState == currentMailboxState) { + return; } + + refreshMailboxChanges( + session!, + accountId!, + currentMailboxState!, + properties: MailboxConstants.propertiesDefault, + ); } void searchMailboxAction() { @@ -328,13 +329,11 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa } void _renameMailboxAction(PresentationMailbox presentationMailbox, MailboxName newMailboxName) { - final accountId = dashboardController.accountId.value; - final session = dashboardController.sessionCurrent; if (session != null && accountId != null) { consumeState(_renameMailboxInteractor.execute( - session, - accountId, - RenameMailboxRequest(presentationMailbox.id, newMailboxName) + session!, + accountId!, + RenameMailboxRequest(presentationMailbox.id, newMailboxName), )); } } @@ -344,13 +343,11 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa PresentationMailbox mailboxSelected, PresentationMailbox? destinationMailbox ) { - final accountId = dashboardController.accountId.value; - final session = dashboardController.sessionCurrent; if (session != null && accountId != null) { _handleMovingMailbox( context, - session, - accountId, + session!, + accountId!, MoveAction.moving, mailboxSelected, destinationMailbox: destinationMailbox @@ -400,25 +397,19 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa actionIcon: SvgPicture.asset(imagePaths.icUndo) ); } - - _refreshMailboxChanges( - mailboxState: success.currentMailboxState, - properties: MailboxConstants.propertiesDefault - ); } void _undoMovingMailbox(MoveMailboxRequest newMoveRequest) { - final accountId = dashboardController.accountId.value; - final session = dashboardController.sessionCurrent; if (session != null && accountId != null) { - consumeState(_moveMailboxInteractor.execute(session, accountId, newMoveRequest)); + consumeState(_moveMailboxInteractor.execute( + session!, + accountId!, + newMoveRequest, + )); } } void _deleteMailboxAction(PresentationMailbox presentationMailbox) { - final accountId = dashboardController.accountId.value; - final session = dashboardController.sessionCurrent; - if (session != null && accountId != null) { final tupleMap = MailboxUtils.generateMapDescendantIdsAndMailboxIdList( [presentationMailbox], @@ -429,8 +420,8 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa final listMailboxId = tupleMap.value2; consumeState(_deleteMultipleMailboxInteractor.execute( - session, - accountId, + session!, + accountId!, mapDescendantIds, listMailboxId )); @@ -452,8 +443,6 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa dashboardController.selectedMailbox.value = null; dashboardController.dispatchMailboxUIAction(SelectMailboxDefaultAction()); } - - _refreshMailboxChanges(mailboxState: currentMailboxState); } void _deleteMailboxFailure(DeleteMultipleMailboxFailure failure) { @@ -469,16 +458,21 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa MailboxSubscribeState subscribeState, MailboxSubscribeAction subscribeAction ) { - final accountId = dashboardController.accountId.value; - final session = dashboardController.sessionCurrent; - if (session != null && accountId != null) { final subscribeRequest = generateSubscribeRequest(mailboxId, subscribeState, subscribeAction); if (subscribeRequest is SubscribeMultipleMailboxRequest) { - consumeState(_subscribeMultipleMailboxInteractor.execute(session, accountId, subscribeRequest)); + consumeState(_subscribeMultipleMailboxInteractor.execute( + session!, + accountId!, + subscribeRequest, + )); } else if (subscribeRequest is SubscribeMailboxRequest) { - consumeState(_subscribeMailboxInteractor.execute(session, accountId, subscribeRequest)); + consumeState(_subscribeMailboxInteractor.execute( + session!, + accountId!, + subscribeRequest, + )); } } } @@ -502,11 +496,6 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa _closeEmailViewIfMailboxDisabledOrNotExist([success.mailboxId]); } } - - _refreshMailboxChanges( - mailboxState: success.currentMailboxState, - properties: MailboxConstants.propertiesDefault - ); } void _handleSubscribeMultipleMailboxAllSuccess(SubscribeMultipleMailboxAllSuccess success) { @@ -523,11 +512,6 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa _closeEmailViewIfMailboxDisabledOrNotExist(success.mailboxIdsSubscribe); } } - - _refreshMailboxChanges( - mailboxState: success.currentMailboxState, - properties: MailboxConstants.propertiesDefault - ); } void _handleSubscribeMultipleMailboxHasSomeSuccess(SubscribeMultipleMailboxHasSomeSuccess success) { @@ -544,11 +528,6 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa _closeEmailViewIfMailboxDisabledOrNotExist(success.mailboxIdsSubscribe); } } - - _refreshMailboxChanges( - mailboxState: success.currentMailboxState, - properties: MailboxConstants.propertiesDefault - ); } void _showToastSubscribeMailboxSuccess( @@ -587,8 +566,6 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa MailboxId mailboxIdSubscribed, {List? listDescendantMailboxIds} ) { - final accountId = dashboardController.accountId.value; - final session = dashboardController.sessionCurrent; if (session != null && accountId != null) { SubscribeRequest? subscribeRequest; @@ -608,9 +585,17 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa } if (subscribeRequest is SubscribeMultipleMailboxRequest) { - consumeState(_subscribeMultipleMailboxInteractor.execute(session, accountId, subscribeRequest)); + consumeState(_subscribeMultipleMailboxInteractor.execute( + session!, + accountId!, + subscribeRequest, + )); } else if (subscribeRequest is SubscribeMailboxRequest) { - consumeState(_subscribeMailboxInteractor.execute(session, accountId, subscribeRequest)); + consumeState(_subscribeMailboxInteractor.execute( + session!, + accountId!, + subscribeRequest, + )); } } } @@ -619,8 +604,6 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa MailboxId mailboxIdSubscribed, {List? listDescendantMailboxIds} ) { - final accountId = dashboardController.accountId.value; - final session = dashboardController.sessionCurrent; if (session != null && accountId != null) { SubscribeRequest? subscribeRequest; @@ -640,9 +623,17 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa } if (subscribeRequest is SubscribeMultipleMailboxRequest) { - consumeState(_subscribeMultipleMailboxInteractor.execute(session, accountId, subscribeRequest)); + consumeState(_subscribeMultipleMailboxInteractor.execute( + session!, + accountId!, + subscribeRequest, + )); } else if (subscribeRequest is SubscribeMailboxRequest) { - consumeState(_subscribeMailboxInteractor.execute(session, accountId, subscribeRequest)); + consumeState(_subscribeMailboxInteractor.execute( + session!, + accountId!, + subscribeRequest, + )); } } } @@ -660,15 +651,13 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa } void goToCreateNewMailboxView(BuildContext context, {PresentationMailbox? parentMailbox}) async { - final accountId = dashboardController.accountId.value; - final session = dashboardController.sessionCurrent; if (session != null && accountId != null) { final arguments = MailboxCreatorArguments( - accountId, + accountId!, defaultMailboxTree.value, personalMailboxTree.value, teamMailboxesTree.value, - dashboardController.sessionCurrent!, + session!, parentMailbox ); @@ -677,9 +666,14 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa : await push(AppRoutes.mailboxCreator, arguments: arguments); if (result != null && result is NewMailboxArguments) { - _createNewMailboxAction(session, accountId, CreateNewMailboxRequest( - result.newName, - parentId: result.mailboxLocation?.id)); + _createNewMailboxAction( + session!, + accountId!, + CreateNewMailboxRequest( + result.newName, + parentId: result.mailboxLocation?.id, + ), + ); } } } @@ -696,8 +690,6 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa leadingSVGIconColor: Colors.white, leadingSVGIcon: imagePaths.icFolderMailbox); } - - _refreshMailboxChanges(mailboxState: success.currentMailboxState); } void _createNewMailboxFailure(CreateNewMailboxFailure failure) {