Browse Source

Now number of updates is shown for every NuGet repository in selection ComboBox.

pull/32/head
Andreas Weizel 13 years ago
parent
commit
74c7fff077
  1. 10
      src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackageRepositories.cs
  2. 7
      src/AddIns/Misc/AddInManager2/Project/Src/Model/Interfaces/IPackageRepositories.cs
  3. 2
      src/AddIns/Misc/AddInManager2/Project/Src/Model/NuGetPackageManager.cs
  4. 23
      src/AddIns/Misc/AddInManager2/Project/Src/Model/PackageRepositories.cs
  5. 61
      src/AddIns/Misc/AddInManager2/Project/Src/Model/PackageRepository.cs
  6. 20
      src/AddIns/Misc/AddInManager2/Project/Src/View/AddInsView.xaml
  7. 31
      src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AddInsViewModelBase.cs
  8. 2
      src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs
  9. 39
      src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/UpdatedAddInsViewModel.cs

10
src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackageRepositories.cs

@ -9,7 +9,7 @@ namespace ICSharpCode.AddInManager2.Tests.Fakes
{ {
public class FakePackageRepositories : IPackageRepositories public class FakePackageRepositories : IPackageRepositories
{ {
public NuGet.IPackageRepository Registered public NuGet.IPackageRepository AllRegistered
{ {
get get
{ {
@ -29,6 +29,14 @@ namespace ICSharpCode.AddInManager2.Tests.Fakes
} }
} }
public IEnumerable<NuGet.IPackageRepository> RegisteredPackageRepositories
{
get
{
throw new NotImplementedException();
}
}
public NuGet.IPackageRepository GetRepositoryFromSource(NuGet.PackageSource packageSource) public NuGet.IPackageRepository GetRepositoryFromSource(NuGet.PackageSource packageSource)
{ {
throw new NotImplementedException(); throw new NotImplementedException();

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

@ -9,7 +9,7 @@ namespace ICSharpCode.AddInManager2.Model
{ {
public interface IPackageRepositories public interface IPackageRepositories
{ {
IPackageRepository Registered IPackageRepository AllRegistered
{ {
get; get;
} }
@ -20,6 +20,11 @@ namespace ICSharpCode.AddInManager2.Model
set; set;
} }
IEnumerable<IPackageRepository> RegisteredPackageRepositories
{
get;
}
IPackageRepository GetRepositoryFromSource(PackageSource packageSource); IPackageRepository GetRepositoryFromSource(PackageSource packageSource);
} }
} }

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

@ -110,7 +110,7 @@ namespace ICSharpCode.AddInManager2.Model
} }
// Create new package manager instance // Create new package manager instance
_packageManager = new NuGetPackageManagerImplementation(_repositories.Registered, _packageOutputDirectory); _packageManager = new NuGetPackageManagerImplementation(_repositories.AllRegistered, _packageOutputDirectory);
_packageManager.PackageInstalled += _packageEvents_NuGetPackageInstalled; _packageManager.PackageInstalled += _packageEvents_NuGetPackageInstalled;
_packageManager.PackageUninstalled += _packageEvents_NuGetPackageUninstalled; _packageManager.PackageUninstalled += _packageEvents_NuGetPackageUninstalled;
return _packageManager; return _packageManager;

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

@ -17,8 +17,9 @@ namespace ICSharpCode.AddInManager2.Model
/// </summary> /// </summary>
public class PackageRepositories : IPackageRepositories public class PackageRepositories : IPackageRepositories
{ {
private IPackageRepository _currentRepository; private IPackageRepository _aggregatedRepository;
private List<PackageSource> _registeredPackageSources; private List<PackageSource> _registeredPackageSources;
private IEnumerable<IPackageRepository> _registeredPackageRepositories;
private IAddInManagerEvents _events; private IAddInManagerEvents _events;
private IAddInManagerSettings _settings; private IAddInManagerSettings _settings;
@ -34,11 +35,11 @@ namespace ICSharpCode.AddInManager2.Model
UpdateCurrentRepository(); UpdateCurrentRepository();
} }
public IPackageRepository Registered public IPackageRepository AllRegistered
{ {
get get
{ {
return _currentRepository; return _aggregatedRepository;
} }
} }
@ -62,6 +63,14 @@ namespace ICSharpCode.AddInManager2.Model
} }
} }
public IEnumerable<IPackageRepository> RegisteredPackageRepositories
{
get
{
return _registeredPackageRepositories;
}
}
public IPackageRepository GetRepositoryFromSource(PackageSource packageSource) public IPackageRepository GetRepositoryFromSource(PackageSource packageSource)
{ {
IPackageRepository resultRepository = null; IPackageRepository resultRepository = null;
@ -72,7 +81,7 @@ namespace ICSharpCode.AddInManager2.Model
else else
{ {
// If no active repository is set, get packages from all repositories // If no active repository is set, get packages from all repositories
resultRepository = _currentRepository; resultRepository = _aggregatedRepository;
} }
return resultRepository; return resultRepository;
@ -127,11 +136,11 @@ namespace ICSharpCode.AddInManager2.Model
private void UpdateCurrentRepository() private void UpdateCurrentRepository()
{ {
var repositories = _registeredPackageRepositories =
_registeredPackageSources.Select(packageSource => PackageRepositoryFactory.Default.CreateRepository(packageSource.Source)); _registeredPackageSources.Select(packageSource => PackageRepositoryFactory.Default.CreateRepository(packageSource.Source));
if (repositories.Any()) if (_registeredPackageRepositories.Any())
{ {
_currentRepository = new AggregateRepository(repositories); _aggregatedRepository = new AggregateRepository(_registeredPackageRepositories);
} }
} }
} }

