Browse Source

- Fix: Correct determining of NuGet package updates even if version of installed AddIn differs from NuGet package in repository.

- Fix: NuGet icon was not shown in installed AddIn list any more.
- Now showing the green tick for NuGet packages which are already installed.
pull/32/head
Andreas Weizel 13 years ago
parent
commit
f1133b8d2b
  1. 5
      src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeAddInSetup.cs
  2. 65
      src/AddIns/Misc/AddInManager2/Project/Src/Model/AddInSetup.cs
  3. 1
      src/AddIns/Misc/AddInManager2/Project/Src/Model/Interfaces/IAddInSetup.cs
  4. 35
      src/AddIns/Misc/AddInManager2/Project/Src/Model/ManagedAddIn.cs
  5. 33
      src/AddIns/Misc/AddInManager2/Project/Src/View/AddInsView.xaml
  6. 2
      src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/InstalledAddInsViewModel.cs
  7. 2
      src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetPackageViewModel.cs

5
src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeAddInSetup.cs

@ -91,5 +91,10 @@ namespace ICSharpCode.AddInManager2.Tests.Fakes @@ -91,5 +91,10 @@ namespace ICSharpCode.AddInManager2.Tests.Fakes
{
throw new NotImplementedException();
}
public int CompareAddInToPackageVersion(ICSharpCode.Core.AddIn addIn, NuGet.IPackage nuGetPackage)
{
throw new NotImplementedException();
}
}
}

65
src/AddIns/Misc/AddInManager2/Project/Src/Model/AddInSetup.cs

