Browse Source

- AddInManager2: Settings are now managed by an additional service.

- Added possibility to set a different service environment for view models (needed for unit testing).
pull/32/head
Andreas Weizel 13 years ago
parent
commit
4da27b471b
  1. 2
      src/AddIns/Misc/AddInManager2/Project/AddInManager2.csproj
  2. 18
      src/AddIns/Misc/AddInManager2/Project/Src/AddInManagerServices.cs
  3. 50
      src/AddIns/Misc/AddInManager2/Project/Src/Model/AddInManagerSettings.cs
  4. 7
      src/AddIns/Misc/AddInManager2/Project/Src/Model/Interfaces/IAddInManagerServices.cs
  5. 31
      src/AddIns/Misc/AddInManager2/Project/Src/Model/Interfaces/IAddInManagerSettings.cs
  6. 25
      src/AddIns/Misc/AddInManager2/Project/Src/Model/Model.cs
  7. 3
      src/AddIns/Misc/AddInManager2/Project/Src/Model/NuGetPackageManager.cs
  8. 8
      src/AddIns/Misc/AddInManager2/Project/Src/Model/PackageRepositories.cs
  9. 2
      src/AddIns/Misc/AddInManager2/Project/Src/View/AddInsView.xaml
  10. 12
      src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AddInManagerViewModel.cs
  11. 7
      src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AddInPackageViewModelBase.cs
  12. 14
      src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AddInsViewModelBase.cs
  13. 11
      src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs
  14. 15
      src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/InstalledAddInsViewModel.cs
  15. 5
      src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetAddInsViewModelBase.cs
  16. 6
      src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetPackageViewModel.cs
  17. 11
      src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/OfflineAddInViewModel.cs
  18. 12
      src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/PackageRepositoriesViewModel.cs
  19. 16
      src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/UpdatedAddInsViewModel.cs

2
src/AddIns/Misc/AddInManager2/Project/AddInManager2.csproj

@ -97,7 +97,9 @@
<Compile Include="Src\Model\AcceptLicensesEventArgs.cs" /> <Compile Include="Src\Model\AcceptLicensesEventArgs.cs" />
<Compile Include="Src\Model\AddInDependency.cs" /> <Compile Include="Src\Model\AddInDependency.cs" />
<Compile Include="Src\Model\AddInInstallationEventArgs.cs" /> <Compile Include="Src\Model\AddInInstallationEventArgs.cs" />
<Compile Include="Src\Model\AddInManagerSettings.cs" />
<Compile Include="Src\Model\Interfaces\IAddInManagerServices.cs" /> <Compile Include="Src\Model\Interfaces\IAddInManagerServices.cs" />
<Compile Include="Src\Model\Interfaces\IAddInManagerSettings.cs" />
<Compile Include="Src\Model\ManagedAddIn.cs" /> <Compile Include="Src\Model\ManagedAddIn.cs" />
<Compile Include="Src\Model\Interfaces\IAddInManagerEvents.cs" /> <Compile Include="Src\Model\Interfaces\IAddInManagerEvents.cs" />
<Compile Include="Src\Model\Interfaces\IAddInPackage.cs" /> <Compile Include="Src\Model\Interfaces\IAddInPackage.cs" />

18
src/AddIns/Misc/AddInManager2/Project/Src/AddInManagerServices.cs

