Exemplo n.º 1
0
        // based on information from : https://github.com/hesam/SketchSharp/blob/master/SpecSharp/SpecSharp/Microsoft.VisualStudio.Shell/DialogPage.cs
        public override void LoadSettingsFromStorage()
        {
            var items = new List <AttachDescriptor>();

            try
            {
                var package = GetServiceSafe <AnotherAttachToAnyPackage>();
                Debug.Assert(package != null, "No package service; we cannot load settings");
                using (var rootKey = package.UserRegistryRoot)
                {
                    var path = SettingsRegistryPath;
                    var key  = rootKey.OpenSubKey(path, true /* writable */);
                    if (key != null)
                    {
                        using (key)
                        {
                            MultipleMatchHandlingDefault = key.GetEnumValue(ATASettings.Keys.AttachDescriptorDefaultMultipleMatchHandling, 0, MultiMatchOptionsGlobal.All);

                            for (var i = 0; i < ATAConstants.MaxCommands; i++)
                            {
                                var descriptorName = string.Format(ATASettings.Keys.AttachDescriptorName, i);
                                if (key.GetValueNames().Any(name => name.Equals(descriptorName, StringComparison.OrdinalIgnoreCase)))
                                {
                                    Migrator.IISFix(key, i);
                                    Migrator.ChooseProcessUpdate(key, i);

                                    items.Add(new AttachDescriptor
                                    {
                                        Name                = key.GetStringValue(ATASettings.Keys.AttachDescriptorName, i),
                                        Enabled             = key.GetBooleanValue(ATASettings.Keys.AttachDescriptorEnabled, i),
                                        ProcessNames        = key.GetStringValue(ATASettings.Keys.AttachDescriptorProcessNames, i).Split(new[] { ATAConstants.ProcessNamesSeparator[0] }, StringSplitOptions.RemoveEmptyEntries),
                                        IsProcessNamesRegex = key.GetBooleanValue(ATASettings.Keys.AttachDescriptorIsProcessNamesRegex, i),
                                        MultiMatchHandling  = key.GetEnumValue(ATASettings.Keys.AttachDescriptorMultipleMatchHandling, i, MultiMatchOptions.All),
                                        Username            = key.GetStringValue(ATASettings.Keys.AttachDescriptorUsername, i),
                                        IsUsernameRegex     = key.GetBooleanValue(ATASettings.Keys.AttachDescriptorIsUsernameRegex, i),
                                        AppPool             = key.GetStringValue(ATASettings.Keys.AttachDescriptorAppPool, i),
                                        IsAppPoolRegex      = key.GetBooleanValue(ATASettings.Keys.AttachDescriptorIsAppPoolRegex, i)
                                    });
                                }
                                else
                                {
                                    // add an empty one
                                    items.Add(new AttachDescriptor());
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.ToString());
            }

            MultipleMatchHandlingDefault = MultiMatchOptionsGlobal.All; // default
            if (items.Count == 0)
            {
                items = ATASettings.DefaultAttachables();
            }

            Attachables = new ReadOnlyCollection <AttachDescriptor>(items);
            OnSettingsLoaded(EventArgs.Empty);
            base.LoadSettingsFromStorage();
        }
Exemplo n.º 2
0
        // based on information from : https://github.com/hesam/SketchSharp/blob/master/SpecSharp/SpecSharp/Microsoft.VisualStudio.Shell/DialogPage.cs
        public override void LoadSettingsFromXml(IVsSettingsReader reader)
        {
            int multiMatch;

            reader.ReadSettingLong(ATASettings.Keys.AttachDescriptorDefaultMultipleMatchHandling, out multiMatch);
            MultipleMatchHandlingDefault = multiMatch == 0 ? MultiMatchOptionsGlobal.All: (MultiMatchOptionsGlobal)multiMatch;

            var items = new List <AttachDescriptor>();

            try
            {
                for (var i = 0; i < ATAConstants.MaxCommands; i++)
                {
                    // read from the xml feed
                    var item = new AttachDescriptor();
                    try
                    {
                        var value = reader.ReadSettingString(ATASettings.Keys.AttachDescriptorName, i);
                        if (value != null)
                        {
                            item.Name = value;
                        }

                        var enabled = reader.ReadSettingStringToBoolean(ATASettings.Keys.AttachDescriptorEnabled, i);
                        if (enabled.HasValue)
                        {
                            item.Enabled = enabled.Value;
                        }

                        var multiMatchHandling = reader.ReadSettingLong(ATASettings.Keys.AttachDescriptorMultipleMatchHandling, i);
                        item.MultiMatchHandling = multiMatchHandling == 0 ? MultiMatchOptions.Global : (MultiMatchOptions)multiMatch;

                        value = reader.ReadSettingString(ATASettings.Keys.AttachDescriptorProcessNames, i);
                        if (value != null)
                        {
                            item.ProcessNames = value.Split(new[] { ATAConstants.ProcessNamesSeparator[0] }, StringSplitOptions.RemoveEmptyEntries);
                        }

                        var parsedBool = reader.ReadSettingStringToBoolean(ATASettings.Keys.AttachDescriptorIsProcessNamesRegex, i);
                        if (parsedBool.HasValue)
                        {
                            item.IsProcessNamesRegex = parsedBool.Value;
                        }

                        value = reader.ReadSettingString(ATASettings.Keys.AttachDescriptorUsername, i);
                        if (value != null)
                        {
                            item.Username = value;
                        }

                        parsedBool = reader.ReadSettingStringToBoolean(ATASettings.Keys.AttachDescriptorIsUsernameRegex, i);
                        if (parsedBool.HasValue)
                        {
                            item.IsUsernameRegex = parsedBool.Value;
                        }

                        value = reader.ReadSettingString(ATASettings.Keys.AttachDescriptorAppPool, i);
                        if (value != null)
                        {
                            item.AppPool = value;
                        }

                        parsedBool = reader.ReadSettingStringToBoolean(ATASettings.Keys.AttachDescriptorIsAppPoolRegex, i);
                        if (parsedBool.HasValue)
                        {
                            item.IsAppPoolRegex = parsedBool.Value;
                        }
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine($"Unhandled exception in LoadSettingsFromXml:{ex}");
                    }

                    if (!string.IsNullOrWhiteSpace(item.Name) && item.ProcessNames != null && item.ProcessNames.Any())
                    {
                        items.Add(item);
                    }
                    else
                    {
                        // this ensures it is a clean item if any of the other properties were saved previously.
                        items.Add(new AttachDescriptor());
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine($"Unhandled exception in LoadSettingsFromXml:{ex}");
            }
            Attachables = new ReadOnlyCollection <AttachDescriptor>(items);
            // notify of newly loaded settings
            OnSettingsLoaded(EventArgs.Empty);
            base.LoadSettingsFromXml(reader);
        }