@@ -36,7 +36,7 @@ public class PackageViewModel : ViewModelBase<PackageViewModel>
3636 IPackageFromRepository package ;
3737 IEnumerable < PackageOperation > packageOperations = new PackageOperation [ 0 ] ;
3838 PackageViewModelOperationLogger logger ;
39- IPackageActionRunner actionRunner ;
39+ readonly IPackageActionRunner actionRunner ;
4040 IPackageViewModelParent parent ;
4141
4242 public PackageViewModel (
@@ -207,9 +207,13 @@ protected virtual bool IsProjectPackage(IPackage package) {
207207 return package . IsProjectPackage ( ) ;
208208 }
209209
210+ bool packageIsChanging = false ;
210211 public void PackageChanged ( ) {
212+ if ( packageIsChanging ) return ;
213+ else packageIsChanging = true ;
211214 OnPropertyChanged ( model => model . IsManaged ) ;
212215 OnPropertyChanged ( model => model . IsAdded ) ;
216+ packageIsChanging = false ;
213217 }
214218
215219 public void AddOrManagePackage ( ) {
@@ -233,10 +237,10 @@ public void AddPackage()
233237
234238 using ( IDisposable operation = StartOperation ( package ) ) {
235239 if ( IsProjectPackage ( package ) ) {
236- TryInstallingPackage ( ) ;
240+ TryProjectPackageInstall ( ) ;
237241 }
238242 else {
239- TryInstallingSolutionPackage ( ) ;
243+ TrySolutionPackageInstall ( ) ;
240244 }
241245 }
242246
@@ -253,7 +257,7 @@ void ClearReportedMessages()
253257 packageManagementEvents . OnPackageOperationsStarting ( ) ;
254258 }
255259
256- void GetInstallPackageOperations ( )
260+ void ProjectPackageGetInstallOperations ( )
257261 {
258262 IPackageManagementProject project = GetSingleProjectSelected ( ) ;
259263 project . Logger = logger ;
@@ -262,8 +266,8 @@ void GetInstallPackageOperations()
262266 packageOperations = project . GetInstallPackageOperations ( package , installAction ) ;
263267 }
264268
265- IEnumerable < PackageOperation > GetInstallPackageOperations ( IEnumerable < IPackageManagementSelectedProject > projects ) {
266- IEnumerable < PackageOperation > installPackageOperations = new PackageOperation [ 0 ] ;
269+ void ProjectPackageGetInstallOperations ( IEnumerable < IPackageManagementSelectedProject > projects ) {
270+ packageOperations = new PackageOperation [ 0 ] ;
267271 IPackageManagementSelectedProject firstSelectedProject = (
268272 from project in projects
269273 where project . IsSelected
@@ -272,11 +276,24 @@ where project.IsSelected
272276 if ( firstSelectedProject != null ) {
273277 InstallPackageAction installAction = firstSelectedProject . Project . CreateInstallPackageAction ( ) ;
274278 installAction . AllowPrereleaseVersions = parent . IncludePrerelease ;
275- installPackageOperations = firstSelectedProject . Project . GetInstallPackageOperations ( package , installAction ) ;
279+ packageOperations = firstSelectedProject . Project . GetInstallPackageOperations ( package , installAction ) ;
276280 }
277- return installPackageOperations ;
278281 }
279282
283+ void SolutionPackageGetInstallOperations (
284+ ISolutionPackageRepository solutionRepository ,
285+ InstallPackageAction installAction ,
286+ IPackageFromRepository installPackage ) {
287+
288+ var resolverFactory = new PackageOperationsResolverFactory ( ) ;
289+ var resolver = resolverFactory . CreateInstallPackageOperationResolver (
290+ solutionRepository . Repository ,
291+ installPackage . Repository ,
292+ logger ,
293+ installAction ) ;
294+ packageOperations = resolver . ResolveOperations ( installPackage ) ;
295+ }
296+
280297 IPackageManagementProject GetSingleProjectSelected ( )
281298 {
282299 return selectedProjects . GetSingleProjectSelected ( package . Repository ) ;
@@ -304,44 +321,27 @@ IList<IPackage> GetPackagesToBeInstalled()
304321 return packages ;
305322 }
306323
307- bool PackageRequiresLicenseAcceptance ( IPackage package )
324+ bool PackageRequiresLicenseAcceptance ( IPackage iPackage )
308325 {
309- return package . RequireLicenseAcceptance && ! IsPackageInstalled ( package ) ;
326+ return iPackage . RequireLicenseAcceptance && ! IsPackageInstalled ( iPackage ) ;
310327 }
311328
312- bool IsPackageInstalled ( IPackage package )
329+ bool IsPackageInstalled ( IPackage iPackage )
313330 {
314- return selectedProjects . Solution . IsPackageInstalled ( package ) ;
331+ return selectedProjects . Solution . IsPackageInstalled ( iPackage ) ;
315332 }
316333
317- void TryInstallingSolutionPackage ( )
334+ protected virtual void TrySolutionPackageInstall ( )
318335 {
319336 try {
337+ var solutionRepository = selectedProjects . Solution . CreateSolutionPackageRepository ( ) ;
320338 var installAction = new InstallPackageAction ( null , packageManagementEvents ) ;
339+ installAction . Package = package ;
321340 installAction . IgnoreDependencies = false ;
322341 installAction . AllowPrereleaseVersions = parent . IncludePrerelease ;
323-
324- var solutionRepository = selectedProjects . Solution . CreateSolutionPackageRepository ( ) ;
325-
326- var resolverFactory = new PackageOperationsResolverFactory ( ) ;
327- var resolver = resolverFactory . CreateInstallPackageOperationResolver (
328- solutionRepository . Repository ,
329- package . Repository ,
330- logger ,
331- installAction ) ;
332- packageOperations = resolver . ResolveOperations ( package ) ;
333-
342+ SolutionPackageGetInstallOperations ( solutionRepository , installAction , package ) ;
334343 if ( LicensesAccepted ( ) ) {
335- var packageManager = new PackageManager (
336- package . Repository ,
337- solutionRepository . PackagePathResolver ,
338- solutionRepository . FileSystem ,
339- solutionRepository . Repository ) ;
340- packageManager . InstallPackage (
341- package . Id ,
342- package . Version ,
343- installAction . IgnoreDependencies ,
344- installAction . AllowPrereleaseVersions ) ;
344+ SolutionPackageInstall ( solutionRepository , installAction , package ) ;
345345 packageManagementEvents . OnParentPackageInstalled ( package ) ;
346346 }
347347 } catch ( Exception ex ) {
@@ -350,31 +350,47 @@ void TryInstallingSolutionPackage()
350350 }
351351 }
352352
353- void TryInstallingPackage ( )
353+ void SolutionPackageInstall (
354+ ISolutionPackageRepository solutionRepository ,
355+ InstallPackageAction installAction ,
356+ IPackageFromRepository installPackage ) {
357+ var packageManager = new PackageManager (
358+ installPackage . Repository ,
359+ solutionRepository . PackagePathResolver ,
360+ solutionRepository . FileSystem ,
361+ solutionRepository . Repository ) ;
362+ packageManager . InstallPackage (
363+ installPackage . Id ,
364+ installPackage . Version ,
365+ installAction . IgnoreDependencies ,
366+ installAction . AllowPrereleaseVersions ) ;
367+ }
368+
369+ void TryProjectPackageInstall ( )
354370 {
355371 try {
356- GetInstallPackageOperations ( ) ;
372+ ProjectPackageGetInstallOperations ( ) ;
357373 if ( LicensesAccepted ( ) ) {
358- InstallPackage ( ) ;
374+ ProjectPackageInstall ( ) ;
359375 }
360376 } catch ( Exception ex ) {
361377 ReportError ( ex ) ;
362378 logger . LogError ( ex ) ;
363379 }
364380 }
365-
366- void InstallPackage ( )
381+
382+ void ProjectPackageInstall ( )
367383 {
368- InstallPackage ( packageOperations ) ;
384+ ProjectPackageInstall ( packageOperations ) ;
369385 }
370386
371- void InstallPackage ( IEnumerable < PackageOperation > packageOperations )
387+ void ProjectPackageInstall ( IEnumerable < PackageOperation > installOperations )
372388 {
373389 IPackageManagementProject project = GetSingleProjectSelected ( ) ;
374390 ProcessPackageOperationsAction action = CreateInstallPackageAction ( project ) ;
375391 action . AllowPrereleaseVersions = parent . IncludePrerelease ;
376392 action . Package = package ;
377- action . Operations = packageOperations ;
393+ action . Operations = installOperations ;
378394 actionRunner . Run ( action ) ;
379395 }
380396
@@ -409,9 +425,9 @@ public void RemovePackage()
409425 logger . LogRemovingPackage ( ) ;
410426
411427 if ( IsProjectPackage ( package ) ) {
412- TryUninstallingPackage ( ) ;
428+ TryProjectPackageUninstall ( ) ;
413429 } else {
414- TryUninstallingSolutionPackage ( ) ;
430+ TrySolutionPackageUninstall ( ) ;
415431 }
416432
417433 logger . LogAfterPackageOperationCompletes ( ) ;
@@ -422,20 +438,28 @@ void LogRemovingPackage()
422438 logger . LogRemovingPackage ( ) ;
423439 }
424440
425- void TryUninstallingSolutionPackage ( )
441+ void TrySolutionPackageUninstall ( ) {
442+ TrySolutionPackageUninstall ( package ) ;
443+ }
444+
445+ protected void TrySolutionPackageUninstall ( IPackage removePackage )
426446 {
427447 try {
428448 var solutionPackageRepository = PackageManagementServices . Solution . CreateSolutionPackageRepository ( ) ;
429- var packageManager = new NuGet . PackageManager ( solutionPackageRepository . Repository , solutionPackageRepository . PackagePathResolver , solutionPackageRepository . FileSystem ) ;
430- packageManager . UninstallPackage ( package . Id , package . Version ) ;
431- packageManagementEvents . OnParentPackageUninstalled ( package ) ;
449+ var packageManager = new PackageManager (
450+ solutionPackageRepository . Repository ,
451+ solutionPackageRepository . PackagePathResolver ,
452+ solutionPackageRepository . FileSystem ) ;
453+ packageManager . UninstallPackage ( removePackage ) ;
454+ solutionPackageRepository . Repository . RemovePackage ( removePackage ) ;
455+ packageManagementEvents . OnParentPackageUninstalled ( removePackage ) ;
432456 } catch ( Exception ex ) {
433457 ReportError ( ex ) ;
434458 logger . LogError ( ex ) ;
435459 }
436460 }
437461
438- void TryUninstallingPackage ( )
462+ void TryProjectPackageUninstall ( )
439463 {
440464 try {
441465 IPackageManagementProject project = GetSingleProjectSelected ( ) ;
@@ -558,7 +582,7 @@ protected ProcessPackageAction CreateUpdatePackageManageActionForSelectedProject
558582 }
559583
560584 bool LicensesAccepted ( IEnumerable < IPackageManagementSelectedProject > projects ) {
561- packageOperations = GetInstallPackageOperations ( projects ) ;
585+ ProjectPackageGetInstallOperations ( projects ) ;
562586 return LicensesAccepted ( ) ;
563587 }
564588
0 commit comments