Fixed account re-ordering issues with merged accounts.
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user