diff --git a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj index a1537b1d6a..8c11788090 100644 --- a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj +++ b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj @@ -131,6 +131,7 @@ + RegisteredPackageSourcesView.xaml Code diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs index 0cb7af1f7e..df35f7d304 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs @@ -20,8 +20,8 @@ namespace ICSharpCode.PackageManagement.Design public FakeSettings() { - Sections.Add(RegisteredPackageSources.PackageSourcesSectionName, PackageSources); - Sections.Add(RegisteredPackageSources.ActivePackageSourceSectionName, ActivePackageSourceSettings); + Sections.Add(RegisteredPackageSourceSettings.PackageSourcesSectionName, PackageSources); + Sections.Add(RegisteredPackageSourceSettings.ActivePackageSourceSectionName, ActivePackageSourceSettings); } public string GetValue(string section, string key) @@ -51,7 +51,7 @@ namespace ICSharpCode.PackageManagement.Design public KeyValuePair GetValuePassedToSetValueForActivePackageSourceSection() { - return SavedSectionValues[RegisteredPackageSources.ActivePackageSourceSectionName]; + return SavedSectionValues[RegisteredPackageSourceSettings.ActivePackageSourceSectionName]; } public void SetValues(string section, IList> values) @@ -65,7 +65,7 @@ namespace ICSharpCode.PackageManagement.Design public IList> GetValuesPassedToSetValuesForPackageSourcesSection() { - return SavedSectionValueLists[RegisteredPackageSources.PackageSourcesSectionName]; + return SavedSectionValueLists[RegisteredPackageSourceSettings.PackageSourcesSectionName]; } public bool DeleteValue(string section, string key) @@ -83,13 +83,13 @@ namespace ICSharpCode.PackageManagement.Design public bool IsPackageSourcesSectionDeleted { get { - return SectionsDeleted.Contains(RegisteredPackageSources.PackageSourcesSectionName); + return SectionsDeleted.Contains(RegisteredPackageSourceSettings.PackageSourcesSectionName); } } public bool IsActivePackageSourceSectionDeleted { get { - return SectionsDeleted.Contains(RegisteredPackageSources.ActivePackageSourceSectionName); + return SectionsDeleted.Contains(RegisteredPackageSourceSettings.ActivePackageSourceSectionName); } } @@ -102,14 +102,14 @@ namespace ICSharpCode.PackageManagement.Design public void MakeActivePackageSourceSectionNull() { - Sections.Remove(RegisteredPackageSources.ActivePackageSourceSectionName); - Sections.Add(RegisteredPackageSources.ActivePackageSourceSectionName, null); + Sections.Remove(RegisteredPackageSourceSettings.ActivePackageSourceSectionName); + Sections.Add(RegisteredPackageSourceSettings.ActivePackageSourceSectionName, null); } public void MakePackageSourceSectionsNull() { - Sections.Remove(RegisteredPackageSources.PackageSourcesSectionName); - Sections.Add(RegisteredPackageSources.PackageSourcesSectionName, null); + Sections.Remove(RegisteredPackageSourceSettings.PackageSourcesSectionName); + Sections.Add(RegisteredPackageSourceSettings.PackageSourcesSectionName, null); } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs index 799529fdfd..8694de2255 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs @@ -12,20 +12,17 @@ namespace ICSharpCode.PackageManagement { public class PackageManagementOptions { - const string PackageSourcesPropertyName = "PackageSources"; const string PackageDirectoryPropertyName = "PackagesDirectory"; - const string ActivePackageSourcePropertyName = "ActivePackageSource"; const string RecentPackagesPropertyName = "RecentPackages"; - RegisteredPackageSources packageSources; + RegisteredPackageSourceSettings registeredPackageSourceSettings; Properties properties; - ISettings settings; List recentPackages; public PackageManagementOptions(Properties properties, ISettings settings) { this.properties = properties; - this.settings = settings; + registeredPackageSourceSettings = new RegisteredPackageSourceSettings(settings); } public PackageManagementOptions(Properties properties) @@ -39,39 +36,7 @@ namespace ICSharpCode.PackageManagement } public RegisteredPackageSources PackageSources { - get { - if (packageSources == null) { - packageSources = new RegisteredPackageSources(settings); - } - return packageSources; - } - } - - IEnumerable GetSavedPackageSources() - { - return PackageSourceConverter.ConvertFromRegisteredPackageSources(SavedRegisteredPackageSources); - } - - void PackageSourcesChanged(object sender, NotifyCollectionChangedEventArgs e) - { - UpdateSavedPackageSources(); - } - - void UpdateSavedPackageSources() - { - SavedRegisteredPackageSources = - PackageSourceConverter.ConvertToRegisteredPackageSourcesList(packageSources); - } - - /// - /// Use RegisteredPackageSource since PackageSource cannot be serialized. - /// - IList SavedRegisteredPackageSources { - get { - List defaultSources = new List(); - return properties.Get>(PackageSourcesPropertyName, defaultSources); - } - set { properties.Set(PackageSourcesPropertyName, value); } + get { return registeredPackageSourceSettings.PackageSources; } } public string PackagesDirectory { @@ -80,8 +45,8 @@ namespace ICSharpCode.PackageManagement } public PackageSource ActivePackageSource { - get { return PackageSources.ActivePackageSource; } - set { PackageSources.ActivePackageSource = value; } + get { return registeredPackageSourceSettings.ActivePackageSource; } + set { registeredPackageSourceSettings.ActivePackageSource = value; } } public IList RecentPackages { diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageSourceConverter.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageSourceConverter.cs index 00873bfebd..18540aa946 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageSourceConverter.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageSourceConverter.cs @@ -3,30 +3,57 @@ using System; using System.Collections.Generic; +using System.Linq; using NuGet; namespace ICSharpCode.PackageManagement { public static class PackageSourceConverter { - public static IEnumerable ConvertFromRegisteredPackageSources(IEnumerable registeredPackageSources) + public static IEnumerable ConvertFromKeyValuePairs(IEnumerable> packageSources) { - foreach (RegisteredPackageSource registeredPackageSource in registeredPackageSources) { - yield return registeredPackageSource.ToPackageSource(); + if (HasAny(packageSources)) { + foreach (KeyValuePair packageSource in packageSources) { + yield return CreatePackageSourceFromKeyValuePair(packageSource); + } } } - public static IEnumerable ConvertToRegisteredPackageSources(IEnumerable packageSources) + static bool HasAny(IEnumerable> packageSources) { - foreach (PackageSource packageSource in packageSources) { - yield return new RegisteredPackageSource(packageSource); + if (packageSources != null) { + return packageSources.Any(); } + return false; } - public static IList ConvertToRegisteredPackageSourcesList(IEnumerable packageSources) + static PackageSource CreatePackageSourceFromKeyValuePair(KeyValuePair savedPackageSource) { - IEnumerable convertedPackageSources = ConvertToRegisteredPackageSources(packageSources); - return new List(convertedPackageSources); + string source = savedPackageSource.Value; + string name = savedPackageSource.Key; + return new PackageSource(source, name); + } + + public static PackageSource ConvertFromFirstKeyValuePair(IEnumerable> packageSources) + { + if (HasAny(packageSources)) { + return CreatePackageSourceFromKeyValuePair(packageSources.First()); + } + return null; + } + + public static IList> ConvertToKeyValuePairList(IEnumerable packageSources) + { + var convertedPackageSources = new List>(); + foreach (PackageSource source in packageSources) { + convertedPackageSources.Add(ConvertToKeyValuePair(source)); + } + return convertedPackageSources; + } + + public static KeyValuePair ConvertToKeyValuePair(PackageSource source) + { + return new KeyValuePair(source.Name, source.Source); } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourceSettings.cs b/src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourceSettings.cs new file mode 100644 index 0000000000..ee20a2b2fa --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourceSettings.cs @@ -0,0 +1,117 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using System.Collections.Generic; +using System.Collections.Specialized; + +using NuGet; + +namespace ICSharpCode.PackageManagement +{ + public class RegisteredPackageSourceSettings + { + public static readonly string PackageSourcesSectionName = "packageSources"; + public static readonly string ActivePackageSourceSectionName = "activePackageSource"; + + ISettings settings; + RegisteredPackageSources packageSources; + PackageSource activePackageSource; + + public RegisteredPackageSourceSettings(ISettings settings) + { + this.settings = settings; + ReadActivePackageSource(); + } + + void ReadActivePackageSource() + { + IList> packageSources = settings.GetValues(ActivePackageSourceSectionName); + activePackageSource = PackageSourceConverter.ConvertFromFirstKeyValuePair(packageSources); + } + + public RegisteredPackageSources PackageSources { + get { + if (packageSources == null) { + ReadPackageSources(); + } + return packageSources; + } + } + + void ReadPackageSources() + { + var savedPackageSources = GetPackageSourcesFromSettings(); + packageSources = new RegisteredPackageSources(savedPackageSources); + packageSources.CollectionChanged += PackageSourcesChanged; + } + + IEnumerable GetPackageSourcesFromSettings() + { + IList> savedPackageSources = settings.GetValues(PackageSourcesSectionName); + return PackageSourceConverter.ConvertFromKeyValuePairs(savedPackageSources); + } + + void PackageSourcesChanged(object sender, NotifyCollectionChangedEventArgs e) + { + UpdatePackageSourceSettingsWithChanges(); + } + + void UpdatePackageSourceSettingsWithChanges() + { + var newPackageSourceSettings = GetSettingsFromPackageSources(); + SavePackageSourceSettings(newPackageSourceSettings); + } + + IList> GetSettingsFromPackageSources() + { + return PackageSourceConverter.ConvertToKeyValuePairList(packageSources); + } + + KeyValuePair CreateKeyValuePairFromPackageSource(PackageSource source) + { + return new KeyValuePair(source.Name, source.Source); + } + + void SavePackageSourceSettings(IList> newPackageSourceSettings) + { + settings.DeleteSection(PackageSourcesSectionName); + settings.SetValues(PackageSourcesSectionName, newPackageSourceSettings); + } + + public PackageSource ActivePackageSource { + get { + if (PackageSources.Contains(activePackageSource)) { + return activePackageSource; + } + return null; + } + set { + activePackageSource = value; + if (activePackageSource == null) { + RemoveActivePackageSourceSetting(); + } else { + UpdateActivePackageSourceSetting(); + } + } + } + + void RemoveActivePackageSourceSetting() + { + settings.DeleteSection(ActivePackageSourceSectionName); + } + + void UpdateActivePackageSourceSetting() + { + RemoveActivePackageSourceSetting(); + + var activePackageSourceSetting = PackageSourceConverter.ConvertToKeyValuePair(activePackageSource); + SaveActivePackageSourceSetting(activePackageSourceSetting); + } + + void SaveActivePackageSourceSetting(KeyValuePair activePackageSource) + { + settings.SetValue(ActivePackageSourceSectionName, activePackageSource.Key, activePackageSource.Value); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSources.cs b/src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSources.cs index e53da0c67b..6974fd5a93 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSources.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSources.cs @@ -4,9 +4,7 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; -using System.Collections.Specialized; -using System.Linq; -using ICSharpCode.Core; + using NuGet; namespace ICSharpCode.PackageManagement @@ -16,61 +14,15 @@ namespace ICSharpCode.PackageManagement public static readonly string DefaultPackageSourceUrl = "http://go.microsoft.com/fwlink/?LinkID=206669"; public static readonly string DefaultPackageSourceName = "NuGet Official Package Source"; - public static readonly string PackageSourcesSectionName = "packageSources"; - public static readonly string ActivePackageSourceSectionName = "activePackageSource"; - public static readonly PackageSource DefaultPackageSource = new PackageSource(DefaultPackageSourceUrl, DefaultPackageSourceName); - ISettings settings; - PackageSource activePackageSource; - public RegisteredPackageSources(IEnumerable packageSources) { AddPackageSources(packageSources); AddDefaultPackageSourceIfNoRegisteredPackageSources(); } - public RegisteredPackageSources(ISettings settings) - { - this.settings = settings; - AddPackageSources(); - AddDefaultPackageSourceIfNoRegisteredPackageSources(); - ReadActivePackageSource(); - } - - void AddPackageSources() - { - foreach (PackageSource source in GetPackageSourcesFromSettings()) { - Add(source); - } - } - - IEnumerable GetPackageSourcesFromSettings() - { - IList> savedPackageSources = settings.GetValues(PackageSourcesSectionName); - if (HasAny(savedPackageSources)) { - foreach (KeyValuePair packageSource in savedPackageSources) { - yield return CreatePackageSourceFromKeyValuePair(packageSource); - } - } - } - - bool HasAny(IList> packageSources) - { - if (packageSources != null) { - return packageSources.Any(); - } - return false; - } - - PackageSource CreatePackageSourceFromKeyValuePair(KeyValuePair savedPackageSource) - { - string source = savedPackageSource.Value; - string name = savedPackageSource.Key; - return new PackageSource(source, name); - } - void AddPackageSources(IEnumerable packageSources) { foreach (PackageSource source in packageSources) { @@ -92,82 +44,5 @@ namespace ICSharpCode.PackageManagement public bool HasMultiplePackageSources { get { return Count > 1; } } - - void ReadActivePackageSource() - { - IList> packageSources = settings.GetValues(ActivePackageSourceSectionName); - if (HasAny(packageSources)) { - activePackageSource = CreatePackageSourceFromKeyValuePair(packageSources[0]); - } - } - - protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e) - { - base.OnCollectionChanged(e); - UpdatePackageSourceSettingsWithChanges(); - } - - void UpdatePackageSourceSettingsWithChanges() - { - if (settings != null) { - IList> newPackageSourceSettings = GetSettingsFromPackageSources(); - SavePackageSourceSettings(newPackageSourceSettings); - } - } - - IList> GetSettingsFromPackageSources() - { - var settings = new List>(); - foreach (PackageSource source in this) { - settings.Add(CreateKeyValuePairFromPackageSource(source)); - } - return settings; - } - - KeyValuePair CreateKeyValuePairFromPackageSource(PackageSource source) - { - return new KeyValuePair(source.Name, source.Source); - } - - void SavePackageSourceSettings(IList> newPackageSourceSettings) - { - settings.DeleteSection(PackageSourcesSectionName); - settings.SetValues(PackageSourcesSectionName, newPackageSourceSettings); - } - - public PackageSource ActivePackageSource { - get { - if (Contains(activePackageSource)) { - return activePackageSource; - } - return null; - } - set { - activePackageSource = value; - if (activePackageSource == null) { - RemoveActivePackageSourceSetting(); - } else { - UpdateActivePackageSourceSetting(); - } - } - } - - void RemoveActivePackageSourceSetting() - { - settings.DeleteSection(ActivePackageSourceSectionName); - } - - void UpdateActivePackageSourceSetting() - { - RemoveActivePackageSourceSetting(); - - KeyValuePair activePackageSourceSetting = CreateKeyValuePairFromPackageSource(activePackageSource); - SaveActivePackageSourceSetting(activePackageSourceSetting); - } - - void SaveActivePackageSourceSetting(KeyValuePair activePackageSource) - { - settings.SetValue(ActivePackageSourceSectionName, activePackageSource.Key, activePackageSource.Value); - } } }