TF-3334 Remove resynchronisation when performing actions with mailbox

This commit is contained in:
dab246
2024-12-18 13:45:09 +07:00
committed by Dat H. Pham
parent d36327f69c
commit 971b81188d
@@ -9,7 +9,6 @@ import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/account_id.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/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/session/session.dart';
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap; import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart';
@@ -32,7 +31,6 @@ import 'package:tmail_ui_user/features/mailbox/domain/model/rename_mailbox_reque
import 'package:tmail_ui_user/features/mailbox/domain/model/subscribe_mailbox_request.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/subscribe_mailbox_request.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/subscribe_multiple_mailbox_request.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/subscribe_multiple_mailbox_request.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/subscribe_request.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/subscribe_request.dart';
import 'package:tmail_ui_user/features/mailbox/domain/state/create_default_mailbox_state.dart';
import 'package:tmail_ui_user/features/mailbox/domain/state/create_new_mailbox_state.dart'; 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/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/get_all_mailboxes_state.dart';
@@ -104,6 +102,10 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
PresentationEmail? get selectedEmail => mailboxDashBoardController.selectedEmail.value; PresentationEmail? get selectedEmail => mailboxDashBoardController.selectedEmail.value;
AccountId? get accountId => mailboxDashBoardController.accountId.value;
Session? get session => mailboxDashBoardController.sessionCurrent;
MailboxController( MailboxController(
this._createNewMailboxInteractor, this._createNewMailboxInteractor,
this._deleteMultipleMailboxInteractor, this._deleteMultipleMailboxInteractor,
@@ -159,11 +161,6 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
_deleteMultipleMailboxSuccess(success.listMailboxIdDeleted, success.currentMailboxState); _deleteMultipleMailboxSuccess(success.listMailboxIdDeleted, success.currentMailboxState);
} else if (success is DeleteMultipleMailboxHasSomeSuccess) { } else if (success is DeleteMultipleMailboxHasSomeSuccess) {
_deleteMultipleMailboxSuccess(success.listMailboxIdDeleted, success.currentMailboxState); _deleteMultipleMailboxSuccess(success.listMailboxIdDeleted, success.currentMailboxState);
} else if (success is RenameMailboxSuccess) {
_refreshMailboxChanges(
currentMailboxState: success.currentMailboxState,
properties: MailboxConstants.propertiesDefault
);
} else if (success is MoveMailboxSuccess) { } else if (success is MoveMailboxSuccess) {
_moveMailboxSuccess(success); _moveMailboxSuccess(success);
} else if (success is SubscribeMailboxSuccess) { } else if (success is SubscribeMailboxSuccess) {
@@ -172,8 +169,6 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
_handleUnsubscribeMultipleMailboxAllSuccess(success); _handleUnsubscribeMultipleMailboxAllSuccess(success);
} else if (success is SubscribeMultipleMailboxHasSomeSuccess) { } else if (success is SubscribeMultipleMailboxHasSomeSuccess) {
_handleUnsubscribeMultipleMailboxHasSomeSuccess(success); _handleUnsubscribeMultipleMailboxHasSomeSuccess(success);
} else if (success is CreateDefaultMailboxAllSuccess) {
_refreshMailboxChanges(currentMailboxState: success.currentMailboxState);
} }
} }
@@ -188,8 +183,6 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
_deleteMailboxFailure(failure); _deleteMailboxFailure(failure);
} else if (failure is RefreshChangesAllMailboxFailure) { } else if (failure is RefreshChangesAllMailboxFailure) {
_clearNewFolderId(); _clearNewFolderId();
} else if (failure is CreateDefaultMailboxFailure) {
_refreshMailboxChanges(currentMailboxState: failure.currentMailboxState);
} }
} }
@@ -224,8 +217,8 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
void _registerObxStreamListener() { void _registerObxStreamListener() {
ever(mailboxDashBoardController.accountId, (accountId) { ever(mailboxDashBoardController.accountId, (accountId) {
if (accountId != null && mailboxDashBoardController.sessionCurrent != null) { if (accountId != null && session != null) {
getAllMailbox(mailboxDashBoardController.sessionCurrent!, accountId); getAllMailbox(session!, accountId);
} }
}); });
@@ -245,9 +238,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
_switchBackToMailboxDefault(); _switchBackToMailboxDefault();
mailboxDashBoardController.clearMailboxUIAction(); mailboxDashBoardController.clearMailboxUIAction();
} else if (action is RefreshChangeMailboxAction) { } else if (action is RefreshChangeMailboxAction) {
if (action.newState != currentMailboxState) { _refreshMailboxChanges(newState: action.newState);
_refreshMailboxChanges();
}
mailboxDashBoardController.clearMailboxUIAction(); mailboxDashBoardController.clearMailboxUIAction();
} else if (action is OpenMailboxAction) { } else if (action is OpenMailboxAction) {
if (currentContext != null) { if (currentContext != null) {
@@ -281,31 +272,29 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
} }
Future<void> refreshAllMailbox() async { Future<void> refreshAllMailbox() async {
final session = mailboxDashBoardController.sessionCurrent;
final accountId = mailboxDashBoardController.accountId.value;
if (session != null && accountId != null) { if (session != null && accountId != null) {
consumeState(getAllMailboxInteractor!.execute(session, accountId)); consumeState(getAllMailboxInteractor!.execute(session!, accountId!));
} else { } else {
consumeState(Stream.value(Left(GetAllMailboxFailure(NotFoundSessionException())))); consumeState(Stream.value(Left(GetAllMailboxFailure(NotFoundSessionException()))));
} }
} }
void _refreshMailboxChanges({jmap.State? currentMailboxState, Properties? properties}) { void _refreshMailboxChanges({jmap.State? newState}) {
log('MailboxController::_refreshMailboxChanges(): currentMailboxState: $currentMailboxState'); log('MailboxController::_refreshMailboxChanges():newState: $newState');
final newMailboxState = currentMailboxState ?? this.currentMailboxState; if (accountId == null ||
log('MailboxController::_refreshMailboxChanges(): newMailboxState: $newMailboxState'); session == null ||
final accountId = mailboxDashBoardController.accountId.value; currentMailboxState == null ||
final session = mailboxDashBoardController.sessionCurrent; newState == currentMailboxState) {
if (accountId != null && session != null && newMailboxState != null) {
refreshMailboxChanges(
session,
accountId,
newMailboxState,
properties: properties
);
} else {
_newFolderId = null; _newFolderId = null;
return;
} }
refreshMailboxChanges(
session!,
accountId!,
currentMailboxState!,
properties: MailboxConstants.propertiesDefault,
);
} }
void _setMapMailbox() { void _setMapMailbox() {
@@ -381,12 +370,10 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
.whereNot((role) => mapDefaultMailboxRole.containsKey(role) || findNodeByNameOnFirstLevel(role.value) != null) .whereNot((role) => mapDefaultMailboxRole.containsKey(role) || findNodeByNameOnFirstLevel(role.value) != null)
.toList(); .toList();
log('MailboxController::_handleCreateDefaultFolderIfMissing():listRoleMissing: $listRoleMissing'); log('MailboxController::_handleCreateDefaultFolderIfMissing():listRoleMissing: $listRoleMissing');
final accountId = mailboxDashBoardController.accountId.value;
final session = mailboxDashBoardController.sessionCurrent;
if (listRoleMissing.isNotEmpty && accountId != null && session != null) { if (listRoleMissing.isNotEmpty && accountId != null && session != null) {
consumeState(_createDefaultMailboxInteractor.execute( consumeState(_createDefaultMailboxInteractor.execute(
session, session!,
accountId, accountId!,
listRoleMissing listRoleMissing
)); ));
} }
@@ -543,11 +530,9 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
} }
void goToCreateNewMailboxView(BuildContext context, {PresentationMailbox? parentMailbox}) async { void goToCreateNewMailboxView(BuildContext context, {PresentationMailbox? parentMailbox}) async {
final accountId = mailboxDashBoardController.accountId.value;
final session = mailboxDashBoardController.sessionCurrent;
if (session !=null && accountId != null) { if (session !=null && accountId != null) {
final arguments = MailboxCreatorArguments( final arguments = MailboxCreatorArguments(
accountId, accountId!,
defaultMailboxTree.value, defaultMailboxTree.value,
personalMailboxTree.value, personalMailboxTree.value,
teamMailboxesTree.value, teamMailboxesTree.value,
@@ -560,9 +545,14 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
: await push(AppRoutes.mailboxCreator, arguments: arguments); : await push(AppRoutes.mailboxCreator, arguments: arguments);
if (result != null && result is NewMailboxArguments) { if (result != null && result is NewMailboxArguments) {
_createNewMailboxAction(session, accountId, CreateNewMailboxRequest( _createNewMailboxAction(
result.newName, session!,
parentId: result.mailboxLocation?.id)); accountId!,
CreateNewMailboxRequest(
result.newName,
parentId: result.mailboxLocation?.id,
),
);
} }
} }
} }
@@ -581,8 +571,6 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
_newFolderId = success.newMailbox.id; _newFolderId = success.newMailbox.id;
} }
_refreshMailboxChanges(currentMailboxState: success.currentMailboxState);
} }
void _createNewMailboxFailure(CreateNewMailboxFailure failure) { void _createNewMailboxFailure(CreateNewMailboxFailure failure) {
@@ -714,9 +702,6 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
} }
void _deleteMailboxAction(PresentationMailbox presentationMailbox) { void _deleteMailboxAction(PresentationMailbox presentationMailbox) {
final accountId = mailboxDashBoardController.accountId.value;
final session = mailboxDashBoardController.sessionCurrent;
if (session != null && accountId != null) { if (session != null && accountId != null) {
final tupleMap = MailboxUtils.generateMapDescendantIdsAndMailboxIdList( final tupleMap = MailboxUtils.generateMapDescendantIdsAndMailboxIdList(
[presentationMailbox], [presentationMailbox],
@@ -726,10 +711,11 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
final listMailboxId = tupleMap.value2; final listMailboxId = tupleMap.value2;
consumeState(_deleteMultipleMailboxInteractor.execute( consumeState(_deleteMultipleMailboxInteractor.execute(
session, session!,
accountId, accountId!,
mapDescendantIds, mapDescendantIds,
listMailboxId)); listMailboxId,
));
} else { } else {
_deleteMailboxFailure(DeleteMultipleMailboxFailure(null)); _deleteMailboxFailure(DeleteMultipleMailboxFailure(null));
} }
@@ -752,7 +738,6 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
_switchBackToMailboxDefault(); _switchBackToMailboxDefault();
_closeEmailViewIfMailboxDisabledOrNotExist(listMailboxIdDeleted); _closeEmailViewIfMailboxDisabledOrNotExist(listMailboxIdDeleted);
} }
_refreshMailboxChanges(currentMailboxState: currentMailboxState);
} }
void _openConfirmationDialogDeleteMultipleMailboxAction( void _openConfirmationDialogDeleteMultipleMailboxAction(
@@ -794,9 +779,6 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
} }
void _deleteMultipleMailboxAction(List<PresentationMailbox> selectedMailboxList) { void _deleteMultipleMailboxAction(List<PresentationMailbox> selectedMailboxList) {
final accountId = mailboxDashBoardController.accountId.value;
final session = mailboxDashBoardController.sessionCurrent;
if (session != null && accountId != null) { if (session != null && accountId != null) {
final tupleMap = MailboxUtils.generateMapDescendantIdsAndMailboxIdList( final tupleMap = MailboxUtils.generateMapDescendantIdsAndMailboxIdList(
selectedMailboxList, selectedMailboxList,
@@ -805,10 +787,11 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
final mapDescendantIds = tupleMap.value1; final mapDescendantIds = tupleMap.value1;
final listMailboxId = tupleMap.value2; final listMailboxId = tupleMap.value2;
consumeState(_deleteMultipleMailboxInteractor.execute( consumeState(_deleteMultipleMailboxInteractor.execute(
session, session!,
accountId, accountId!,
mapDescendantIds, mapDescendantIds,
listMailboxId)); listMailboxId,
));
} else { } else {
_deleteMailboxFailure(DeleteMultipleMailboxFailure(null)); _deleteMailboxFailure(DeleteMultipleMailboxFailure(null));
} }
@@ -835,13 +818,10 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
} }
void _renameMailboxAction(PresentationMailbox presentationMailbox, MailboxName newMailboxName) { void _renameMailboxAction(PresentationMailbox presentationMailbox, MailboxName newMailboxName) {
final accountId = mailboxDashBoardController.accountId.value;
final session = mailboxDashBoardController.sessionCurrent;
if (session != null && accountId != null) { if (session != null && accountId != null) {
consumeState(_renameMailboxInteractor.execute( consumeState(_renameMailboxInteractor.execute(
session, session!,
accountId, accountId!,
RenameMailboxRequest(presentationMailbox.id, newMailboxName)) RenameMailboxRequest(presentationMailbox.id, newMailboxName))
); );
} }
@@ -890,18 +870,15 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
textColor: Colors.white, textColor: Colors.white,
actionIcon: SvgPicture.asset(imagePaths.icUndo)); actionIcon: SvgPicture.asset(imagePaths.icUndo));
} }
_refreshMailboxChanges(
currentMailboxState: success.currentMailboxState,
properties: MailboxConstants.propertiesDefault
);
} }
void _undoMovingMailbox(MoveMailboxRequest newMoveRequest) { void _undoMovingMailbox(MoveMailboxRequest newMoveRequest) {
final session = mailboxDashBoardController.sessionCurrent;
final accountId = mailboxDashBoardController.accountId.value;
if (session != null && accountId != null) { if (session != null && accountId != null) {
consumeState(_moveMailboxInteractor.execute(session, accountId, newMoveRequest)); consumeState(_moveMailboxInteractor.execute(
session!,
accountId!,
newMoveRequest,
));
} }
} }
@@ -1034,13 +1011,11 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
PresentationMailbox mailboxSelected, PresentationMailbox mailboxSelected,
PresentationMailbox? destinationMailbox PresentationMailbox? destinationMailbox
) { ) {
final accountId = mailboxDashBoardController.accountId.value;
final session = mailboxDashBoardController.sessionCurrent;
if (session != null && accountId != null) { if (session != null && accountId != null) {
_handleMovingMailbox( _handleMovingMailbox(
context, context,
session, session!,
accountId, accountId!,
MoveAction.moving, MoveAction.moving,
mailboxSelected, mailboxSelected,
destinationMailbox: destinationMailbox destinationMailbox: destinationMailbox
@@ -1112,13 +1087,12 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
Future<void> _updateMailboxIdsBlockNotificationToKeychain(List<PresentationMailbox> mailboxes) async { Future<void> _updateMailboxIdsBlockNotificationToKeychain(List<PresentationMailbox> mailboxes) async {
_iosSharingManager = getBinding<IOSSharingManager>(); _iosSharingManager = getBinding<IOSSharingManager>();
final accountId = mailboxDashBoardController.accountId.value;
if (accountId == null || _iosSharingManager == null || mailboxes.isEmpty) { if (accountId == null || _iosSharingManager == null || mailboxes.isEmpty) {
logError('MailboxController::_updateMailboxIdsBlockNotificationToKeychain: AccountId = $accountId | IosSharingManager = $_iosSharingManager | Mailboxes = ${mailboxes.length}'); logError('MailboxController::_updateMailboxIdsBlockNotificationToKeychain: AccountId = $accountId | IosSharingManager = $_iosSharingManager | Mailboxes = ${mailboxes.length}');
return; return;
} }
if (await _iosSharingManager!.isExistMailboxIdsBlockNotificationInKeyChain(accountId)) { if (await _iosSharingManager!.isExistMailboxIdsBlockNotificationInKeyChain(accountId!)) {
return; return;
} }
@@ -1128,7 +1102,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
.toList(); .toList();
log('MailboxController::_updateMailboxIdsBlockNotificationToKeychain:MailboxIdsBlockNotification = $mailboxIdsBlockNotification'); log('MailboxController::_updateMailboxIdsBlockNotificationToKeychain:MailboxIdsBlockNotification = $mailboxIdsBlockNotification');
_iosSharingManager!.updateMailboxIdsBlockNotificationInKeyChain( _iosSharingManager!.updateMailboxIdsBlockNotificationInKeyChain(
accountId: accountId, accountId: accountId!,
mailboxIds: mailboxIdsBlockNotification); mailboxIds: mailboxIdsBlockNotification);
} }
@@ -1145,8 +1119,6 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
} }
void _unsubscribeMailboxAction(MailboxId mailboxId) { void _unsubscribeMailboxAction(MailboxId mailboxId) {
final accountId = mailboxDashBoardController.accountId.value;
final session = mailboxDashBoardController.sessionCurrent;
if (session != null && accountId != null) { if (session != null && accountId != null) {
final subscribeRequest = generateSubscribeRequest( final subscribeRequest = generateSubscribeRequest(
mailboxId, mailboxId,
@@ -1155,9 +1127,17 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
); );
if (subscribeRequest is SubscribeMultipleMailboxRequest) { if (subscribeRequest is SubscribeMultipleMailboxRequest) {
consumeState(_subscribeMultipleMailboxInteractor.execute(session, accountId, subscribeRequest)); consumeState(_subscribeMultipleMailboxInteractor.execute(
session!,
accountId!,
subscribeRequest,
));
} else if (subscribeRequest is SubscribeMailboxRequest) { } else if (subscribeRequest is SubscribeMailboxRequest) {
consumeState(_subscribeMailboxInteractor.execute(session, accountId, subscribeRequest)); consumeState(_subscribeMailboxInteractor.execute(
session!,
accountId!,
subscribeRequest,
));
} }
} }
} }
@@ -1171,11 +1151,6 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
_closeEmailViewIfMailboxDisabledOrNotExist([success.mailboxId]); _closeEmailViewIfMailboxDisabledOrNotExist([success.mailboxId]);
} }
} }
_refreshMailboxChanges(
currentMailboxState: success.currentMailboxState,
properties: MailboxConstants.propertiesDefault
);
} }
void _handleUnsubscribeMultipleMailboxAllSuccess(SubscribeMultipleMailboxAllSuccess success) { void _handleUnsubscribeMultipleMailboxAllSuccess(SubscribeMultipleMailboxAllSuccess success) {
@@ -1190,11 +1165,6 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
_closeEmailViewIfMailboxDisabledOrNotExist(success.mailboxIdsSubscribe); _closeEmailViewIfMailboxDisabledOrNotExist(success.mailboxIdsSubscribe);
} }
} }
_refreshMailboxChanges(
currentMailboxState: success.currentMailboxState,
properties: MailboxConstants.propertiesDefault
);
} }
void _handleUnsubscribeMultipleMailboxHasSomeSuccess(SubscribeMultipleMailboxHasSomeSuccess success) { void _handleUnsubscribeMultipleMailboxHasSomeSuccess(SubscribeMultipleMailboxHasSomeSuccess success) {
@@ -1209,11 +1179,6 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
_closeEmailViewIfMailboxDisabledOrNotExist(success.mailboxIdsSubscribe); _closeEmailViewIfMailboxDisabledOrNotExist(success.mailboxIdsSubscribe);
} }
} }
_refreshMailboxChanges(
currentMailboxState: success.currentMailboxState,
properties: MailboxConstants.propertiesDefault
);
} }
void _closeEmailViewIfMailboxDisabledOrNotExist(List<MailboxId> mailboxIdsDisabled) { void _closeEmailViewIfMailboxDisabledOrNotExist(List<MailboxId> mailboxIdsDisabled) {
@@ -1253,9 +1218,6 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
MailboxId mailboxIdSubscribed, MailboxId mailboxIdSubscribed,
{List<MailboxId>? listDescendantMailboxIds} {List<MailboxId>? listDescendantMailboxIds}
) { ) {
final accountId = mailboxDashBoardController.accountId.value;
final session = mailboxDashBoardController.sessionCurrent;
if (session != null && accountId != null) { if (session != null && accountId != null) {
SubscribeRequest? subscribeRequest; SubscribeRequest? subscribeRequest;
@@ -1275,9 +1237,17 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
} }
if (subscribeRequest is SubscribeMultipleMailboxRequest) { if (subscribeRequest is SubscribeMultipleMailboxRequest) {
consumeState(_subscribeMultipleMailboxInteractor.execute(session, accountId, subscribeRequest)); consumeState(_subscribeMultipleMailboxInteractor.execute(
session!,
accountId!,
subscribeRequest,
));
} else if (subscribeRequest is SubscribeMailboxRequest) { } else if (subscribeRequest is SubscribeMailboxRequest) {
consumeState(_subscribeMailboxInteractor.execute(session, accountId, subscribeRequest)); consumeState(_subscribeMailboxInteractor.execute(
session!,
accountId!,
subscribeRequest,
));
} }
} }
} }