TF-4336 Fix INBOX should be above Favorite folder (#4340)

This commit is contained in:
Dat Vu
2026-02-24 11:58:22 +07:00
committed by GitHub
parent 9cd75b2885
commit 9afe4d89e3
2 changed files with 371 additions and 18 deletions
@@ -253,6 +253,10 @@ class MailboxController extends BaseMailboxController
dashboardController: mailboxDashBoardController,
toastManager: toastManager,
);
} else if (failure is CreateDefaultMailboxFailure) {
autoCreateVirtualFolder(
mailboxDashBoardController.isAINeedsActionEnabled,
);
} else {
super.handleFailureViewState(failure);
}
@@ -273,9 +277,6 @@ class MailboxController extends BaseMailboxController
},
(success) {
if (success is GetAllMailboxSuccess) {
autoCreateVirtualFolder(
mailboxDashBoardController.isAINeedsActionEnabled,
);
mailboxDashBoardController.updateRefreshAllMailboxState(Right(RefreshAllMailboxSuccess()));
_handleCreateDefaultFolderIfMissing(mailboxDashBoardController.mapDefaultMailboxIdByRole);
_handleDataFromNavigationRouter();
@@ -283,10 +284,6 @@ class MailboxController extends BaseMailboxController
if (PlatformInfo.isIOS) {
_updateMailboxIdsBlockNotificationToKeychain(success.mailboxList);
}
} else if (success is CreateDefaultMailboxAllSuccess) {
autoCreateVirtualFolder(
mailboxDashBoardController.isAINeedsActionEnabled,
);
}
});
}
@@ -614,7 +611,7 @@ class MailboxController extends BaseMailboxController
.mailboxList
.listSubscribedMailboxesAndDefaultMailboxes;
await refreshTree(listMailboxDisplayed);
await refreshTree(listMailboxDisplayed.withoutVirtualMailbox);
if (currentContext != null) {
syncAllMailboxWithDisplayName(currentContext!);
@@ -705,22 +702,32 @@ class MailboxController extends BaseMailboxController
.whereNot((role) => mapDefaultMailboxRole.containsKey(role) || findNodeByNameOnFirstLevel(role.value) != null)
.toList();
if (listRoleMissing.isEmpty || accountId == null || session == null) {
autoCreateVirtualFolder(
mailboxDashBoardController.isAINeedsActionEnabled,
);
return;
}
final mapRoles = {
for (var role in listRoleMissing)
Id(uuid.v1()) : role
};
log('MailboxController::_handleCreateDefaultFolderIfMissing():mapRoles: $mapRoles');
if (mapRoles.isNotEmpty && accountId != null && session != null) {
consumeState(_createDefaultMailboxInteractor.execute(
session!,
accountId!,
mapRoles,
));
}
consumeState(_createDefaultMailboxInteractor.execute(
session!,
accountId!,
mapRoles,
));
}
Future<void> _handleCreateDefaultFolderIfMissingSuccess(CreateDefaultMailboxAllSuccess success) async {
if (success.listMailbox.isEmpty) return;
if (success.listMailbox.isEmpty) {
autoCreateVirtualFolder(
mailboxDashBoardController.isAINeedsActionEnabled,
);
return;
}
Set<Role?> existingRoles = {};
Set<MailboxName> existingNamesWithoutParent = {};
@@ -733,10 +740,13 @@ class MailboxController extends BaseMailboxController
allMailboxes.add(mailbox.toPresentationMailbox());
}
await buildTree(allMailboxes);
await buildTree(allMailboxes.withoutVirtualMailbox);
if (currentContext != null) {
syncAllMailboxWithDisplayName(currentContext!);
}
autoCreateVirtualFolder(
mailboxDashBoardController.isAINeedsActionEnabled,
);
_setMapMailbox();
_setOutboxMailbox();
}
@@ -1320,7 +1330,7 @@ class MailboxController extends BaseMailboxController
currentMailboxState = success.currentMailboxState;
log('MailboxController::_handleGetAllMailboxSuccess:currentMailboxState: $currentMailboxState');
final listMailboxDisplayed = success.mailboxList.listSubscribedMailboxesAndDefaultMailboxes;
await buildTree(listMailboxDisplayed);
await buildTree(listMailboxDisplayed.withoutVirtualMailbox);
if (currentContext != null) {
syncAllMailboxWithDisplayName(currentContext!);
}