@ -18,8 +18,6 @@ namespace ICSharpCode.AddInManager2.Model @@ -18,8 +18,6 @@ namespace ICSharpCode.AddInManager2.Model
/// </summary>
public class AddInSetup : IAddInSetup
{
private const string NuGetPackageIDManifestAttribute = "__nuGetPackageID";
private IAddInManagerEvents _events = null;
private INuGetPackageManager _nuGet = null;
private ISDAddInManagement _sdAddInManagement = null;
@ -311,10 +309,10 @@ namespace ICSharpCode.AddInManager2.Model @@ -311,10 +309,10 @@ namespace ICSharpCode.AddInManager2.Model
SD.Log.DebugFormatted("[AddInManager2] AddIn's manifest states no identity.");
}
if (addIn.Properties.Contains(NuGetPackageIDManifestAttribute))
if (addIn.Properties.Contains(ManagedAddIn.NuGetPackageIDManifestAttribute))
{
SD.Log.DebugFormatted("[AddInManager2] AddIn's manifest states NuGet ID '{0}'",
addIn.Properties[NuGetPackageIDManifestAttribute]);
addIn.Properties[ManagedAddIn.NuGetPackageIDManifestAttribute]);
}
else
{
@ -361,10 +359,16 @@ namespace ICSharpCode.AddInManager2.Model @@ -361,10 +359,16 @@ namespace ICSharpCode.AddInManager2.Model
XmlDocument addInManifestDoc = new XmlDocument();
addInManifestDoc.Load(addInManifestFile);
// Set our special attribute in root
XmlAttribute nuGetPackageIDAttribute = addInManifestDoc.CreateAttribute(NuGetPackageIDManifestAttribute);
// Set our special attributes in root
XmlAttribute nuGetPackageIDAttribute = addInManifestDoc.CreateAttribute(ManagedAddIn.NuGetPackageIDManifestAttribute);
nuGetPackageIDAttribute.Value = package.Id;
addInManifestDoc.DocumentElement.Attributes.Append(nuGetPackageIDAttribute);
if (package.Version != null)
{
XmlAttribute nuGetPackageVersionAttribute = addInManifestDoc.CreateAttribute(ManagedAddIn.NuGetPackageVersionManifestAttribute);
nuGetPackageVersionAttribute.Value = package.Version.Version.ToString();
addInManifestDoc.DocumentElement.Attributes.Append(nuGetPackageVersionAttribute);
}
addInManifestDoc.Save(addInManifestFile);
return true;
@ -642,9 +646,9 @@ namespace ICSharpCode.AddInManager2.Model @@ -642,9 +646,9 @@ namespace ICSharpCode.AddInManager2.Model
IPackage package = null;
string nuGetPackageID = null;
if (addIn.Properties.Contains(NuGetPackageIDManifestAttribute))
if (addIn.Properties.Contains(ManagedAddIn.NuGetPackageIDManifestAttribute))
{
nuGetPackageID = addIn.Properties[NuGetPackageIDManifestAttribute];
nuGetPackageID = addIn.Properties[ManagedAddIn.NuGetPackageIDManifestAttribute];
}
string primaryIdentity = null;
if (addIn.Manifest != null)
@ -696,7 +700,8 @@ namespace ICSharpCode.AddInManager2.Model @@ -696,7 +700,8 @@ namespace ICSharpCode.AddInManager2.Model
AddIn foundAddIn = _sdAddInManagement.AddIns.Where(
a => ((a.Manifest != null) && (a.Manifest.PrimaryIdentity == package.Id))
|| (a.Properties.Contains(NuGetPackageIDManifestAttribute) && (a.Properties[NuGetPackageIDManifestAttribute] == package.Id)))
|| (a.Properties.Contains(ManagedAddIn.NuGetPackageIDManifestAttribute)
&& (a.Properties[ManagedAddIn.NuGetPackageIDManifestAttribute] == package.Id)))
.FirstOrDefault();
return foundAddIn;
@ -711,7 +716,8 @@ namespace ICSharpCode.AddInManager2.Model @@ -711,7 +716,8 @@ namespace ICSharpCode.AddInManager2.Model
ManagedAddIn foundAddIn = AddInsWithMarkedForInstallation.Where(
a => ((a.AddIn.Manifest != null) && (a.AddIn.Manifest.PrimaryIdentity == package.Id))
|| (a.AddIn.Properties.Contains(NuGetPackageIDManifestAttribute) && (a.AddIn.Properties[NuGetPackageIDManifestAttribute] == package.Id)))
|| (a.AddIn.Properties.Contains(ManagedAddIn.NuGetPackageIDManifestAttribute)
&& (a.AddIn.Properties[ManagedAddIn.NuGetPackageIDManifestAttribute] == package.Id)))
.FirstOrDefault();
return (foundAddIn != null) ? foundAddIn.AddIn : null;
@ -731,6 +737,45 @@ namespace ICSharpCode.AddInManager2.Model @@ -731,6 +737,45 @@ namespace ICSharpCode.AddInManager2.Model
return null;
}
public int CompareAddInToPackageVersion(AddIn addIn, IPackage nuGetPackage)
{
if ((addIn == null) || (nuGetPackage == null))
{
// Consider this as equal (?)
return 0;
}
// Look if AddIn has a NuGet version tag in manifest
Version addInVersion = addIn.Version;
if (addIn.Properties.Contains(ManagedAddIn.NuGetPackageVersionManifestAttribute))
{
try
{
addInVersion = new Version(addIn.Properties[ManagedAddIn.NuGetPackageVersionManifestAttribute]);
}
catch (Exception)
{
addInVersion = addIn.Version;
}
}
if (addInVersion == null)
{
if (nuGetPackage == null)
{
// Both versions are null -> equal
return 0;
}
else
{
// Non-null version is greater
return -1;
}
}
return addIn.Version.CompareTo(nuGetPackage.Version.Version);
}
public void RemoveUnreferencedNuGetPackages()
{
// Get list of installed NuGet packages

1
src/AddIns/Misc/AddInManager2/Project/Src/Model/Interfaces/IAddInSetup.cs

@ -26,6 +26,7 @@ namespace ICSharpCode.AddInManager2.Model @@ -26,6 +26,7 @@ namespace ICSharpCode.AddInManager2.Model
AddIn GetInstalledAddInByIdentity(string identity);
bool IsAddInInstalled(AddIn addIn);
bool IsAddInPreinstalled(AddIn addin);
int CompareAddInToPackageVersion(AddIn addIn, IPackage nuGetPackage);
IPackage GetNuGetPackageForAddIn(AddIn addIn, bool getLatest);
AddIn GetAddInForNuGetPackage(IPackage package);
AddIn GetAddInForNuGetPackage(IPackage package, bool withAddInsMarkedForInstallation);

35
src/AddIns/Misc/AddInManager2/Project/Src/Model/ManagedAddIn.cs

@ -17,6 +17,9 @@ namespace ICSharpCode.AddInManager2.Model @@ -17,6 +17,9 @@ namespace ICSharpCode.AddInManager2.Model
/// </summary>
public class ManagedAddIn
{
public const string NuGetPackageIDManifestAttribute = "__nuGetPackageID";
public const string NuGetPackageVersionManifestAttribute = "__nuGetPackageVersion";
private AddIn _addIn;
public ManagedAddIn(AddIn addIn)
@ -56,5 +59,37 @@ namespace ICSharpCode.AddInManager2.Model @@ -56,5 +59,37 @@ namespace ICSharpCode.AddInManager2.Model
return _addIn;
}
}
public string LinkedNuGetPackageID
{
get
{
if (_addIn != null)
{
if (_addIn.Properties.Contains(NuGetPackageIDManifestAttribute))
{
return _addIn.Properties[NuGetPackageIDManifestAttribute];
}
}
return null;
}
}
public string LinkedNuGetPackageVersion
{
get
{
if (_addIn != null)
{
if (_addIn.Properties.Contains(NuGetPackageVersionManifestAttribute))
{
return _addIn.Properties[NuGetPackageVersionManifestAttribute];
}
}
return null;
}
}
}
}

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