61
src/AddIns/Misc/AddInManager2/Project/Src/Model/PackageRepository.cs

@ -8,7 +8,7 @@ namespace ICSharpCode.AddInManager2.Model
{ {
public class PackageRepository : Model<PackageRepository> public class PackageRepository : Model<PackageRepository>
{ {
// RegisteredPackageSource packageSource; private int _highlightCount;
public PackageRepository() public PackageRepository()
{ {
@ -16,43 +16,60 @@ namespace ICSharpCode.AddInManager2.Model
public PackageRepository(PackageSource packageSource) public PackageRepository(PackageSource packageSource)
{ {
// this.packageSource = new RegisteredPackageSource(packageSource);
Name = packageSource.Name; Name = packageSource.Name;
SourceUrl = packageSource.Source; SourceUrl = packageSource.Source;
} }
public string Name public string Name
{ {
// get
// {
// return packageSource.Name;
// TODO
// return null;
// }
// set
// {
// packageSource.Name = value;
// }
get; get;
set; set;
} }
public string SourceUrl public string SourceUrl
{ {
// get
// {
// return packageSource.Source;
// TODO
// return null;
// }
// set
// {
// packageSource.Source = value;
// }
get; get;
set; set;
} }
public int HighlightCount
{
get
{
return _highlightCount;
}
set
{
_highlightCount = value;
OnPropertyChanged(vm => vm.HighlightCount);
OnPropertyChanged(vm => vm.HasHighlightCount);
OnPropertyChanged(vm => vm.NameWithHighlight);
}
}
public bool HasHighlightCount
{
get
{
return (_highlightCount > 0);
}
}
public string NameWithHighlight
{
get
{
if (_highlightCount > 0)
{
return String.Format("{0} ({1})", Name, _highlightCount);
}
else
{
return Name;
}
}
}
public PackageSource ToPackageSource() public PackageSource ToPackageSource()
{ {
return new PackageSource(SourceUrl, Name); return new PackageSource(SourceUrl, Name);

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

@ -28,7 +28,17 @@
<BooleanToVisibilityConverter x:Key="BoolToVisibility"/> <BooleanToVisibilityConverter x:Key="BoolToVisibility"/>
<DataTemplate x:Key="PackageSourceComboBoxItemTemplate"> <DataTemplate x:Key="PackageSourceComboBoxItemTemplate">
<TextBlock Text="{Binding Path=Name}"/> <TextBlock Text="{Binding Path=NameWithHighlight}">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding HasHighlightCount}" Value="True">
<Setter Property="FontWeight" Value="Bold" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate> </DataTemplate>
<Style x:Key="AddInImageStyle" TargetType="{x:Type Image}"> <Style x:Key="AddInImageStyle" TargetType="{x:Type Image}">
@ -88,7 +98,7 @@
</Style> </Style>
<Style x:Key="PackageSourceComboBoxStyle" TargetType="{x:Type ComboBox}"> <Style x:Key="PackageSourceComboBoxStyle" TargetType="{x:Type ComboBox}">
<!-- <Style.Triggers> <!-- <Style.Triggers>
<DataTrigger Binding="{Binding IsReadingPackages}" Value="True"> <DataTrigger Binding="{Binding IsReadingPackages}" Value="True">
<Setter Property="IsEnabled" Value="False" /> <Setter Property="IsEnabled" Value="False" />
</DataTrigger> </DataTrigger>
@ -473,7 +483,7 @@
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Margin="2, 0, 5, 2" Margin="2, 0, 5, 2"
Visibility="{Binding Path=ShowPackageSources, Converter={StaticResource BoolToVisibility}}" Visibility="{Binding Path=ShowPackageRepositories, Converter={StaticResource BoolToVisibility}}"
Text="{core:Localize AddInManager2.AddInsView.Repository}" /> Text="{core:Localize AddInManager2.AddInsView.Repository}" />
<ComboBox <ComboBox
Grid.Row="0" Grid.Row="0"
@ -482,9 +492,9 @@
Margin="2, 0, 0, 2" Margin="2, 0, 0, 2"
Style="{StaticResource PackageSourceComboBoxStyle}" Style="{StaticResource PackageSourceComboBoxStyle}"
SelectedItem="{Binding Path=SelectedPackageSource}" SelectedItem="{Binding Path=SelectedPackageSource}"
ItemsSource="{Binding Path=PackageSources}" ItemsSource="{Binding Path=PackageRepositories}"
ItemTemplate="{StaticResource PackageSourceComboBoxItemTemplate}" ItemTemplate="{StaticResource PackageSourceComboBoxItemTemplate}"
Visibility="{Binding Path=ShowPackageSources, Converter={StaticResource BoolToVisibility}}"/> Visibility="{Binding Path=ShowPackageRepositories, Converter={StaticResource BoolToVisibility}}"/>
<TextBlock <TextBlock
Grid.Row="1" Grid.Row="1"

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

@ -19,11 +19,11 @@ namespace ICSharpCode.AddInManager2.ViewModel
private Pages _pages; private Pages _pages;
private int _highlightCount; private int _highlightCount;
private string _title; private string _title;
private PackageSource _activePackageSource; private PackageRepository _activePackageSource;
private IPackageRepository _activePackageRepository; private IPackageRepository _activePackageRepository;
private bool _isReadingPackages; private bool _isReadingPackages;
private ObservableCollection<PackageSource> _packageSources; private ObservableCollection<PackageRepository> _packageRepositories;
public AddInsViewModelBase() public AddInsViewModelBase()
:base() :base()
@ -46,7 +46,7 @@ namespace ICSharpCode.AddInManager2.ViewModel
_pages = new Pages(); _pages = new Pages();
_highlightCount = 0; _highlightCount = 0;
AddInPackages = new ObservableCollection<AddInPackageViewModelBase>(); AddInPackages = new ObservableCollection<AddInPackageViewModelBase>();
_packageSources = new ObservableCollection<PackageSource>(); _packageRepositories = new ObservableCollection<PackageRepository>();
ErrorMessage = String.Empty; ErrorMessage = String.Empty;
// Update package sources list and ensure that it's updated automatically from now // Update package sources list and ensure that it's updated automatically from now
@ -418,38 +418,38 @@ namespace ICSharpCode.AddInManager2.ViewModel
set; set;
} }
public ObservableCollection<PackageSource> PackageSources public ObservableCollection<PackageRepository> PackageRepositories
{ {
get get
{ {
return _packageSources; return _packageRepositories;
} }
} }
private void UpdatePackageSources() private void UpdatePackageSources()
{ {
PackageSource oldValue = SelectedPackageSource; PackageRepository oldValue = SelectedPackageSource;
// Refill package sources list // Refill package sources list
_packageSources.Clear(); _packageRepositories.Clear();
foreach (PackageSource packageSource in AddInManager.Repositories.RegisteredPackageSources) foreach (PackageSource packageSource in AddInManager.Repositories.RegisteredPackageSources)
{ {
_packageSources.Add(packageSource); _packageRepositories.Add(new PackageRepository(packageSource));
} }
// Try to select the same active source, again // Try to select the same active source, again
if ((oldValue != null) && _packageSources.Contains(oldValue) && (oldValue != SelectedPackageSource)) if ((oldValue != null) && _packageRepositories.Contains(oldValue) && (oldValue != SelectedPackageSource))
{ {
SelectedPackageSource = oldValue; SelectedPackageSource = oldValue;
} }
else else
{ {
// Select first source // Select first source
SelectedPackageSource = _packageSources.FirstOrDefault(); SelectedPackageSource = _packageRepositories.FirstOrDefault();
} }
} }
public PackageSource SelectedPackageSource public PackageRepository SelectedPackageSource
{ {
get get
{ {
@ -460,7 +460,14 @@ namespace ICSharpCode.AddInManager2.ViewModel
SD.Log.Debug("[AddInManager2] AddInsViewModelBase: Changed package source"); SD.Log.Debug("[AddInManager2] AddInsViewModelBase: Changed package source");
_activePackageSource = value; _activePackageSource = value;
_activePackageRepository = AddInManager.Repositories.GetRepositoryFromSource(_activePackageSource); if (_activePackageSource != null)
{
_activePackageRepository = AddInManager.Repositories.GetRepositoryFromSource(_activePackageSource.ToPackageSource());
}
else
{
_activePackageRepository = null;
}
ReadPackages(); ReadPackages();
OnPropertyChanged(m => m.SelectedPackageSource); OnPropertyChanged(m => m.SelectedPackageSource);
} }

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

@ -49,7 +49,7 @@ namespace ICSharpCode.AddInManager2.ViewModel
protected override IQueryable<IPackage> GetAllPackages() protected override IQueryable<IPackage> GetAllPackages()
{ {
return (ActiveRepository ?? AddInManager.Repositories.Registered).GetPackages(); return (ActiveRepository ?? AddInManager.Repositories.AllRegistered).GetPackages();
} }
protected override IEnumerable<IPackage> GetFilteredPackagesBeforePagingResults(IQueryable<IPackage> allPackages) protected override IEnumerable<IPackage> GetFilteredPackagesBeforePagingResults(IQueryable<IPackage> allPackages)

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

@ -85,8 +85,43 @@ namespace ICSharpCode.AddInManager2.ViewModel
{ {
IQueryable<IPackage> localPackages = installedPackages; IQueryable<IPackage> localPackages = installedPackages;
localPackages = FilterPackages(localPackages); localPackages = FilterPackages(localPackages);
var updatedPackages = GetUpdatedPackages(ActiveRepository ?? AddInManager.Repositories.Registered, localPackages);
HighlightCount = updatedPackages.Count(); int allUpdatesCount = 0;
IEnumerable<IPackage> updatedPackages = null;
var allRepositories = AddInManager.Repositories.RegisteredPackageRepositories;
if (allRepositories != null)
{
// Run through all repositories and collect counts of updated packages
foreach (var repository in allRepositories)
{
var updatesForThisRepository = GetUpdatedPackages(repository, localPackages);
if (ActiveRepository.Source == repository.Source)
{
// This is also the user-selected repository we need the package list from
updatedPackages = updatesForThisRepository;
}
// Set update count for repository in list
var packageRepositoryModel = PackageRepositories.Where(pr => pr.SourceUrl == repository.Source).FirstOrDefault();
if (packageRepositoryModel != null)
{
int updatesCount = updatesForThisRepository.Count();
packageRepositoryModel.HighlightCount = updatesCount;
allUpdatesCount += updatesCount;
}
}
}
if (updatedPackages == null)
{
// Just as fallback, if something goes wrong in upper loop
updatedPackages = GetUpdatedPackages(AddInManager.Repositories.AllRegistered, localPackages);
allUpdatesCount = updatedPackages.Count();
}
HighlightCount = allUpdatesCount;
return updatedPackages.AsQueryable(); return updatedPackages.AsQueryable();
} }

Loading…
Cancel
Save