@ -3,7 +3,6 @@
using System; using System;
using ICSharpCode.AddInManager2.Model; using ICSharpCode.AddInManager2.Model;
using ICSharpCode.AddInManager2.Model.Interfaces;
namespace ICSharpCode.AddInManager2 namespace ICSharpCode.AddInManager2
{ {
@ -37,6 +36,12 @@ namespace ICSharpCode.AddInManager2
get; get;
set; set;
} }
public IAddInManagerSettings Settings
{
get;
set;
}
} }
private static AddInManagerServiceContainer _container; private static AddInManagerServiceContainer _container;
@ -44,8 +49,9 @@ namespace ICSharpCode.AddInManager2
static AddInManagerServices() static AddInManagerServices()
{ {
_container = new AddInManagerServiceContainer(); _container = new AddInManagerServiceContainer();
_container.Settings = new AddInManagerSettings();
_container.Events = new AddInManagerEvents(); _container.Events = new AddInManagerEvents();
_container.Repositories = new PackageRepositories(_container.Events); _container.Repositories = new PackageRepositories(_container.Events, _container.Settings);
_container.NuGet = new NuGetPackageManager(_container.Repositories, _container.Events); _container.NuGet = new NuGetPackageManager(_container.Repositories, _container.Events);
_container.Setup = new AddInSetup(_container.Events, _container.NuGet); _container.Setup = new AddInSetup(_container.Events, _container.NuGet);
} }
@ -82,6 +88,14 @@ namespace ICSharpCode.AddInManager2
} }
} }
public static IAddInManagerSettings Settings
{
get
{
return _container.Settings;
}
}
public static IAddInManagerServices Services public static IAddInManagerServices Services
{ {
get get

50
src/AddIns/Misc/AddInManager2/Project/Src/Model/AddInManagerSettings.cs

@ -0,0 +1,50 @@
// 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 ICSharpCode.SharpDevelop;
namespace ICSharpCode.AddInManager2.Model
{
/// <summary>
/// Handler for managing all persisted settings of AddInManager AddIn.
/// </summary>
public class AddInManagerSettings : IAddInManagerSettings
{
public string[] PackageRepositories
{
get
{
return SD.PropertyService.Get<string[]>("AddInManager2.PackageRepositories", null);
}
set
{
SD.PropertyService.Set<string[]>("AddInManager2.PackageRepositories", value ?? new string[0]);
}
}
public bool ShowPreinstalledAddIns
{
get
{
return SD.PropertyService.Get<bool>("AddInManager2.ShowPreinstalledAddIns", false);
}
set
{
SD.PropertyService.Set<bool>("AddInManager2.ShowPreinstalledAddIns", value);
}
}
public bool ShowPrereleases
{
get
{
return SD.PropertyService.Get<bool>("AddInManager2.ShowPrereleases", false);
}
set
{
SD.PropertyService.Set<bool>("AddInManager2.ShowPrereleases", value);
}
}
}
}

7
src/AddIns/Misc/AddInManager2/Project/Src/Model/Interfaces/IAddInManagerServices.cs

@ -3,7 +3,7 @@
using System; using System;
namespace ICSharpCode.AddInManager2.Model.Interfaces namespace ICSharpCode.AddInManager2.Model
{ {
/// <summary> /// <summary>
/// Basic interface providing instances to all services of AddInManager AddIn. /// Basic interface providing instances to all services of AddInManager AddIn.
@ -29,5 +29,10 @@ namespace ICSharpCode.AddInManager2.Model.Interfaces
{ {
get; get;
} }
IAddInManagerSettings Settings
{
get;
}
} }
} }

31
src/AddIns/Misc/AddInManager2/Project/Src/Model/Interfaces/IAddInManagerSettings.cs

@ -0,0 +1,31 @@
// 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;
namespace ICSharpCode.AddInManager2.Model
{
/// <summary>
/// Description of ISettings.
/// </summary>
public interface IAddInManagerSettings
{
string[] PackageRepositories
{
get;
set;
}
bool ShowPreinstalledAddIns
{
get;
set;
}
bool ShowPrereleases
{
get;
set;
}
}
}

25
src/AddIns/Misc/AddInManager2/Project/Src/Model/Model.cs

