Browse Source

PackageManagement: OK, need better refresh

pull/374/head
Dragan 12 years ago
parent
commit
4596248b9a
  1. 2
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
  2. 80
      src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackageViewModel.cs
  3. 44
      src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackageViewModelFactory.cs
  4. 2
      src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackagesViewModel.cs
  5. 12
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs
  6. 182
      src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs
  7. 3
      src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModelFactory.cs
  8. 24
      src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs
  9. 3
      src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModels.cs
  10. 10
      src/AddIns/Misc/PackageManagement/Project/Src/SelectedProjectsForUpdatedPackages.cs
  11. 9
      src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModel.cs
  12. 11
      src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModelFactory.cs
  13. 4
      src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackagesViewModel.cs
  14. 2
      src/AddIns/Misc/PackageManagement/Project/Src/ViewModelBase.cs

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

@ -164,8 +164,6 @@ @@ -164,8 +164,6 @@
<Compile Include="Src\IFieldExtensions.cs" />
<Compile Include="Src\IDocumentLoader.cs" />
<Compile Include="Src\IMethodOrPropertyExtensions.cs" />
<Compile Include="Src\InstalledPackageViewModel.cs" />
<Compile Include="Src\InstalledPackageViewModelFactory.cs" />
<Compile Include="Src\IPackageManagementSelectedProject.cs" />
<Compile Include="Src\ISelectProjectsService.cs" />
<Compile Include="Src\ISolutionPackageRepository.cs" />

80
src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackageViewModel.cs

@ -1,80 +0,0 @@ @@ -1,80 +0,0 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
using System.Collections.Generic;
using NuGet;
namespace ICSharpCode.PackageManagement
{
public class InstalledPackageViewModel : PackageViewModel
{
public InstalledPackageViewModel(
IPackageViewModelParent parent,
IPackageFromRepository package,
SelectedProjectsForInstalledPackages selectedProjects,
IPackageManagementEvents packageManagementEvents,
IPackageActionRunner actionRunner,
ILogger logger)
: base(parent, package, selectedProjects, packageManagementEvents, actionRunner, logger)
{
}
public override IList<ProcessPackageAction> GetProcessPackageActionsForSelectedProjects(
IList<IPackageManagementSelectedProject> selectedProjects)
{
var actions = new List<ProcessPackageAction>();
foreach (IPackageManagementSelectedProject selectedProject in selectedProjects) {
ProcessPackageAction action = CreatePackageAction(selectedProject);
if (action != null) {
actions.Add(action);
}
}
return actions;
}
ProcessPackageAction CreatePackageAction(IPackageManagementSelectedProject selectedProject)
{
if (selectedProject.IsSelected) {
return base.CreateInstallPackageAction(selectedProject);
}
return CreateUninstallPackageActionForSelectedProject(selectedProject);
}
ProcessPackageAction CreateUninstallPackageActionForSelectedProject(IPackageManagementSelectedProject selectedProject)
{
ProcessPackageAction action = base.CreateUninstallPackageAction(selectedProject);
if (IsPackageInstalled(action.Project)) {
return action;
}
return null;
}
bool IsPackageInstalled(IPackageManagementProject project)
{
IPackage package = GetPackage();
return project.IsPackageInstalled(package) || PackageManagementServices.Solution.IsPackageInstalled(package);
}
protected override bool AnyProjectsSelected(IList<IPackageManagementSelectedProject> projects)
{
return true;
}
}
}

44
src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackageViewModelFactory.cs

@ -1,44 +0,0 @@ @@ -1,44 +0,0 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
namespace ICSharpCode.PackageManagement
{
public class InstalledPackageViewModelFactory : PackageViewModelFactory
{
SelectedProjectsForInstalledPackages selectedProjectsForInstalledPackages;
public InstalledPackageViewModelFactory(IPackageViewModelFactory packageViewModelFactory)
: base(packageViewModelFactory)
{
selectedProjectsForInstalledPackages = new SelectedProjectsForInstalledPackages(Solution);
}
public override PackageViewModel CreatePackageViewModel(IPackageViewModelParent parent, IPackageFromRepository package)
{
return new InstalledPackageViewModel(
parent,
package,
selectedProjectsForInstalledPackages,
PackageManagementEvents,
PackageActionRunner,
Logger);
}
}
}

