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 @@ -9,7 +9,7 @@ namespace ICSharpCode.AddInManager2.Tests.Fakes
{
public class FakePackageRepositories : IPackageRepositories
{
public NuGet.IPackageRepository Registered
public NuGet.IPackageRepository AllRegistered
{
get
{
@ -29,6 +29,14 @@ namespace ICSharpCode.AddInManager2.Tests.Fakes @@ -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)
{
throw new NotImplementedException();

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

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

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

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

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

@ -17,8 +17,9 @@ namespace ICSharpCode.AddInManager2.Model @@ -17,8 +17,9 @@ namespace ICSharpCode.AddInManager2.Model
/// </summary>
public class PackageRepositories : IPackageRepositories
{
private IPackageRepository _currentRepository;
private IPackageRepository _aggregatedRepository;
private List<PackageSource> _registeredPackageSources;
private IEnumerable<IPackageRepository> _registeredPackageRepositories;
private IAddInManagerEvents _events;
private IAddInManagerSettings _settings;
@ -34,11 +35,11 @@ namespace ICSharpCode.AddInManager2.Model @@ -34,11 +35,11 @@ namespace ICSharpCode.AddInManager2.Model
UpdateCurrentRepository();
}
public IPackageRepository Registered
public IPackageRepository AllRegistered
{
get
{
return _currentRepository;
return _aggregatedRepository;
}
}
@ -62,6 +63,14 @@ namespace ICSharpCode.AddInManager2.Model @@ -62,6 +63,14 @@ namespace ICSharpCode.AddInManager2.Model
}
}
public IEnumerable<IPackageRepository> RegisteredPackageRepositories
{
get
{
return _registeredPackageRepositories;
}
}
public IPackageRepository GetRepositoryFromSource(PackageSource packageSource)
{
IPackageRepository resultRepository = null;
@ -72,7 +81,7 @@ namespace ICSharpCode.AddInManager2.Model @@ -72,7 +81,7 @@ namespace ICSharpCode.AddInManager2.Model
else
{
// If no active repository is set, get packages from all repositories
resultRepository = _currentRepository;
resultRepository = _aggregatedRepository;
}
return resultRepository;
@ -127,11 +136,11 @@ namespace ICSharpCode.AddInManager2.Model @@ -127,11 +136,11 @@ namespace ICSharpCode.AddInManager2.Model
private void UpdateCurrentRepository()
{
var repositories =
_registeredPackageRepositories =
_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 @@ -8,7 +8,7 @@ namespace ICSharpCode.AddInManager2.Model
{
public class PackageRepository : Model<PackageRepository>
{
// RegisteredPackageSource packageSource;
private int _highlightCount;
public PackageRepository()
{
@ -16,43 +16,60 @@ namespace ICSharpCode.AddInManager2.Model @@ -16,43 +16,60 @@ namespace ICSharpCode.AddInManager2.Model
public PackageRepository(PackageSource packageSource)
{
// this.packageSource = new RegisteredPackageSource(packageSource);
Name = packageSource.Name;
SourceUrl = packageSource.Source;
}
public string Name
{
// get
// {
// return packageSource.Name;
// TODO
// return null;
// }
// set
// {
// packageSource.Name = value;
// }
get;
set;
}
public string SourceUrl
{
// get
// {
// return packageSource.Source;
// TODO
// return null;
// }
// set
// {
// packageSource.Source = value;
// }
get;
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()
{
return new PackageSource(SourceUrl, Name);

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

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

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

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

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

@ -49,7 +49,7 @@ namespace ICSharpCode.AddInManager2.ViewModel @@ -49,7 +49,7 @@ namespace ICSharpCode.AddInManager2.ViewModel
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)

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

@ -85,8 +85,43 @@ namespace ICSharpCode.AddInManager2.ViewModel @@ -85,8 +85,43 @@ namespace ICSharpCode.AddInManager2.ViewModel
{
IQueryable<IPackage> localPackages = installedPackages;
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();
}

Loading…
Cancel
Save