@ -21,7 +21,7 @@ @@ -21,7 +21,7 @@
UriSource="pack://application:,,,/ICSharpCode.AddInManager2;component/Resources/sd_packageicon.png"/>
<BitmapImage x:Key="SmallExternalAddInIcon"
UriSource="pack://application:,,,/ICSharpCode.AddInManager2;component/Resources/external_addin_small.png"/>
<BitmapImage x:Key="PackageAddedIcon"
<BitmapImage x:Key="InstalledTickIcon"
UriSource="pack://application:,,,/ICSharpCode.AddInManager2;component/Resources/accept.png"/>
<BitmapImage x:Key="SearchIcon"
UriSource="pack://application:,,,/ICSharpCode.AddInManager2;component/Resources/magnifier.png"/>
@ -75,6 +75,20 @@ @@ -75,6 +75,20 @@
</Style.Triggers>
</Style>
<Style x:Key="InstalledTickImageStyle" TargetType="{x:Type Image}">
<Setter Property="Source" Value="{StaticResource InstalledTickIcon}" />
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsOffline}" Value="False" />
<Condition Binding="{Binding IsInstalled}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="Visibility" Value="Visible" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
<Style x:Key="addInListButtonStyle" TargetType="{x:Type Button}" BasedOn="{x:Static core:GlobalStyles.ButtonStyle}">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
@ -133,6 +147,14 @@ @@ -133,6 +147,14 @@
Margin="36,0,0,0"
VerticalAlignment="Top"
Style="{StaticResource AddInExternalStateImageStyle}" />
<Image
Grid.Column="0"
VerticalAlignment="Top"
HorizontalAlignment="Right"
Height="16"
Width="16"
Style="{StaticResource InstalledTickImageStyle}"
Margin="36,0,0,0"/>
<StackPanel
Grid.Column="1"
Margin="4, 0">
@ -147,15 +169,6 @@ @@ -147,15 +169,6 @@
TextTrimming="CharacterEllipsis"
MaxHeight="40"/>
</StackPanel>
<Image
Grid.Column="2"
VerticalAlignment="Top"
HorizontalAlignment="Right"
Height="16"
Width="16"
Source="{StaticResource PackageAddedIcon}"
Visibility="{Binding Path=IsAdded, Converter={StaticResource BoolToVisibility}}"
Margin="2,2,2,2"/>
<Button
x:Name="addPackageButton"
Grid.Column="2"

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

@ -116,7 +116,7 @@ namespace ICSharpCode.AddInManager2.ViewModel @@ -116,7 +116,7 @@ namespace ICSharpCode.AddInManager2.ViewModel
continue;
}
string nuGetPackageID = addIn.AddIn.Properties["nuGetPackageID"];
string nuGetPackageID = addIn.LinkedNuGetPackageID;
if (!string.IsNullOrEmpty(nuGetPackageID))
{
if (nuGetPackageIDs.Contains(nuGetPackageID))

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

@ -114,7 +114,7 @@ namespace ICSharpCode.AddInManager2.ViewModel @@ -114,7 +114,7 @@ namespace ICSharpCode.AddInManager2.ViewModel
return (installedAddIn != null)
&& AddInManager.Setup.IsAddInInstalled(installedAddIn)
&& (installedAddIn.Version < _package.Version.Version);
&& (AddInManager.Setup.CompareAddInToPackageVersion(installedAddIn, _package) < 0);
}
}

Loading…
Cancel
Save