Esempio n. 1
0
        protected override CredentialSettings UpdateCredential(string endPoint, string realm, CredentialSettings oldCredential)
        {
            // argument checks
            Debug.Assert(endPoint != null);
            Debug.Assert(realm != null);                // may be empty
            // oldCredential can be null

            // state checks
            Debug.Assert(this.app != null);

            // clone the CredentialSettings
            CredentialSettings credentialSettings;

            if (oldCredential != null)
            {
                credentialSettings = CredentialSettings.Clone(oldCredential);
            }
            else
            {
                credentialSettings = new CredentialSettings();
                // set default Persistence value to Session (i.e. volatile)
                // The default value reverted because it was confusing.
//				credentialSettings.Persistence = CredentialPersistence.Session;
            }
            credentialSettings.EndPoint = endPoint;

            // ask user's credential
            Func <CredentialSettings> callback = () => {
                // get the MainWindow
                // Note that the MainWindow can be accessed only from the GUI thread
                // (that is, it must be gotten inside this callback)
                Window mainWindow = this.app.MainWindow;

                // prepare CredentialDialog
                CredentialDialog dialog = new CredentialDialog(credentialSettings);
                dialog.Title = realm;
                if (mainWindow != null)
                {
                    dialog.Owner = mainWindow;
                }

                // show the credential dialog and get user input
                this.credentialDialog = dialog;
                try {
                    return((dialog.ShowDialog() ?? false) ? dialog.CredentialSettings : null);
                } finally {
                    this.credentialDialog = null;
                }
            };

            return(this.app.Dispatcher.Invoke <CredentialSettings>(callback));
        }
        private void editCredentialButton_Click(object sender, RoutedEventArgs e)
        {
            try {
                ListView listView = this.credentialListView;

                // get the selected CredentialSettings
                CredentialSettings originalItem = listView.SelectedItem as CredentialSettings;
                if (originalItem == null)
                {
                    // this item is not editable
                    return;
                }

                // create a clone of the selected CredentialSettings
                CredentialSettings newItem = CredentialSettings.Clone(originalItem);

                // prepare a validator
                CredentialSettings[] items = listView.Items.Cast <CredentialSettings>().ToArray();
                Func <CredentialSettings, string> validator = (s) => {
                    // check there is no credential which is for the same end point
                    CredentialSettings conflicting = items.Where(item => (item != originalItem && s.HasSameEndPoint(item))).FirstOrDefault();
                    return((conflicting == null) ? null : string.Format(Properties.Resources.SettingsWindow_Message_ConflictingCredential, s.EndPoint));
                };

                // edit the clone
                CredentialDialog dialog = new CredentialDialog(newItem, validator, endPointEditable: true);
                dialog.Owner = this;
                if (dialog.ShowDialog() ?? false)
                {
                    ReplaceSelectedListItemWith(listView, dialog.CredentialSettings);
                }
            } catch (Exception exception) {
                ShowErrorDialog(exception.Message);
            }

            return;
        }