Fixed account re-ordering issues with merged accounts.

This commit is contained in:
Burak Kaan Köse
2024-08-25 19:51:19 +02:00
parent 43a51e5f2f
commit 8cdb6646c4

View File

@@ -184,43 +184,44 @@ namespace Wino.Mail.ViewModels
var accounts = await _accountService.GetAccountsAsync().ConfigureAwait(false); var accounts = await _accountService.GetAccountsAsync().ConfigureAwait(false);
// Group accounts by merged account. List<Guid> initializedAccountIds = new();
var groupedAccounts = accounts.GroupBy(a => a.MergedInboxId).OrderBy(a => a.Key != null);
foreach (var group in groupedAccounts) foreach (var account in accounts)
{ {
var mergedInboxId = group.Key; // Already initialized with one of the previous merged accounts.
if (mergedInboxId == null) if (initializedAccountIds.Contains(account.Id)) continue;
bool isMergedAccount = account.MergedInboxId != null;
if (isMergedAccount)
{ {
// Single accounts. var mergedAccountId = account.MergedInboxId.Value;
// Preserve the order while listing. var mergedAccounts = accounts.Where(a => a.MergedInboxId == mergedAccountId);
var mergedInbox = mergedAccounts.First().MergedInbox;
var orderedGroup = group.OrderBy(a => a.Order); var mergedAccountMenuItem = new MergedAccountMenuItem(mergedInbox, mergedAccounts, null);
foreach (var account in orderedGroup) foreach (var mergedAccount in mergedAccounts)
{ {
await ExecuteUIThread(() => initializedAccountIds.Add(mergedAccount.Id);
{ mergedAccountMenuItem.SubMenuItems.Add(new AccountMenuItem(mergedAccount, mergedAccountMenuItem));
MenuItems.Add(new AccountMenuItem(account, null));
});
}
}
else
{
// Merged accounts.
var mergedInbox = group.First().MergedInbox;
var mergedAccountMenuItem = new MergedAccountMenuItem(mergedInbox, group, null);
foreach (var accountItem in group)
{
mergedAccountMenuItem.SubMenuItems.Add(new AccountMenuItem(accountItem, mergedAccountMenuItem));
} }
await ExecuteUIThread(() => await ExecuteUIThread(() =>
{ {
MenuItems.Add(mergedAccountMenuItem); MenuItems.Add(mergedAccountMenuItem);
}); });
}
else
{
await ExecuteUIThread(() =>
{
MenuItems.Add(new AccountMenuItem(account, null));
});
initializedAccountIds.Add(account.Id);
} }
} }
@@ -1004,7 +1005,8 @@ namespace Wino.Mail.ViewModels
{ {
if (!MenuItems.TryGetAccountMenuItem(item.Key, out IAccountMenuItem menuItem)) return; if (!MenuItems.TryGetAccountMenuItem(item.Key, out IAccountMenuItem menuItem)) return;
MenuItems.Move(MenuItems.IndexOf(menuItem), item.Value); // Adding +1 since first item is always reserved for CreateMailMenuItem.
MenuItems.Move(MenuItems.IndexOf(menuItem), item.Value + 1);
} }
} }