private async void uxMenuItemRefresh_Click()

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
                }
            }
        }