in Vault/Explorer/MainForm.cs [200:276]
private async void uxMenuItemRefresh_Click(object sender, EventArgs e)
{
using (var op = NewUxOperationWithProgress(uxMenuItemRefresh, uxComboBoxVaultAlias, uxButtonAdd, uxMenuItemAdd,
uxButtonEdit, uxMenuItemEdit, uxButtonToggle, uxMenuItemToggle, uxButtonDelete, uxMenuItemDelete, uxImageSearch, uxTextBoxSearch,
uxButtonShare, uxMenuItemShare, uxButtonFavorite, uxMenuItemFavorite, uxButtonPowershell))
{
try
{
Text = Utils.AppName;
SetCurrentVault();
uxPropertyGridSecret.SelectedObjects = null;
uxListViewSecrets.AllowDrop = false;
uxListViewSecrets.RemoveAllItems();
uxListViewSecrets.Refresh();
RefreshItemsCount();
uxListViewSecrets.BeginUpdate();
int s = 0, c = 0;
Action updateCount = () => uxStatusLabelSecertsCount.Text = $"{s + c} secrets"; // We use delegate and Invoke() below to execute on the thread that owns the control
IEnumerable<SecretItem> secrets = Enumerable.Empty<SecretItem>();
IEnumerable<CertificateItem> certificates = Enumerable.Empty<CertificateItem>();
await op.Invoke("access",
async () => // List Secrets
{
CurrentVaultAlias.SecretsCollectionEnabled = false;
secrets = await CurrentVault.ListSecretsAsync(0, (p) => { s = p; Invoke(updateCount); }, cancellationToken: op.CancellationToken);
CurrentVaultAlias.SecretsCollectionEnabled = true;
},
async () => // List Key Vault Certificates
{
CurrentVaultAlias.CertificatesCollectionEnabled = false;
certificates = await CurrentVault.ListCertificatesAsync(0, (p) => { c = p; Invoke(updateCount); }, cancellationToken: op.CancellationToken);
CurrentVaultAlias.CertificatesCollectionEnabled = true;
}
);
foreach (var secret in secrets)
{
uxListViewSecrets.AddOrReplaceItem(new ListViewItemSecret(this, secret));
}
foreach (var cert in certificates)
{
// Remove "secret" (in fact this is a certifiacte) which was returned as part of ListSecretsAsync
uxListViewSecrets.AddOrReplaceItem(new ListViewItemCertificate(this, cert));
}
}
catch (OperationCanceledException) // User cancelled one of the list operations
{
uxListViewSecrets.RemoveAllItems();
CurrentVaultAlias.SecretsCollectionEnabled = false;
CurrentVaultAlias.CertificatesCollectionEnabled = false;
}
catch
{
uxListViewSecrets.RemoveAllItems();
throw; // Propogate the error and show error to user
}
finally
{
// We failed to list from all collections, disable controls
if (!CurrentVaultAlias.SecretsCollectionEnabled && !CurrentVaultAlias.CertificatesCollectionEnabled)
{
UxOperation.ToggleControls(false, uxButtonAdd, uxMenuItemAdd,
uxButtonEdit, uxMenuItemEdit, uxButtonToggle, uxMenuItemToggle, uxButtonDelete, uxMenuItemDelete, uxImageSearch, uxTextBoxSearch,
uxButtonShare, uxMenuItemShare, uxButtonFavorite, uxMenuItemFavorite, uxButtonPowershell);
}
else // We were able to list from one or from both collections
{
Text += $" ({CurrentVault.AuthenticatedUserName})";
uxAddSecret.Visible = uxAddSecret2.Visible = uxAddCert.Visible = uxAddCert2.Visible = uxAddFile.Visible = uxAddFile2.Visible = CurrentVaultAlias.SecretsCollectionEnabled;
uxAddKVCert.Visible = uxAddKVCert2.Visible = CurrentVaultAlias.CertificatesCollectionEnabled;
uxListViewSecrets.AllowDrop = true;
uxListViewSecrets.RefreshGroupsHeader();
}
uxListViewSecrets.EndUpdate();
uxTimerSearchTextTypingCompleted_Tick(null, EventArgs.Empty); // Refresh search and items count
}
}
}