Public Access
Desktop: swap the host lists in whole instead of announcing every row to listeners that redo all their work per row
This commit is contained in:
1 parent
a2362d1e3e
commit
7b072bcded
4 files changed
+120
-48
No files matched your search
@@ -867,14 +867,14 @@ internal sealed partial class TransfersViewModel : ObservableObject, IAsyncDispo
|
||||
/// not this object's to clear. The rows are shared: they carry the decrypted host, and copying that would
|
||||
/// be a second decrypted copy of a secret for no gain.
|
||||
/// </remarks>
|
||||
internal ObservableCollection<HostRowViewModel> Hosts { get; } = [];
|
||||
internal ReplaceableCollection<HostRowViewModel> Hosts { get; } = [];
|
||||
|
||||
[ObservableProperty]
|
||||
private HostRowViewModel? selectedHost;
|
||||
|
||||
/// <summary>The buckets that can be browsed, which is the vault's list.</summary>
|
||||
/// <inheritdoc cref="Hosts" path="/remarks" />
|
||||
internal ObservableCollection<ObjectStoreRowViewModel> Buckets { get; } = [];
|
||||
internal ReplaceableCollection<ObjectStoreRowViewModel> Buckets { get; } = [];
|
||||
|
||||
[ObservableProperty]
|
||||
private ObjectStoreRowViewModel? selectedBucket;
|
||||
@@ -3986,7 +3986,21 @@ internal sealed partial class TransfersViewModel : ObservableObject, IAsyncDispo
|
||||
}
|
||||
}
|
||||
|
||||
private void OnVaultListChanged(object? sender, NotifyCollectionChangedEventArgs e) => RefreshHosts();
|
||||
/// <remarks>
|
||||
/// Only the picker the list feeds. Refilling both on either list's change made every reload refill the host
|
||||
/// picker once for the hosts and again for the buckets.
|
||||
/// </remarks>
|
||||
private void OnVaultListChanged(object? sender, NotifyCollectionChangedEventArgs e)
|
||||
{
|
||||
if (vault is { } open && ReferenceEquals(sender, open.ObjectStores))
|
||||
{
|
||||
RefreshPickers(hosts: false, buckets: true);
|
||||
}
|
||||
else
|
||||
{
|
||||
RefreshPickers(hosts: true, buckets: false);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Rebuilds both pickers from the vault's lists.
|
||||
@@ -4004,34 +4018,34 @@ internal sealed partial class TransfersViewModel : ObservableObject, IAsyncDispo
|
||||
/// connected to.
|
||||
/// </para>
|
||||
/// </remarks>
|
||||
private void RefreshHosts()
|
||||
private void RefreshHosts() => RefreshPickers(hosts: true, buckets: true);
|
||||
|
||||
private void RefreshPickers(bool hosts, bool buckets)
|
||||
{
|
||||
refreshingPickers = true;
|
||||
|
||||
try
|
||||
{
|
||||
Hosts.Clear();
|
||||
|
||||
if (vault is not { } open)
|
||||
{
|
||||
Hosts.ReplaceAll([]);
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var row in open.Hosts)
|
||||
if (hosts)
|
||||
{
|
||||
Hosts.Add(row);
|
||||
Hosts.ReplaceAll(open.Hosts);
|
||||
|
||||
SelectedHost = Hosts.FirstOrDefault(row => row.EntityId == chosenHost) ?? Hosts.FirstOrDefault();
|
||||
}
|
||||
|
||||
SelectedHost = Hosts.FirstOrDefault(row => row.EntityId == chosenHost) ?? Hosts.FirstOrDefault();
|
||||
|
||||
Buckets.Clear();
|
||||
|
||||
foreach (var row in open.ObjectStores)
|
||||
if (buckets)
|
||||
{
|
||||
Buckets.Add(row);
|
||||
}
|
||||
Buckets.ReplaceAll(open.ObjectStores);
|
||||
|
||||
SelectedBucket = Buckets.FirstOrDefault(row => row.EntityId == chosenBucket) ?? Buckets.FirstOrDefault();
|
||||
SelectedBucket =
|
||||
Buckets.FirstOrDefault(row => row.EntityId == chosenBucket) ?? Buckets.FirstOrDefault();
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user