2
src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackagesViewModel.cs

@ -35,7 +35,7 @@ namespace ICSharpCode.PackageManagement @@ -35,7 +35,7 @@ namespace ICSharpCode.PackageManagement
IPackageManagementSolution solution,
IPackageManagementEvents packageManagementEvents,
IRegisteredPackageRepositories registeredPackageRepositories,
InstalledPackageViewModelFactory packageViewModelFactory,
IPackageViewModelFactory packageViewModelFactory,
ITaskFactory taskFactory)
: base(packagesViewModelParent, registeredPackageRepositories, packageViewModelFactory, taskFactory)
{

12
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs

@ -155,8 +155,7 @@ namespace ICSharpCode.PackageManagement @@ -155,8 +155,7 @@ namespace ICSharpCode.PackageManagement
public bool IsPackageInstalled(IPackage package)
{
ISolutionPackageRepository repository = CreateSolutionPackageRepository();
return repository.IsInstalled(package);
return CreateSolutionPackageRepository().IsInstalled(package);
}
public ISolutionPackageRepository CreateSolutionPackageRepository()
@ -166,9 +165,8 @@ namespace ICSharpCode.PackageManagement @@ -166,9 +165,8 @@ namespace ICSharpCode.PackageManagement
public IQueryable<IPackage> GetPackages()
{
ISolutionPackageRepository repository = CreateSolutionPackageRepository();
List<IPackageManagementProject> projects = GetProjects(ActivePackageRepository).ToList();
return repository
return CreateSolutionPackageRepository()
.GetPackages()
.Where(package => IsPackageInstalledInSolutionOrAnyProject(projects, package));
}
@ -188,14 +186,12 @@ namespace ICSharpCode.PackageManagement @@ -188,14 +186,12 @@ namespace ICSharpCode.PackageManagement
public string GetInstallPath(IPackage package)
{
ISolutionPackageRepository repository = CreateSolutionPackageRepository();
return repository.GetInstallPath(package);
return CreateSolutionPackageRepository().GetInstallPath(package);
}
public IEnumerable<IPackage> GetPackagesInReverseDependencyOrder()
{
ISolutionPackageRepository repository = CreateSolutionPackageRepository();
return repository.GetPackagesByReverseDependencyOrder();
return CreateSolutionPackageRepository().GetPackagesByReverseDependencyOrder();
}
public IEnumerable<IPackageManagementProject> GetProjects(IPackageRepository sourceRepository)

182
src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs

@ -116,13 +116,20 @@ namespace ICSharpCode.PackageManagement @@ -116,13 +116,20 @@ namespace ICSharpCode.PackageManagement
}
public bool IsAdded {
get { return IsPackageInstalled(); }
get {
if (selectedProjects.HasSingleProjectSelected()) {
return selectedProjects.GetSingleProjectSelected(package.Repository).IsPackageInstalled(package)
|| (selectedProjects.IsPackageInstalledInSolution(package) && !package.HasProjectContent());
}
return IsPackageInstalled();
}
}
bool IsPackageInstalled()
protected bool IsPackageInstalled()
{
return selectedProjects.IsPackageInstalledInSolution(package)
|| selectedProjects.IsPackageInstalled(package);
return selectedProjects.IsPackageInstalled(package)
|| selectedProjects.IsPackageInstalledInSolution(package);
}
public IEnumerable<PackageDependencySet> Dependencies {
@ -212,7 +219,7 @@ namespace ICSharpCode.PackageManagement @@ -212,7 +219,7 @@ namespace ICSharpCode.PackageManagement
ClearReportedMessages();
logger.LogAddingPackage();
using (IDisposable operation = StartInstallOperation(package)) {
using (IDisposable operation = StartOperation(package)) {
if (package.HasProjectContent()) {
TryInstallingPackage();
}
@ -227,7 +234,7 @@ namespace ICSharpCode.PackageManagement @@ -227,7 +234,7 @@ namespace ICSharpCode.PackageManagement
parent.OnPackageManaged (package);
}
protected virtual IDisposable StartInstallOperation(IPackageFromRepository package)
protected virtual IDisposable StartOperation(IPackageFromRepository package)
{
return package.StartInstallOperation();
}
@ -237,7 +244,7 @@ namespace ICSharpCode.PackageManagement @@ -237,7 +244,7 @@ namespace ICSharpCode.PackageManagement
packageManagementEvents.OnPackageOperationsStarting();
}
void GetPackageOperations()
void GetInstallPackageOperations()
{
IPackageManagementProject project = GetSingleProjectSelected();
project.Logger = logger;
@ -251,29 +258,20 @@ namespace ICSharpCode.PackageManagement @@ -251,29 +258,20 @@ namespace ICSharpCode.PackageManagement
return selectedProjects.GetSingleProjectSelected(package.Repository);
}
bool CanInstallPackage()
{
IEnumerable<IPackage> packages = GetPackagesRequiringLicenseAcceptance();
if (packages.Any()) {
return packageManagementEvents.OnAcceptLicenses(packages);
}
return true;
}
IEnumerable<IPackage> GetPackagesRequiringLicenseAcceptance()
{
IList<IPackage> packagesToBeInstalled = GetPackagesToBeInstalled();
return GetPackagesRequiringLicenseAcceptance(packagesToBeInstalled);
}
IEnumerable<IPackage> GetPackagesRequiringLicenseAcceptance(IList<IPackage> packagesToBeInstalled)
IEnumerable<IPackage> GetPackagesRequiringLicenseAcceptance(IEnumerable<IPackage> packagesToBeInstalled)
{
return packagesToBeInstalled.Where(package => PackageRequiresLicenseAcceptance(package));
return packagesToBeInstalled.Where(PackageRequiresLicenseAcceptance);
}
IList<IPackage> GetPackagesToBeInstalled()
{
List<IPackage> packages = new List<IPackage>();
var packages = new List<IPackage>();
foreach (PackageOperation operation in packageOperations) {
if (operation.Action == PackageAction.Install) {
packages.Add(operation.Package);
@ -295,9 +293,33 @@ namespace ICSharpCode.PackageManagement @@ -295,9 +293,33 @@ namespace ICSharpCode.PackageManagement
void TryInstallingSolutionPackage()
{
try {
var solutionPackageRepository = PackageManagementServices.Solution.CreateSolutionPackageRepository();
var packageManager = new NuGet.PackageManager(package.Repository, solutionPackageRepository.PackagePathResolver, solutionPackageRepository.FileSystem, solutionPackageRepository.Repository);
packageManager.InstallPackage(package.Id, package.Version, false, parent.IncludePrerelease);
var installAction = new InstallPackageAction(null, packageManagementEvents);
installAction.IgnoreDependencies = false;
installAction.AllowPrereleaseVersions = parent.IncludePrerelease;
var solutionRepository = PackageManagementServices.Solution.CreateSolutionPackageRepository();
var resolverFactory = new PackageOperationsResolverFactory();
var resolver = resolverFactory.CreateInstallPackageOperationResolver(
solutionRepository.Repository,
package.Repository,
logger,
installAction);
packageOperations = resolver.ResolveOperations(package);
if (LicensesAccepted()) {
var packageManager = new PackageManager(
package.Repository,
solutionRepository.PackagePathResolver,
solutionRepository.FileSystem,
solutionRepository.Repository);
packageManager.InstallPackage(
package.Id,
package.Version,
installAction.IgnoreDependencies,
installAction.AllowPrereleaseVersions);
packageManagementEvents.OnParentPackageInstalled(package);
}
} catch (Exception ex) {
ReportError(ex);
logger.LogError(ex);
@ -307,8 +329,8 @@ namespace ICSharpCode.PackageManagement @@ -307,8 +329,8 @@ namespace ICSharpCode.PackageManagement
void TryInstallingPackage()
{
try {
GetPackageOperations();
if (CanInstallPackage()) {
GetInstallPackageOperations();
if (LicensesAccepted()) {
InstallPackage();
}
} catch (Exception ex) {
@ -385,6 +407,7 @@ namespace ICSharpCode.PackageManagement @@ -385,6 +407,7 @@ namespace ICSharpCode.PackageManagement
var solutionPackageRepository = PackageManagementServices.Solution.CreateSolutionPackageRepository();
var packageManager = new NuGet.PackageManager(solutionPackageRepository.Repository, solutionPackageRepository.PackagePathResolver, solutionPackageRepository.FileSystem);
packageManager.UninstallPackage(package.Id, package.Version);
packageManagementEvents.OnParentPackageUninstalled(package);
} catch (Exception ex) {
ReportError(ex);
logger.LogError(ex);
@ -406,22 +429,21 @@ namespace ICSharpCode.PackageManagement @@ -406,22 +429,21 @@ namespace ICSharpCode.PackageManagement
public bool IsManaged {
get {
if (selectedProjects.HasMultipleProjects()) {
// Solution-level package management
// or Multi Project Solution
if (IsAdded) {
if (package.HasProjectContent()) {
return true; // [Manage] Button
}
return false; // [Remove] Button
}
// package.HasProjectContent() is too slow on uninstalled packages
// check (and Manage) after user click on [Add Package] Button
return false; // add Button -> redirect to [Manage] if (package.HasProjectContent())
if (selectedProjects.HasSingleProjectSelected()) {
// Project-level Package Management / Single Project Solution
return false; // [Add]/[Remove]
}
// Project-level Package Management / Single Project Solution
// Multi Project Solution
// or Solution-level package management
return !selectedProjects.HasSingleProjectSelected(); // [Add]/[Remove] or [Manage] Button
if (IsAdded) {
if (package.HasProjectContent()) {
return true; // [Manage] Button
}
return false; // [Remove] Button
}
// package.HasProjectContent() is too slow on uninstalled packages
// check ([Add] or [Manage]) after user press on [Add] Package Button
return false; // [Add] Button -> redirect to [Manage] if (package.HasProjectContent())
}
}
@ -448,8 +470,8 @@ namespace ICSharpCode.PackageManagement @@ -448,8 +470,8 @@ namespace ICSharpCode.PackageManagement
ClearReportedMessages();
logger.LogManagingPackage();
using (IDisposable operation = StartInstallOperation(package)) {
TryInstallingPackagesForSelectedProjects(projects);
using (IDisposable operation = StartOperation(package)) {
TryManagePackagesForSelectedProjects(projects);
}
logger.LogAfterPackageOperationCompletes();
@ -458,11 +480,12 @@ namespace ICSharpCode.PackageManagement @@ -458,11 +480,12 @@ namespace ICSharpCode.PackageManagement
parent.OnPackageManaged (package);
}
void TryInstallingPackagesForSelectedProjects(IList<IPackageManagementSelectedProject> projects)
void TryManagePackagesForSelectedProjects(IList<IPackageManagementSelectedProject> projects)
{
try {
if (AnyProjectsSelected(projects)) {
InstallPackagesForSelectedProjects(projects);
IList<ProcessPackageAction> actions = GetProcessPackageActionsForSelectedProjects(projects);
if (actions.Any() && (IsPackageInstalled() || LicensesAccepted())) {
RunActionsIfAnyExist(actions);
}
} catch (Exception ex) {
ReportError(ex);
@ -475,38 +498,62 @@ namespace ICSharpCode.PackageManagement @@ -475,38 +498,62 @@ namespace ICSharpCode.PackageManagement
return projects.Any(project => project.IsSelected);
}
void InstallPackagesForSelectedProjects(IList<IPackageManagementSelectedProject> projects)
{
if (CanInstallPackage(projects)) {
IList<ProcessPackageAction> actions = GetProcessPackageActionsForSelectedProjects(projects);
RunActionsIfAnyExist(actions);
}
}
public virtual IList<ProcessPackageAction> GetProcessPackageActionsForSelectedProjects(
public IList<ProcessPackageAction> GetProcessPackageActionsForSelectedProjects(
IList<IPackageManagementSelectedProject> selectedProjects)
{
var actions = new List<ProcessPackageAction>();
foreach (IPackageManagementSelectedProject selectedProject in selectedProjects) {
if (selectedProject.IsSelected) {
ProcessPackageAction action = CreateInstallPackageAction(selectedProject);
action.AllowPrereleaseVersions = parent.IncludePrerelease;
ProcessPackageAction action = CreatePackageManageAction(selectedProject);
if (action != null) {
actions.Add(action);
}
}
return actions;
}
bool CanInstallPackage(IList<IPackageManagementSelectedProject> projects)
protected virtual ProcessPackageAction CreatePackageManageAction(IPackageManagementSelectedProject selectedProject)
{
if (selectedProject.IsSelected) {
return CreateInstallPackageManageActionForSelectedProject(selectedProject);
}
return CreateUninstallPackageManageActionForSelectedProject(selectedProject);
}
protected ProcessPackageAction CreateUpdatePackageManageActionForSelectedProject(IPackageManagementSelectedProject selectedProject)
{
if (selectedProject.Project.GetPackages().Where(p => p.Id == package.Id).Any() &&
!selectedProject.Project.GetPackages().Where(p => p.Id == package.Id && p.Version == package.Version).Any()) {
return CreateUpdatePackageAction(selectedProject);
}
return null;
}
ProcessPackageAction CreateInstallPackageManageActionForSelectedProject(IPackageManagementSelectedProject selectedProject)
{
if (!selectedProject.Project.GetPackages().Where(p => p.Id == package.Id && p.Version == package.Version).Any()) {
return CreateInstallPackageAction(selectedProject);
}
return null;
}
ProcessPackageAction CreateUninstallPackageManageActionForSelectedProject(IPackageManagementSelectedProject selectedProject)
{
if (selectedProject.Project.GetPackages().Where(p => p.Id == package.Id && p.Version == package.Version).Any()) {
return CreateUninstallPackageAction(selectedProject);
}
return null;
}
bool LicensesAccepted(IList<IPackageManagementSelectedProject> projects)
{
IPackageManagementSelectedProject project = projects.FirstOrDefault();
if (project != null) {
return CanInstallPackage(project);
return LicensesAccepted(project);
}
return false;
}
bool CanInstallPackage(IPackageManagementSelectedProject selectedProject)
bool LicensesAccepted(IPackageManagementSelectedProject selectedProject)
{
IEnumerable<IPackage> licensedPackages = GetPackagesRequiringLicenseAcceptance(selectedProject);
if (licensedPackages.Any()) {
@ -515,6 +562,15 @@ namespace ICSharpCode.PackageManagement @@ -515,6 +562,15 @@ namespace ICSharpCode.PackageManagement
return true;
}
bool LicensesAccepted()
{
IEnumerable<IPackage> licensedPackages = GetPackagesRequiringLicenseAcceptance();
if (licensedPackages.Any()) {
return packageManagementEvents.OnAcceptLicenses(licensedPackages);
}
return true;
}
protected ProcessPackageAction CreateInstallPackageAction(IPackageManagementSelectedProject selectedProject)
{
IPackageManagementProject project = selectedProject.Project;
@ -535,6 +591,16 @@ namespace ICSharpCode.PackageManagement @@ -535,6 +591,16 @@ namespace ICSharpCode.PackageManagement
return action;
}
protected ProcessPackageAction CreateUpdatePackageAction(IPackageManagementSelectedProject selectedProject)
{
IPackageManagementProject project = selectedProject.Project;
project.Logger = logger;
ProcessPackageOperationsAction action = project.CreateUpdatePackageAction();
action.Package = package;
return action;
}
void RunActionsIfAnyExist(IList<ProcessPackageAction> actions)
{
if (actions.Any()) {

3
src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModelFactory.cs

@ -38,7 +38,8 @@ namespace ICSharpCode.PackageManagement @@ -38,7 +38,8 @@ namespace ICSharpCode.PackageManagement
IPackageActionRunner actionRunner)
{
this.Solution = solution;
this.SelectedProjects = new PackageManagementSelectedProjects(solution);
// this.SelectedProjects = new PackageManagementSelectedProjects(solution);
this.SelectedProjects = new SelectedProjectsForInstalledPackages(solution);
this.PackageManagementEvents = packageManagementEvents;
this.PackageActionRunner = actionRunner;
this.Logger = new PackageManagementLogger(packageManagementEvents);

24
src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs

@ -132,21 +132,25 @@ namespace ICSharpCode.PackageManagement @@ -132,21 +132,25 @@ namespace ICSharpCode.PackageManagement
}
public void OnPackageManaged (IPackageFromRepository package) {
foreach (PackagesViewModel packagesViewModel in packagesViewModelParent.GetPackagesViewModels) {
if (packagesViewModel != this) {
if (packagesViewModel is AvailablePackagesViewModel) {
// package installed from "Available Packages" Tab,
// unistaled from "Installed/Recent Packages" Tab,
// does not refresh same package in "Available Packages" Tab
packagesViewModel.allPackages = null;
packagesViewModel.StartReadPackagesTask();
}
else { // refresh other siblings?
if (packagesViewModelParent != null) { // it is null at design time
foreach (PackagesViewModel packagesViewModel in packagesViewModelParent.GetPackagesViewModels) {
if (packagesViewModel != this) {
OnPackageManaged(packagesViewModel, package);
}
}
}
}
static void OnPackageManaged (PackagesViewModel packagesViewModel, IPackageName package) {
foreach (var found in packagesViewModel.PackageViewModels) {
if (found.Id == package.Id && found.Version == package.Version) {
found.OnPropertyChanged(model => model.IsAdded);
found.OnPropertyChanged(model => model.IsManaged);
break;
}
}
}
PackagesForSelectedPageResult GetPackagesForSelectedPageResult()
{
IEnumerable<IPackage> packages = GetPackagesForSelectedPage();

3
src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModels.cs

@ -31,10 +31,9 @@ namespace ICSharpCode.PackageManagement @@ -31,10 +31,9 @@ namespace ICSharpCode.PackageManagement
{
var packageViewModelFactory = new PackageViewModelFactory(solution, packageManagementEvents, actionRunner);
var updatedPackageViewModelFactory = new UpdatedPackageViewModelFactory(packageViewModelFactory);
var installedPackageViewModelFactory = new InstalledPackageViewModelFactory(packageViewModelFactory);
AvailablePackagesViewModel = new AvailablePackagesViewModel(this, registeredPackageRepositories, packageViewModelFactory, taskFactory);
InstalledPackagesViewModel = new InstalledPackagesViewModel(this, solution, packageManagementEvents, registeredPackageRepositories, installedPackageViewModelFactory, taskFactory);
InstalledPackagesViewModel = new InstalledPackagesViewModel(this, solution, packageManagementEvents, registeredPackageRepositories, packageViewModelFactory, taskFactory);
UpdatedPackagesViewModel = new UpdatedPackagesViewModel(this, solution, registeredPackageRepositories, updatedPackageViewModelFactory, taskFactory);
RecentPackagesViewModel = new RecentPackagesViewModel(this, packageManagementEvents, registeredPackageRepositories, packageViewModelFactory, taskFactory);
}

10
src/AddIns/Misc/PackageManagement/Project/Src/SelectedProjectsForUpdatedPackages.cs

@ -22,17 +22,17 @@ using NuGet; @@ -22,17 +22,17 @@ using NuGet;
namespace ICSharpCode.PackageManagement
{
public class SelectedProjectsForUpdatedPackages : PackageManagementSelectedProjects
public class SelectedProjectsForUpdatedPackages : SelectedProjectsForInstalledPackages
{
public SelectedProjectsForUpdatedPackages(IPackageManagementSolution solution)
: base(solution)
{
}
protected override bool IsProjectSelected(IPackageManagementProject project, IPackageFromRepository package)
{
return IsProjectEnabled(project, package);
}
// protected override bool IsProjectSelected(IPackageManagementProject project, IPackageFromRepository package)
// {
// return base.IsProjectSelected(project, package) && IsProjectEnabled(project, package);
// }
protected override bool IsProjectEnabled(IPackageManagementProject project, IPackageFromRepository package)
{

9
src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModel.cs

@ -26,7 +26,7 @@ namespace ICSharpCode.PackageManagement @@ -26,7 +26,7 @@ namespace ICSharpCode.PackageManagement
public UpdatedPackageViewModel(
IPackageViewModelParent parent,
IPackageFromRepository package,
SelectedProjectsForUpdatedPackages selectedProjects,
PackageManagementSelectedProjects selectedProjects,
IPackageManagementEvents packageManagementEvents,
IPackageActionRunner actionRunner,
ILogger logger)
@ -34,13 +34,12 @@ namespace ICSharpCode.PackageManagement @@ -34,13 +34,12 @@ namespace ICSharpCode.PackageManagement
{
}
protected override ProcessPackageOperationsAction CreateInstallPackageAction(
IPackageManagementProject project)
protected override ProcessPackageAction CreatePackageManageAction(IPackageManagementSelectedProject selectedProject)
{
return project.CreateUpdatePackageAction();
return base.CreateUpdatePackageManageActionForSelectedProject(selectedProject);
}
protected override IDisposable StartInstallOperation(IPackageFromRepository package)
protected override IDisposable StartOperation(IPackageFromRepository package)
{
return package.StartUpdateOperation();
}

11
src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModelFactory.cs

@ -23,12 +23,11 @@ namespace ICSharpCode.PackageManagement @@ -23,12 +23,11 @@ namespace ICSharpCode.PackageManagement
{
public class UpdatedPackageViewModelFactory : PackageViewModelFactory
{
SelectedProjectsForUpdatedPackages selectedProjectsForUpdatedPackages;
SelectedProjectsForUpdatedPackages selectedProjects;
public UpdatedPackageViewModelFactory(IPackageViewModelFactory packageViewModelFactory)
: base(packageViewModelFactory)
{
selectedProjectsForUpdatedPackages = new SelectedProjectsForUpdatedPackages(Solution);
: base(packageViewModelFactory) {
selectedProjects = new SelectedProjectsForUpdatedPackages(Solution);
}
public override PackageViewModel CreatePackageViewModel(IPackageViewModelParent parent, IPackageFromRepository package)
@ -36,7 +35,7 @@ namespace ICSharpCode.PackageManagement @@ -36,7 +35,7 @@ namespace ICSharpCode.PackageManagement
return new UpdatedPackageViewModel(
parent,
package,
selectedProjectsForUpdatedPackages,
selectedProjects,
PackageManagementEvents,
PackageActionRunner,
Logger);

4
src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackagesViewModel.cs

@ -36,7 +36,7 @@ namespace ICSharpCode.PackageManagement @@ -36,7 +36,7 @@ namespace ICSharpCode.PackageManagement
PackagesViewModels packagesViewModelParent,
IPackageManagementSolution solution,
IRegisteredPackageRepositories registeredPackageRepositories,
UpdatedPackageViewModelFactory packageViewModelFactory,
IPackageViewModelFactory packageViewModelFactory,
ITaskFactory taskFactory)
: base(
packagesViewModelParent,
@ -48,6 +48,8 @@ namespace ICSharpCode.PackageManagement @@ -48,6 +48,8 @@ namespace ICSharpCode.PackageManagement
this.logger = packageViewModelFactory.Logger;
this.packageManagementEvents = packageViewModelFactory.PackageManagementEvents;
packageManagementEvents.ParentPackageInstalled += PackagesUpdated;
packageManagementEvents.ParentPackageUninstalled += PackagesUpdated;
packageManagementEvents.ParentPackagesUpdated += PackagesUpdated;
ShowPackageSources = true;

2
src/AddIns/Misc/PackageManagement/Project/Src/ViewModelBase.cs

@ -40,7 +40,7 @@ namespace ICSharpCode.PackageManagement @@ -40,7 +40,7 @@ namespace ICSharpCode.PackageManagement
return String.Empty;
}
protected void OnPropertyChanged<TProperty>(Expression<Func<TModel, TProperty>> expression)
protected internal void OnPropertyChanged<TProperty>(Expression<Func<TModel, TProperty>> expression)
{
string propertyName = PropertyChangedFor(expression);
OnPropertyChanged(propertyName);

Loading…
Cancel
Save