// 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(); }
// 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); }