TF-4284 Fix refreshing causes "virtual mailboxes" to be hidden (#4290)

This commit is contained in:
Dat Vu
2026-04-10 15:29:04 +07:00
committed by GitHub
parent c9e2e5db80
commit cb5d43630a
11 changed files with 493 additions and 225 deletions
@@ -257,8 +257,9 @@ class MailboxController extends BaseMailboxController
toastManager: toastManager,
);
} else if (failure is CreateDefaultMailboxFailure) {
autoCreateVirtualFolder(
mailboxDashBoardController.isAINeedsActionEnabled,
updateMailboxTree(
mailboxCollection: updateMailboxCollection(currentMailboxCollection),
isRefreshTrigger: false,
);
} else {
super.handleFailureViewState(failure);
@@ -271,8 +272,9 @@ class MailboxController extends BaseMailboxController
viewState.value.fold(
(failure) {
if (failure is GetAllMailboxFailure) {
autoCreateVirtualFolder(
mailboxDashBoardController.isAINeedsActionEnabled,
updateMailboxTree(
mailboxCollection: updateMailboxCollection(currentMailboxCollection),
isRefreshTrigger: false,
);
mailboxDashBoardController.updateRefreshAllMailboxState(Left(RefreshAllMailboxFailure()));
showRetryToast(failure);
@@ -303,38 +305,7 @@ class MailboxController extends BaseMailboxController
_handleNavigationRouteParameters
);
ever(mailboxDashBoardController.mailboxUIAction, (action) {
if (action is SelectMailboxDefaultAction) {
_switchBackToMailboxDefault();
mailboxDashBoardController.clearMailboxUIAction();
} else if (action is RefreshChangeMailboxAction) {
_refreshMailboxChanges(newState: action.newState);
} else if (action is OpenMailboxAction) {
if (currentContext != null) {
_handleOpenMailbox(currentContext!, action.presentationMailbox);
if (action.presentationMailbox.role == PresentationMailbox.roleInbox) {
_autoScrollToTopMailboxList();
}
}
mailboxDashBoardController.clearMailboxUIAction();
} else if (action is SystemBackToInboxAction) {
_disableAllSearchEmail();
_switchBackToMailboxDefault();
mailboxDashBoardController.clearMailboxUIAction();
} else if (action is RefreshAllMailboxAction) {
refreshAllMailbox();
mailboxDashBoardController.clearMailboxUIAction();
} else if (action is AutoCreateActionRequiredFolderMailboxAction) {
addActionRequiredFolder();
mailboxDashBoardController.clearMailboxUIAction();
} else if (action is AutoRemoveActionRequiredFolderMailboxAction) {
removeActionRequiredFolder();
mailboxDashBoardController.clearMailboxUIAction();
if (selectedMailbox?.isActionRequired == true) {
_switchBackToMailboxDefault();
}
}
});
ever(mailboxDashBoardController.mailboxUIAction, _handleMailboxUIAction);
ever(mailboxDashBoardController.viewState, (viewState) {
final reactionState = viewState.getOrElse(() => UIState.idle);
@@ -452,6 +423,57 @@ class MailboxController extends BaseMailboxController
});
}
void _handleMailboxUIAction(MailboxUIAction? action) {
if (action is SelectMailboxDefaultAction) {
_switchBackToMailboxDefault();
mailboxDashBoardController.clearMailboxUIAction();
} else if (action is RefreshChangeMailboxAction) {
_refreshMailboxChanges(newState: action.newState);
} else if (action is OpenMailboxAction) {
_onOpenMailboxAction(action);
} else if (action is SystemBackToInboxAction) {
_disableAllSearchEmail();
_switchBackToMailboxDefault();
mailboxDashBoardController.clearMailboxUIAction();
} else if (action is RefreshAllMailboxAction) {
refreshAllMailbox();
mailboxDashBoardController.clearMailboxUIAction();
} else if (action is AutoCreateActionRequiredFolderMailboxAction) {
updateMailboxTree(
mailboxCollection: addActionRequiredFolder(
mailboxCollection: currentMailboxCollection,
),
isRefreshTrigger: false,
);
mailboxDashBoardController.clearMailboxUIAction();
} else if (action is AutoRemoveActionRequiredFolderMailboxAction) {
_onAutoRemoveActionRequiredFolderMailboxAction();
}
}
void _onOpenMailboxAction(OpenMailboxAction action) {
if (currentContext != null) {
_handleOpenMailbox(currentContext!, action.presentationMailbox);
if (action.presentationMailbox.role == PresentationMailbox.roleInbox) {
_autoScrollToTopMailboxList();
}
}
mailboxDashBoardController.clearMailboxUIAction();
}
void _onAutoRemoveActionRequiredFolderMailboxAction() {
updateMailboxTree(
mailboxCollection: removeActionRequiredFolder(
mailboxCollection: currentMailboxCollection,
),
isRefreshTrigger: false,
);
mailboxDashBoardController.clearMailboxUIAction();
if (selectedMailbox?.isActionRequired == true) {
_switchBackToMailboxDefault();
}
}
void _handleMarkEmailsAsReadOrUnread({
required MailboxId? affectedMailboxId,
int? readCount,
@@ -614,14 +636,14 @@ class MailboxController extends BaseMailboxController
.mailboxList
.listSubscribedMailboxesAndDefaultMailboxes;
await refreshTree(listMailboxDisplayed.withoutVirtualMailbox);
await refreshTree(
listMailboxDisplayed.withoutVirtualMailbox,
onUpdateMailboxCollectionCallback: updateMailboxCollection,
);
if (currentContext != null) {
syncAllMailboxWithDisplayName(currentContext!);
}
autoCreateVirtualFolder(
mailboxDashBoardController.isAINeedsActionEnabled,
);
_setMapMailbox();
_setOutboxMailbox();
_selectSelectedMailboxDefault();
@@ -632,6 +654,10 @@ class MailboxController extends BaseMailboxController
}
}
@override
bool get isAINeedsActionEnabled =>
mailboxDashBoardController.isAINeedsActionEnabled;
void _setMapMailbox() {
final mapDefaultMailboxIdByRole = {
for (var mailboxNode in defaultMailboxTree.value.root.childrenItems ?? List<MailboxNode>.empty())
@@ -706,8 +732,9 @@ class MailboxController extends BaseMailboxController
.toList();
if (listRoleMissing.isEmpty || accountId == null || session == null) {
autoCreateVirtualFolder(
mailboxDashBoardController.isAINeedsActionEnabled,
updateMailboxTree(
mailboxCollection: updateMailboxCollection(currentMailboxCollection),
isRefreshTrigger: false,
);
return;
}
@@ -726,8 +753,9 @@ class MailboxController extends BaseMailboxController
Future<void> _handleCreateDefaultFolderIfMissingSuccess(CreateDefaultMailboxAllSuccess success) async {
if (success.listMailbox.isEmpty) {
autoCreateVirtualFolder(
mailboxDashBoardController.isAINeedsActionEnabled,
updateMailboxTree(
mailboxCollection: updateMailboxCollection(currentMailboxCollection),
isRefreshTrigger: false,
);
return;
}
@@ -743,13 +771,13 @@ class MailboxController extends BaseMailboxController
allMailboxes.add(mailbox.toPresentationMailbox());
}
await buildTree(allMailboxes.withoutVirtualMailbox);
await buildTree(
allMailboxes.withoutVirtualMailbox,
onUpdateMailboxCollectionCallback: updateMailboxCollection,
);
if (currentContext != null) {
syncAllMailboxWithDisplayName(currentContext!);
}
autoCreateVirtualFolder(
mailboxDashBoardController.isAINeedsActionEnabled,
);
_setMapMailbox();
_setOutboxMailbox();
}
@@ -1339,7 +1367,10 @@ class MailboxController extends BaseMailboxController
currentMailboxState = success.currentMailboxState;
log('MailboxController::_handleGetAllMailboxSuccess:currentMailboxState: $currentMailboxState');
final listMailboxDisplayed = success.mailboxList.listSubscribedMailboxesAndDefaultMailboxes;
await buildTree(listMailboxDisplayed.withoutVirtualMailbox);
await buildTree(
listMailboxDisplayed.withoutVirtualMailbox,
onUpdateMailboxCollectionCallback: updateMailboxCollection,
);
if (currentContext != null) {
syncAllMailboxWithDisplayName(currentContext!);
}