diff --git a/src/AddIns/Misc/AddInManager2/Project/AddInManager2.addin b/src/AddIns/Misc/AddInManager2/Project/AddInManager2.addin index 8182d49efa..85e416c3d2 100644 --- a/src/AddIns/Misc/AddInManager2/Project/AddInManager2.addin +++ b/src/AddIns/Misc/AddInManager2/Project/AddInManager2.addin @@ -23,7 +23,7 @@ + insertafter="ToolsOptions"> The application will try to download and install them, as well. Do you want to continue? + + Search: + + + Repository: + \ No newline at end of file diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/AddInManagerServices.cs b/src/AddIns/Misc/AddInManager2/Project/Src/AddInManagerServices.cs index fa6f5bc794..b273719c76 100644 --- a/src/AddIns/Misc/AddInManager2/Project/Src/AddInManagerServices.cs +++ b/src/AddIns/Misc/AddInManager2/Project/Src/AddInManagerServices.cs @@ -45,7 +45,7 @@ namespace ICSharpCode.AddInManager2 { _container = new AddInManagerServiceContainer(); _container.Events = new AddInManagerEvents(); - _container.Repositories = new PackageRepositories(); + _container.Repositories = new PackageRepositories(_container.Events); _container.NuGet = new NuGetPackageManager(_container.Repositories, _container.Events); _container.Setup = new AddInSetup(_container.Events, _container.NuGet); } diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/Model/AddInManagerEvents.cs b/src/AddIns/Misc/AddInManager2/Project/Src/Model/AddInManagerEvents.cs index 5500a1cd91..7bf7cddff2 100644 --- a/src/AddIns/Misc/AddInManager2/Project/Src/Model/AddInManagerEvents.cs +++ b/src/AddIns/Misc/AddInManager2/Project/Src/Model/AddInManagerEvents.cs @@ -100,5 +100,15 @@ namespace ICSharpCode.AddInManager2.Model AcceptLicenses(this, e); } } + + public event EventHandler PackageSourcesChanged; + + public void OnPackageSourcesChanged(EventArgs e) + { + if (PackageSourcesChanged != null) + { + PackageSourcesChanged(this, e); + } + } } } diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/Model/AddInSetup.cs b/src/AddIns/Misc/AddInManager2/Project/Src/Model/AddInSetup.cs index be4168d45f..f4ce65da0c 100644 --- a/src/AddIns/Misc/AddInManager2/Project/Src/Model/AddInSetup.cs +++ b/src/AddIns/Misc/AddInManager2/Project/Src/Model/AddInSetup.cs @@ -108,7 +108,7 @@ namespace ICSharpCode.AddInManager2.Model { if (addIn.Manifest.PrimaryIdentity == null) { - throw new AddInLoadException(ResourceService.GetString("AddInManager.AddInMustHaveIdentity")); + throw new AddInLoadException(SD.ResourceService.GetString("AddInManager.AddInMustHaveIdentity")); } // Try to find this AddIn in current registry @@ -178,7 +178,7 @@ namespace ICSharpCode.AddInManager2.Model AddIn addIn = AddIn.Load(SD.AddInTree, addInManifestFile); if (addIn.Manifest.PrimaryIdentity == null) { - throw new AddInLoadException(ResourceService.GetString("AddInManager.AddInMustHaveIdentity")); + throw new AddInLoadException(SD.ResourceService.GetString("AddInManager.AddInMustHaveIdentity")); } // Try to find this AddIn in current registry diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/Model/Interfaces/IAddInManagerEvents.cs b/src/AddIns/Misc/AddInManager2/Project/Src/Model/Interfaces/IAddInManagerEvents.cs index 8828207538..30a7de7441 100644 --- a/src/AddIns/Misc/AddInManager2/Project/Src/Model/Interfaces/IAddInManagerEvents.cs +++ b/src/AddIns/Misc/AddInManager2/Project/Src/Model/Interfaces/IAddInManagerEvents.cs @@ -37,5 +37,8 @@ namespace ICSharpCode.AddInManager2.Model event EventHandler AcceptLicenses; void OnAcceptLicenses(AcceptLicensesEventArgs e); + + event EventHandler PackageSourcesChanged; + void OnPackageSourcesChanged(EventArgs e); } } diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/Model/PackageRepositories.cs b/src/AddIns/Misc/AddInManager2/Project/Src/Model/PackageRepositories.cs index e42477ca84..11e1a716b4 100644 --- a/src/AddIns/Misc/AddInManager2/Project/Src/Model/PackageRepositories.cs +++ b/src/AddIns/Misc/AddInManager2/Project/Src/Model/PackageRepositories.cs @@ -3,6 +3,8 @@ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Collections.Specialized; using System.Linq; using ICSharpCode.Core; using ICSharpCode.SharpDevelop; @@ -19,10 +21,15 @@ namespace ICSharpCode.AddInManager2.Model private IPackageRepository _activeRepository; private PackageSource _activeSource; private List _registeredPackageSources; + + private IAddInManagerEvents _events; - public PackageRepositories() + public PackageRepositories(IAddInManagerEvents events) { + _events = events; + _registeredPackageSources = new List(); + LoadPackageSources(); UpdateCurrentRepository(); UpdateActiveRepository(); @@ -68,6 +75,9 @@ namespace ICSharpCode.AddInManager2.Model _registeredPackageSources.Clear(); _registeredPackageSources.AddRange(value); SavePackageSources(); + + // Send around the update + _events.OnPackageSourcesChanged(new EventArgs()); } } @@ -92,16 +102,19 @@ namespace ICSharpCode.AddInManager2.Model { // If we don't have any repositories, so add the default one PackageSource defaultPackageSource = - new PackageSource("https://nuget.org/api/v2", ResourceService.GetString("AddInManager2.DefaultRepository")); + new PackageSource("https://nuget.org/api/v2", SD.ResourceService.GetString("AddInManager2.DefaultRepository")); _registeredPackageSources.Add(defaultPackageSource); SavePackageSources(); } + + // Send around the update + _events.OnPackageSourcesChanged(new EventArgs()); } private void SavePackageSources() { var savedRepositories = _registeredPackageSources.Select(ps => ps.Name + "=" + ps.Source); - PropertyService.Set("AddInManager2.PackageRepositories", savedRepositories.ToArray()); + SD.PropertyService.Set("AddInManager2.PackageRepositories", savedRepositories.ToArray()); UpdateCurrentRepository(); } @@ -113,11 +126,16 @@ namespace ICSharpCode.AddInManager2.Model { _currentRepository = new AggregateRepository(repositories); } + else + { + // We have no repositories in configuration -> then we can't have an active source + ActiveSource = null; + } } private void UpdateActiveRepository() { - if ((_activeSource == null) && (_registeredPackageSources != null)) + if ((_activeSource == null) && (_registeredPackageSources != null) && _registeredPackageSources.Any()) { _activeSource = _registeredPackageSources[0]; } diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/View/AddInsView.xaml b/src/AddIns/Misc/AddInManager2/Project/Src/View/AddInsView.xaml index aa3da5dbf4..1a41cf0fca 100644 --- a/src/AddIns/Misc/AddInManager2/Project/Src/View/AddInsView.xaml +++ b/src/AddIns/Misc/AddInManager2/Project/Src/View/AddInsView.xaml @@ -419,6 +419,7 @@ Visibility="{Binding Path=IsSearchable, Converter={StaticResource BoolToVisibility}}" Grid.Row="0"> + @@ -426,17 +427,34 @@ + + - + _packageSources; + public AddInsViewModelBase() { + // Initialization of internal lists _pages = new Pages(); _highlightCount = 0; AddInPackages = new ObservableCollection(); + _packageSources = new ObservableCollection(); ErrorMessage = String.Empty; + // Update package sources list and ensure that it's updated automatically from now + UpdatePackageSources(); + AddInManager.Events.PackageSourcesChanged += AddInManager_Events_PackageSourcesChanged; + CreateCommands(); } @@ -382,14 +390,29 @@ namespace ICSharpCode.AddInManager2.ViewModel set; } - public IEnumerable PackageSources + public ObservableCollection PackageSources { get { - foreach (PackageSource packageSource in AddInManager.Repositories.RegisteredPackageSources) - { - yield return packageSource; - } + return _packageSources; + } + } + + private void UpdatePackageSources() + { + PackageSource oldValue = SelectedPackageSource; + + // Refill package sources list + _packageSources.Clear(); + foreach (PackageSource packageSource in AddInManager.Repositories.RegisteredPackageSources) + { + _packageSources.Add(packageSource); + } + + // Try to select the same active source, again + if ((oldValue != null) && _packageSources.Contains(oldValue) && (oldValue != SelectedPackageSource)) + { + SelectedPackageSource = oldValue; } } @@ -403,6 +426,7 @@ namespace ICSharpCode.AddInManager2.ViewModel { AddInManager.Repositories.ActiveSource = value; ReadPackages(); + OnPropertyChanged(m => m.SelectedPackageSource); } } @@ -426,5 +450,12 @@ namespace ICSharpCode.AddInManager2.ViewModel packageViewModel.UpdateInstallationState(); } } + + + private void AddInManager_Events_PackageSourcesChanged(object sender, EventArgs e) + { + // Update the list of package sources + UpdatePackageSources(); + } } } diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs index ba0e950ea4..7eabb18c11 100644 --- a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs +++ b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs @@ -10,6 +10,7 @@ using System.Text; using System.Windows.Input; using ICSharpCode.AddInManager2.Model; using ICSharpCode.Core; +using ICSharpCode.SharpDevelop; using NuGet; namespace ICSharpCode.AddInManager2.ViewModel @@ -21,7 +22,7 @@ namespace ICSharpCode.AddInManager2.ViewModel { IsSearchable = true; ShowPackageSources = true; - Title = ResourceService.GetString("AddInManager2.Views.Available"); + Title = SD.ResourceService.GetString("AddInManager2.Views.Available"); AddInManager.Events.AddInInstalled += AddInInstallationStateChanged; AddInManager.Events.AddInUninstalled += AddInInstallationStateChanged; diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/InstalledAddInsViewModel.cs b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/InstalledAddInsViewModel.cs index 5359cde867..a21e6a795c 100644 --- a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/InstalledAddInsViewModel.cs +++ b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/InstalledAddInsViewModel.cs @@ -10,6 +10,7 @@ using System.Text; using System.Windows.Input; using ICSharpCode.AddInManager2.Model; using ICSharpCode.Core; +using ICSharpCode.SharpDevelop; using Microsoft.Win32; using NuGet; @@ -22,7 +23,7 @@ namespace ICSharpCode.AddInManager2.ViewModel { AllowInstallFromArchive = true; HasFilterForPreinstalled = true; - Title = ResourceService.GetString("AddInManager2.Views.Installed"); + Title = SD.ResourceService.GetString("AddInManager2.Views.Installed"); // Load preinstalled AddIn filter LoadPreinstalledAddInFilter(); @@ -139,18 +140,18 @@ namespace ICSharpCode.AddInManager2.ViewModel private void LoadPreinstalledAddInFilter() { - ShowPreinstalledAddIns = PropertyService.Get("AddInManager2.ShowPreinstalledAddIns", false); + ShowPreinstalledAddIns = SD.PropertyService.Get("AddInManager2.ShowPreinstalledAddIns", false); } private void SavePreinstalledAddInFilter() { - PropertyService.Set("AddInManager2.ShowPreinstalledAddIns", ShowPreinstalledAddIns); + SD.PropertyService.Set("AddInManager2.ShowPreinstalledAddIns", ShowPreinstalledAddIns); } protected override void InstallFromArchive() { OpenFileDialog dlg = new OpenFileDialog(); - dlg.Filter = ResourceService.GetString("AddInManager2.SDAddInFileFilter"); + dlg.Filter = SD.ResourceService.GetString("AddInManager2.SDAddInFileFilter"); dlg.Multiselect = true; var showDialogResult = dlg.ShowDialog(); if (showDialogResult.HasValue && showDialogResult.Value) diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetPackageViewModel.cs b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetPackageViewModel.cs index e421fdf8ce..dc6391b676 100644 --- a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetPackageViewModel.cs +++ b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetPackageViewModel.cs @@ -8,6 +8,7 @@ using System.Linq; using System.Windows.Input; using ICSharpCode.AddInManager2.Model; using ICSharpCode.Core; +using ICSharpCode.SharpDevelop; using NuGet; namespace ICSharpCode.AddInManager2.ViewModel @@ -214,20 +215,20 @@ namespace ICSharpCode.AddInManager2.ViewModel { if (IsUpdate) { - return ResourceService.GetString("AddInManager.AddInUpdated"); + return SD.ResourceService.GetString("AddInManager.AddInUpdated"); } else { - return SurroundWithParantheses(ResourceService.GetString("AddInManager.AddInInstalled")); + return SurroundWithParantheses(SD.ResourceService.GetString("AddInManager.AddInInstalled")); } } else if (IsRemoved) { - return SurroundWithParantheses(ResourceService.GetString("AddInManager.AddInRemoved")); + return SurroundWithParantheses(SD.ResourceService.GetString("AddInManager.AddInRemoved")); } else if (!IsEnabled) { - return SurroundWithParantheses(ResourceService.GetString("AddInManager.AddInDisabled")); + return SurroundWithParantheses(SD.ResourceService.GetString("AddInManager.AddInDisabled")); } else { diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/OfflineAddInViewModel.cs b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/OfflineAddInViewModel.cs index 838cc201ea..a64b64903a 100644 --- a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/OfflineAddInViewModel.cs +++ b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/OfflineAddInViewModel.cs @@ -7,6 +7,7 @@ using System.Linq; using System.Windows.Input; using ICSharpCode.AddInManager2.Model; using ICSharpCode.Core; +using ICSharpCode.SharpDevelop; using NuGet; namespace ICSharpCode.AddInManager2.ViewModel @@ -287,38 +288,38 @@ namespace ICSharpCode.AddInManager2.ViewModel { if (_addIn.Action == AddInAction.Install) { - return SurroundWithParantheses(ResourceService.GetString("AddInManager.AddInInstalled")); + return SurroundWithParantheses(SD.ResourceService.GetString("AddInManager.AddInInstalled")); } else if (_addIn.Action == AddInAction.Update) { - return ResourceService.GetString("AddInManager.AddInUpdated"); + return SD.ResourceService.GetString("AddInManager.AddInUpdated"); } else if (HasDependencyConflicts) { - return SurroundWithParantheses(ResourceService.GetString("AddInManager.AddInDependencyFailed")); + return SurroundWithParantheses(SD.ResourceService.GetString("AddInManager.AddInDependencyFailed")); } else if (IsRemoved) { - return SurroundWithParantheses(ResourceService.GetString("AddInManager.AddInRemoved")); + return SurroundWithParantheses(SD.ResourceService.GetString("AddInManager.AddInRemoved")); } else if (IsEnabled && !_addIn.Enabled) { - return SurroundWithParantheses(ResourceService.GetString("AddInManager.AddInEnabled")); + return SurroundWithParantheses(SD.ResourceService.GetString("AddInManager.AddInEnabled")); } else if (!IsEnabled) { if (_addIn.Enabled) { - return SurroundWithParantheses(ResourceService.GetString("AddInManager.AddInWillBeDisabled")); + return SurroundWithParantheses(SD.ResourceService.GetString("AddInManager.AddInWillBeDisabled")); } else { - return SurroundWithParantheses(ResourceService.GetString("AddInManager.AddInDisabled")); + return SurroundWithParantheses(SD.ResourceService.GetString("AddInManager.AddInDisabled")); } } else if (_addIn.Action == AddInAction.InstalledTwice) { - return SurroundWithParantheses(ResourceService.GetString("AddInManager.AddInInstalledTwice")); + return SurroundWithParantheses(SD.ResourceService.GetString("AddInManager.AddInInstalledTwice")); } else { @@ -520,7 +521,7 @@ namespace ICSharpCode.AddInManager2.ViewModel } } ICSharpCode.SharpDevelop.Commands.OptionsCommand.ShowTabbedOptions( - _addIn.Name + " " + ResourceService.GetString("AddInManager.Options"), + _addIn.Name + " " + SD.ResourceService.GetString("AddInManager.Options"), dummyNode); } } diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/PackageRepositoriesViewModel.cs b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/PackageRepositoriesViewModel.cs index 1b0f1d4c6f..ebe7a993ed 100644 --- a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/PackageRepositoriesViewModel.cs +++ b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/PackageRepositoriesViewModel.cs @@ -109,7 +109,6 @@ namespace ICSharpCode.AddInManager2.ViewModel public void Load() { packageSources.Clear(); -// packageSources.AddRange(AddInManager.Repositories.RegisteredPackageSources); NuGet.CollectionExtensions.AddRange(packageSources, AddInManager.Repositories.RegisteredPackageSources); foreach (PackageSource packageSource in packageSources) { diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/UpdatedAddInsViewModel.cs b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/UpdatedAddInsViewModel.cs index 9ead50645c..b577afc478 100644 --- a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/UpdatedAddInsViewModel.cs +++ b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/UpdatedAddInsViewModel.cs @@ -10,6 +10,7 @@ using System.Text; using System.Windows.Input; using ICSharpCode.AddInManager2.Model; using ICSharpCode.Core; +using ICSharpCode.SharpDevelop; using NuGet; namespace ICSharpCode.AddInManager2.ViewModel @@ -25,7 +26,7 @@ namespace ICSharpCode.AddInManager2.ViewModel { IsSearchable = true; HasFilterForPrereleases = true; - Title = ResourceService.GetString("AddInManager2.Views.Updates");; + Title = SD.ResourceService.GetString("AddInManager2.Views.Updates");; AddInManager.Events.AddInInstalled += NuGetPackagesChanged; AddInManager.Events.AddInUninstalled += NuGetPackagesChanged;