@ -4,16 +4,26 @@
using System; using System;
using System.ComponentModel; using System.ComponentModel;
using System.Linq.Expressions; using System.Linq.Expressions;
using ICSharpCode.AddInManager2.Model.Interfaces;
namespace ICSharpCode.AddInManager2.Model namespace ICSharpCode.AddInManager2.Model
{ {
public abstract class Model<TModel> : INotifyPropertyChanged public abstract class Model<TModel> : INotifyPropertyChanged
{ {
private IAddInManagerServices _addInManager = null; private IAddInManagerServices _services = null;
public event PropertyChangedEventHandler PropertyChanged; public event PropertyChangedEventHandler PropertyChanged;
public Model()
{
// Use default services container
_services = AddInManagerServices.Services;
}
public Model(IAddInManagerServices services)
{
_services = services;
}
public string PropertyChangedFor<TProperty>(Expression<Func<TModel, TProperty>> expression) public string PropertyChangedFor<TProperty>(Expression<Func<TModel, TProperty>> expression)
{ {
MemberExpression memberExpression = expression.Body as MemberExpression; MemberExpression memberExpression = expression.Body as MemberExpression;
@ -47,18 +57,11 @@ namespace ICSharpCode.AddInManager2.Model
{ {
get get
{ {
if (_addInManager == null) return _services;
{
return AddInManagerServices.Services;
}
else
{
return _addInManager;
}
} }
set set
{ {
_addInManager = value; _services = value;
} }
} }
} }

3
src/AddIns/Misc/AddInManager2/Project/Src/Model/NuGetPackageManager.cs

@ -7,6 +7,7 @@ using System.IO;
using System.Linq; using System.Linq;
using System.Runtime.Versioning; using System.Runtime.Versioning;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using NuGet; using NuGet;
namespace ICSharpCode.AddInManager2.Model namespace ICSharpCode.AddInManager2.Model
@ -44,7 +45,7 @@ namespace ICSharpCode.AddInManager2.Model
{ {
_repositories = repositories; _repositories = repositories;
_events = events; _events = events;
_packageOutputDirectory = Path.Combine(PropertyService.ConfigDirectory, "NuGet"); _packageOutputDirectory = Path.Combine(SD.PropertyService.ConfigDirectory, "NuGet");
_logger = new PackageMessageLogger(_events); _logger = new PackageMessageLogger(_events);

8
src/AddIns/Misc/AddInManager2/Project/Src/Model/PackageRepositories.cs

@ -23,10 +23,12 @@ namespace ICSharpCode.AddInManager2.Model
private List<PackageSource> _registeredPackageSources; private List<PackageSource> _registeredPackageSources;
private IAddInManagerEvents _events; private IAddInManagerEvents _events;
private IAddInManagerSettings _settings;
public PackageRepositories(IAddInManagerEvents events) public PackageRepositories(IAddInManagerEvents events, IAddInManagerSettings settings)
{ {
_events = events; _events = events;
_settings = settings;
_registeredPackageSources = new List<PackageSource>(); _registeredPackageSources = new List<PackageSource>();
@ -84,7 +86,7 @@ namespace ICSharpCode.AddInManager2.Model
private void LoadPackageSources() private void LoadPackageSources()
{ {
_registeredPackageSources.Clear(); _registeredPackageSources.Clear();
var savedRepositories = SD.PropertyService.Get<string[]>("AddInManager2.PackageRepositories", null); var savedRepositories = _settings.PackageRepositories;
if ((savedRepositories != null) && (savedRepositories.Length > 0)) if ((savedRepositories != null) && (savedRepositories.Length > 0))
{ {
foreach (string repositoryEntry in savedRepositories) foreach (string repositoryEntry in savedRepositories)
@ -114,7 +116,7 @@ namespace ICSharpCode.AddInManager2.Model
private void SavePackageSources() private void SavePackageSources()
{ {
var savedRepositories = _registeredPackageSources.Select(ps => ps.Name + "=" + ps.Source); var savedRepositories = _registeredPackageSources.Select(ps => ps.Name + "=" + ps.Source);
SD.PropertyService.Set<string[]>("AddInManager2.PackageRepositories", savedRepositories.ToArray()); _settings.PackageRepositories = savedRepositories.ToArray();
UpdateCurrentRepository(); UpdateCurrentRepository();
} }

2
src/AddIns/Misc/AddInManager2/Project/Src/View/AddInsView.xaml

@ -535,7 +535,7 @@
x:Name="prereleaseAddInsCheckBox" x:Name="prereleaseAddInsCheckBox"
Margin="4" Margin="4"
Content="{core:Localize AddInManager2.AddInsView.ShowPrereleaseAddIns}" Content="{core:Localize AddInManager2.AddInsView.ShowPrereleaseAddIns}"
IsChecked="{Binding Path=ShowPrereleaseAddins, UpdateSourceTrigger=PropertyChanged}" IsChecked="{Binding Path=ShowPrereleases, UpdateSourceTrigger=PropertyChanged}"
Command="{Binding Path=UpdatePrereleaseFilterCommand}" /> Command="{Binding Path=UpdatePrereleaseFilterCommand}" />
</Grid> </Grid>
</StackPanel> </StackPanel>

12
src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AddInManagerViewModel.cs

@ -21,6 +21,18 @@ namespace ICSharpCode.AddInManager2.ViewModel
private bool _hasError; private bool _hasError;
public AddInManagerViewModel() public AddInManagerViewModel()
: base()
{
Initialize();
}
public AddInManagerViewModel(IAddInManagerServices services)
: base(services)
{
Initialize();
}
private void Initialize()
{ {
// Visuals // Visuals
this.Title = SD.ResourceService.GetString("AddInManager.Title"); this.Title = SD.ResourceService.GetString("AddInManager.Title");

7
src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AddInPackageViewModelBase.cs

@ -22,6 +22,13 @@ namespace ICSharpCode.AddInManager2.ViewModel
private DelegateCommand optionsCommand; private DelegateCommand optionsCommand;
public AddInPackageViewModelBase() public AddInPackageViewModelBase()
: base()
{
CreateCommands();
}
public AddInPackageViewModelBase(IAddInManagerServices services)
: base(services)
{ {
CreateCommands(); CreateCommands();
} }

14
src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AddInsViewModelBase.cs

@ -22,6 +22,18 @@ namespace ICSharpCode.AddInManager2.ViewModel
private ObservableCollection<PackageSource> _packageSources; private ObservableCollection<PackageSource> _packageSources;
public AddInsViewModelBase() public AddInsViewModelBase()
:base()
{
Initialize();
}
public AddInsViewModelBase(IAddInManagerServices services)
: base(services)
{
Initialize();
}
private void Initialize()
{ {
// Initialization of internal lists // Initialization of internal lists
_pages = new Pages(); _pages = new Pages();
@ -37,7 +49,7 @@ namespace ICSharpCode.AddInManager2.ViewModel
CreateCommands(); CreateCommands();
} }
void CreateCommands() private void CreateCommands()
{ {
ShowNextPageCommand = new DelegateCommand(param => ShowNextPage()); ShowNextPageCommand = new DelegateCommand(param => ShowNextPage());
ShowPreviousPageCommand = new DelegateCommand(param => ShowPreviousPage()); ShowPreviousPageCommand = new DelegateCommand(param => ShowPreviousPage());

11
src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs

@ -19,6 +19,17 @@ namespace ICSharpCode.AddInManager2.ViewModel
{ {
public AvailableAddInsViewModel() public AvailableAddInsViewModel()
: base() : base()
{
Initialize();
}
public AvailableAddInsViewModel(IAddInManagerServices services)
: base(services)
{
Initialize();
}
private void Initialize()
{ {
IsSearchable = true; IsSearchable = true;
ShowPackageSources = true; ShowPackageSources = true;

15
src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/InstalledAddInsViewModel.cs

@ -20,6 +20,17 @@ namespace ICSharpCode.AddInManager2.ViewModel
{ {
public InstalledAddInsViewModel() public InstalledAddInsViewModel()
: base() : base()
{
Initialize();
}
public InstalledAddInsViewModel(IAddInManagerServices services)
: base(services)
{
Initialize();
}
private void Initialize()
{ {
AllowInstallFromArchive = true; AllowInstallFromArchive = true;
HasFilterForPreinstalled = true; HasFilterForPreinstalled = true;
@ -140,12 +151,12 @@ namespace ICSharpCode.AddInManager2.ViewModel
private void LoadPreinstalledAddInFilter() private void LoadPreinstalledAddInFilter()
{ {
ShowPreinstalledAddIns = SD.PropertyService.Get<bool>("AddInManager2.ShowPreinstalledAddIns", false); ShowPreinstalledAddIns = AddInManager.Settings.ShowPreinstalledAddIns;
} }
private void SavePreinstalledAddInFilter() private void SavePreinstalledAddInFilter()
{ {
SD.PropertyService.Set<bool>("AddInManager2.ShowPreinstalledAddIns", ShowPreinstalledAddIns); AddInManager.Settings.ShowPreinstalledAddIns = ShowPreinstalledAddIns;
} }
protected override void InstallFromArchive() protected override void InstallFromArchive()

5
src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetAddInsViewModelBase.cs

@ -23,6 +23,11 @@ namespace ICSharpCode.AddInManager2.ViewModel
{ {
} }
public NuGetAddInsViewModelBase(IAddInManagerServices services)
: base(services)
{
}
/// <summary> /// <summary>
/// Returns all the packages. /// Returns all the packages.
/// </summary> /// </summary>

6
src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetPackageViewModel.cs

@ -24,6 +24,12 @@ namespace ICSharpCode.AddInManager2.ViewModel
this._package = package; this._package = package;
} }
public NuGetPackageViewModel(IAddInManagerServices services, IPackage package)
: base(services)
{
this._package = package;
}
public IPackage Package public IPackage Package
{ {
get get

11
src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/OfflineAddInViewModel.cs

@ -35,6 +35,17 @@ namespace ICSharpCode.AddInManager2.ViewModel
public OfflineAddInsViewModelBase(ManagedAddIn addIn) public OfflineAddInsViewModelBase(ManagedAddIn addIn)
: base() : base()
{
Initialize(addIn);
}
public OfflineAddInsViewModelBase(IAddInManagerServices services, ManagedAddIn addIn)
: base(services)
{
Initialize(addIn);
}
private void Initialize(ManagedAddIn addIn)
{ {
_markedAddIn = addIn; _markedAddIn = addIn;
if (_markedAddIn != null) if (_markedAddIn != null)

12
src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/PackageRepositoriesViewModel.cs

@ -31,6 +31,18 @@ namespace ICSharpCode.AddInManager2.ViewModel
PackageRepository selectedPackageRepository; PackageRepository selectedPackageRepository;
public PackageRepositoriesViewModel() public PackageRepositoriesViewModel()
: base()
{
Initialize();
}
public PackageRepositoriesViewModel(IAddInManagerServices services)
: base(services)
{
Initialize();
}
private void Initialize()
{ {
this.packageSources = new ObservableCollection<PackageSource>(); this.packageSources = new ObservableCollection<PackageSource>();
CreateCommands(); CreateCommands();

16
src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/UpdatedAddInsViewModel.cs

@ -23,10 +23,23 @@ namespace ICSharpCode.AddInManager2.ViewModel
public UpdatedAddInsViewModel() public UpdatedAddInsViewModel()
: base() : base()
{
Initialize();
}
public UpdatedAddInsViewModel(IAddInManagerServices services)
: base(services)
{
Initialize();
}
private void Initialize()
{ {
IsSearchable = true; IsSearchable = true;
HasFilterForPrereleases = true; HasFilterForPrereleases = true;
Title = SD.ResourceService.GetString("AddInManager2.Views.Updates");; Title = SD.ResourceService.GetString("AddInManager2.Views.Updates");
ShowPrereleases = AddInManager.Settings.ShowPrereleases;
AddInManager.Events.AddInInstalled += NuGetPackagesChanged; AddInManager.Events.AddInInstalled += NuGetPackagesChanged;
AddInManager.Events.AddInUninstalled += NuGetPackagesChanged; AddInManager.Events.AddInUninstalled += NuGetPackagesChanged;
@ -93,6 +106,7 @@ namespace ICSharpCode.AddInManager2.ViewModel
protected override void UpdatePrereleaseFilter() protected override void UpdatePrereleaseFilter()
{ {
AddInManager.Settings.ShowPrereleases = ShowPrereleases;
ReadPackages(); ReadPackages();
} }

Loading…
Cancel
Save