You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
3.3 KiB
124 lines
3.3 KiB
// 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 System.Collections.Generic; |
|
using System.Collections.ObjectModel; |
|
using System.Collections.Specialized; |
|
using System.Linq; |
|
using System.Text; |
|
using System.Windows.Input; |
|
using ICSharpCode.AddInManager2.Model; |
|
using ICSharpCode.Core; |
|
using ICSharpCode.SharpDevelop; |
|
using NuGet; |
|
|
|
namespace ICSharpCode.AddInManager2.ViewModel |
|
{ |
|
public class UpdatedAddInsViewModel : NuGetAddInsViewModelBase |
|
{ |
|
private IQueryable<IPackage> installedPackages; |
|
private string errorMessage = String.Empty; |
|
private bool hasSavedException = false; |
|
|
|
public UpdatedAddInsViewModel() |
|
: base() |
|
{ |
|
Initialize(); |
|
} |
|
|
|
public UpdatedAddInsViewModel(IAddInManagerServices services) |
|
: base(services) |
|
{ |
|
Initialize(); |
|
} |
|
|
|
private void Initialize() |
|
{ |
|
IsSearchable = true; |
|
ShowPackageSources = true; |
|
HasFilterForPrereleases = true; |
|
Title = SD.ResourceService.GetString("AddInManager2.Views.Updates"); |
|
|
|
ShowPrereleases = AddInManager.Settings.ShowPrereleases; |
|
|
|
AddInManager.Events.AddInInstalled += NuGetPackagesChanged; |
|
AddInManager.Events.AddInUninstalled += NuGetPackagesChanged; |
|
AddInManager.Events.AddInStateChanged += InstalledAddInStateChanged; |
|
} |
|
|
|
protected override void OnDispose() |
|
{ |
|
AddInManager.Events.AddInInstalled -= NuGetPackagesChanged; |
|
AddInManager.Events.AddInUninstalled -= NuGetPackagesChanged; |
|
AddInManager.Events.AddInStateChanged -= InstalledAddInStateChanged; |
|
} |
|
|
|
protected override IQueryable<IPackage> GetAllPackages() |
|
{ |
|
if (hasSavedException) |
|
{ |
|
ThrowSavedException(); |
|
} |
|
return GetUpdatedPackages(); |
|
} |
|
|
|
protected override void UpdateRepositoryBeforeReadPackagesTaskStarts() |
|
{ |
|
try |
|
{ |
|
installedPackages = GetInstalledPackages(); |
|
} |
|
catch (Exception ex) |
|
{ |
|
hasSavedException = true; |
|
errorMessage = ex.Message; |
|
} |
|
} |
|
|
|
private IQueryable<IPackage> GetInstalledPackages() |
|
{ |
|
return AddInManager.NuGet.Packages.LocalRepository.GetPackages(); |
|
} |
|
|
|
private IQueryable<IPackage> GetUpdatedPackages() |
|
{ |
|
IQueryable<IPackage> localPackages = installedPackages; |
|
localPackages = FilterPackages(localPackages); |
|
var updatedPackages = GetUpdatedPackages(ActiveRepository ?? AddInManager.Repositories.Registered, localPackages); |
|
HighlightCount = updatedPackages.Count(); |
|
return updatedPackages.AsQueryable(); |
|
} |
|
|
|
private IEnumerable<IPackage> GetUpdatedPackages(IPackageRepository sourceRepository, IQueryable<IPackage> localPackages) |
|
{ |
|
return sourceRepository.GetUpdates(localPackages, ShowPrereleases, false); |
|
} |
|
|
|
private IQueryable<IPackage> FilterPackages(IQueryable<IPackage> localPackages) |
|
{ |
|
return localPackages.Find(SearchTerms); |
|
} |
|
|
|
private void ThrowSavedException() |
|
{ |
|
throw new ApplicationException(errorMessage); |
|
} |
|
|
|
protected override void UpdatePrereleaseFilter() |
|
{ |
|
AddInManager.Settings.ShowPrereleases = ShowPrereleases; |
|
ReadPackages(); |
|
} |
|
|
|
private void NuGetPackagesChanged(object sender, AddInInstallationEventArgs e) |
|
{ |
|
ReadPackages(); |
|
} |
|
|
|
private void InstalledAddInStateChanged(object sender, AddInInstallationEventArgs e) |
|
{ |
|
UpdateInstallationState(); |
|
} |
|
} |
|
}
|
|
|