TF-3334 Auto resynchronisation mailbox search view when receives websocket notification

This commit is contained in:
dab246
2024-12-18 14:01:10 +07:00
committed by Dat H. Pham
parent 971b81188d
commit 75231636e2
2 changed files with 79 additions and 88 deletions
@@ -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);
@@ -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<MailboxId>? 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<MailboxId>? 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) {