diff --git a/data/resources/StringResources.fr.resx b/data/resources/StringResources.fr.resx
index f60b7f2b8e..8070e47e45 100644
--- a/data/resources/StringResources.fr.resx
+++ b/data/resources/StringResources.fr.resx
@@ -229,6 +229,146 @@ Téléchargez un AddIn depuis l'Internet, cliquez ensuite sur 'Installer un AddI
Format de fichier inconnu:
+
+ Installer depuis un fichier...
+
+
+ Dépôt:
+
+
+ Rechercher:
+
+
+ Voir les Add-Ins pré-installés
+
+
+ Voir les pré-releases
+
+
+ Impossible de désinstaller le gestionnaire d'Add-In, car il est nécessaire pour ré-installer des Add-Ins.
+
+
+ Dépôt des Add-Ins SharpDevelop
+
+
+ Auteur:
+
+
+ Dépendances:
+
+
+ Téléchargements:
+
+
+ Nom de fichier:
+
+
+ Version installée:
+
+
+ Dernière mise à jour:
+
+
+ Plus d'informations
+
+
+ Nouvelle version:
+
+
+ Evaluation:
+
+
+ Signaler un abus
+
+
+ Version:
+
+
+ Voir le contrat de license
+
+
+ Les Add-Ins installés suivant sont dépendant de "{0}"
+
+{1}
+
+Ils ne fonctionneront plus si vous désactivez cet Add-In! Souhaitez-vous continuer?
+
+
+ Package "{0}" nécessite au moins une dépendance:
+
+{1}
+
+L'application va essayer de les télécharger et de les installer. Souhaitez-vous continuer?
+
+
+ Le package sélectionné ne contient pas un Add-In SharpDevelop.
+
+
+ J'&Accepte
+
+
+ Je &Décline
+
+
+ En cliquant "J'accepte", vous êtes d'accord pour la license du package suivant.
+Si vous ne le souhaitez pas, veuillez cliquer "Je décline".
+
+
+ En cliquant "J'accepte", vous êtes d'accord pour la license des packages suivant.
+Si vous ne le souhaitez pas, veuillez cliquer "Je décline".
+
+
+ Le package suivant nécessite que vous acceptiez sa license:
+
+
+ Le package suivant nécessite que vous acceptiez sa license:
+
+
+ Contrat de license
+
+
+ Ajouter
+
+
+ Descendre
+
+
+ Monter
+
+
+ Nom:
+
+
+ Supprimer
+
+
+ Source:
+
+
+ Add-Ins
+
+
+ Dépots
+
+
+ Les Add-Ins installés suivant sont dépendant de "{0}"
+
+{1}
+
+Ils ne fonctionneront plus si vous désinstallez cet Add-In! Souhaitez-vous continuer?
+
+
+ SharpDevelop Add-Ins|*.sdaddin;*.addin|Tous les fichiers|*.*
+
+
+ Disponible
+
+
+ Installées
+
+
+ Mises à jour
+
Ce fichier contient des retour-chariots inconsistents.
@@ -4467,6 +4607,9 @@ Soit ils n'existent pas, soit le document Wix n'est pas pour WiX 3.0 et l'espace
Extension du framework .NET
+
+ WiX n'est pas installé. Téléchargez le depuis http://wixtoolset.org/
+
Aucune différence n'a été trouvée.
@@ -5745,6 +5888,9 @@ Soit ils n'existent pas, soit le document Wix n'est pas pour WiX 3.0 et l'espace
Générateur de code ressource: aucune propriété de ressource ne peut être générée pour la ressource '{0}'.
+
+ Commentaire
+
Contenu
@@ -5757,6 +5903,12 @@ Soit ils n'existent pas, soit le document Wix n'est pas pour WiX 3.0 et l'espace
Copier le nom de la ressource
+
+ Editer le commentaire
+
+
+ Saisissez le nouveau texte pour le commentaire de cette ressource:
+
&Renommer
@@ -5772,6 +5924,9 @@ Soit ils n'existent pas, soit le document Wix n'est pas pour WiX 3.0 et l'espace
Tous les fichiers (*.*)
+
+ Toutes les extensions connues
+
Fichiers d'Assemblies (*.exe;*.dll)
diff --git a/data/resources/StringResources.nl.resx b/data/resources/StringResources.nl.resx
index 51d3770d28..04ca250840 100644
--- a/data/resources/StringResources.nl.resx
+++ b/data/resources/StringResources.nl.resx
@@ -4608,6 +4608,9 @@ Microsoft.Tools.WindowsInstallerXml.Extenties.NetFxCompiler, WixNetFxExtentie
.NET Raamwerk uitbreiding
+
+ WiX is niet geïnstalleerd. Download a.u.b. WiX van http://wixtoolset.org/
+
Geen verschil gevonden.
@@ -5886,6 +5889,9 @@ Microsoft.Tools.WindowsInstallerXml.Extenties.NetFxCompiler, WixNetFxExtentie
Hulpbron code generator: er kon geen eigenschap gegenereerd worden voor hulpbron '{0}',
+
+ Commentaar
+
Inhoud
@@ -5898,6 +5904,12 @@ Microsoft.Tools.WindowsInstallerXml.Extenties.NetFxCompiler, WixNetFxExtentie
Kopieer naam van hulpbron
+
+ Commentaar redigeren
+
+
+ Voer de nieuwe tekst voor het hulpbron commentaar in:
+
&Hernoemen
diff --git a/data/resources/StringResources.resx b/data/resources/StringResources.resx
index 2285cd9498..29396b9650 100644
--- a/data/resources/StringResources.resx
+++ b/data/resources/StringResources.resx
@@ -360,6 +360,12 @@ They will stop working after removing this AddIn! Are you sure you want to conti
SharpDevelop AddIns|*.sdaddin;*.addin|All files|*.*
+
+ Click here to see the updates.
+
+
+ Updates for SharpDevelop are available
+
Available
diff --git a/samples/PInvokeAddIn/Project/PInvoke.nuspec b/samples/PInvokeAddIn/Project/PInvoke.nuspec
index 21425078d8..8bc2b1955b 100644
--- a/samples/PInvokeAddIn/Project/PInvoke.nuspec
+++ b/samples/PInvokeAddIn/Project/PInvoke.nuspec
@@ -2,11 +2,12 @@
PInvoke
- 0.2
+ 0.3
Matt Ward
SharpDevelop
false
PInvoke.Net integration for SharpDevelop.
+ http://community.sharpdevelop.net/blogs/mattward/SharpDevelop.png
PInvoke.Net integration for SharpDevelop.
en-US
diff --git a/samples/PInvokeAddIn/Project/Src/PInvokeCodeGenerator.cs b/samples/PInvokeAddIn/Project/Src/PInvokeCodeGenerator.cs
index 0d66f91909..be9591b237 100644
--- a/samples/PInvokeAddIn/Project/Src/PInvokeCodeGenerator.cs
+++ b/samples/PInvokeAddIn/Project/Src/PInvokeCodeGenerator.cs
@@ -21,7 +21,7 @@ namespace ICSharpCode.PInvokeAddIn
{
using (editor.Document.OpenUndoGroup()) {
int startLine = editor.Document.GetLineByOffset(editor.SelectionStart).LineNumber;
- editor.SelectedText = DocumentUtilitites.NormalizeNewLines(signature, editor.Document, startLine);
+ editor.SelectedText = DocumentUtilities.NormalizeNewLines(signature, editor.Document, startLine);
int endLine = editor.Document.GetLineByOffset(editor.SelectionStart + editor.SelectionLength).LineNumber;
editor.Language.FormattingStrategy.IndentLines(editor, startLine, endLine);
}
diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs
index 3604ef6a96..dfa23ef759 100644
--- a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs
+++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs
@@ -88,19 +88,22 @@ namespace ICSharpCode.AddInManager2.Tests
{
Id = _addIn1.Manifest.PrimaryIdentity,
Version = new SemanticVersion(_addIn1.Version),
- Tags = SharpDevelopAddInTag
+ Tags = SharpDevelopAddInTag,
+ IsLatestVersion = false
};
FakePackage fakePackage1_new = new FakePackage()
{
Id = _addIn1_new.Manifest.PrimaryIdentity,
Version = new SemanticVersion(_addIn1_new.Version),
- Tags = SharpDevelopAddInTag
+ Tags = SharpDevelopAddInTag,
+ IsLatestVersion = true
};
FakePackage fakePackage2 = new FakePackage()
{
Id = _addIn2.Manifest.PrimaryIdentity,
Version = new SemanticVersion(_addIn2.Version),
- Tags = SharpDevelopAddInTag
+ Tags = SharpDevelopAddInTag,
+ IsLatestVersion = true
};
// List of NuGet repositories
@@ -155,13 +158,15 @@ namespace ICSharpCode.AddInManager2.Tests
{
Id = _addIn1.Manifest.PrimaryIdentity,
Version = new SemanticVersion(_addIn1.Version),
- Tags = SharpDevelopAddInTag
+ Tags = SharpDevelopAddInTag,
+ IsLatestVersion = true
};
FakePackage fakePackage2 = new FakePackage()
{
Id = _addIn2.Manifest.PrimaryIdentity,
Version = new SemanticVersion(_addIn2.Version),
- Tags = SharpDevelopAddInTag
+ Tags = SharpDevelopAddInTag,
+ IsLatestVersion = true
};
// List of NuGet repositories
@@ -225,18 +230,20 @@ namespace ICSharpCode.AddInManager2.Tests
CreateAddIns();
_addIn1.Enabled = true;
- // Package to be shown in repository
+ // Packages to be shown in repository
FakePackage fakePackage1 = new FakePackage()
{
Id = _addIn1.Manifest.PrimaryIdentity,
Version = new SemanticVersion(_addIn1.Version),
- Tags = SharpDevelopAddInTag
+ Tags = SharpDevelopAddInTag,
+ IsLatestVersion = true
};
FakePackage fakePackage2 = new FakePackage()
{
Id = _addIn2.Manifest.PrimaryIdentity,
Version = new SemanticVersion(_addIn2.Version),
- Tags = SharpDevelopAddInTag
+ Tags = SharpDevelopAddInTag,
+ IsLatestVersion = true
};
// List of NuGet repositories
@@ -272,12 +279,78 @@ namespace ICSharpCode.AddInManager2.Tests
Assert.That(firstAddIn.Version, Is.EqualTo(_addIn2.Version), "Version of 1st AddIn");
}
+ [Test]
+ public void SearchInstallableAddInsWithMultipleReleasesAndDownloadCountSorting()
+ {
+ CreateAddIns();
+ _addIn1.Enabled = true;
+
+ // Packages to be shown in repository
+ // To test correct sorting we let the newer release of addIn2 appear before the older one.
+ FakePackage fakePackage2_new = new FakePackage()
+ {
+ Id = _addIn2_new.Manifest.PrimaryIdentity,
+ Version = new SemanticVersion(_addIn2_new.Version),
+ Tags = SharpDevelopAddInTag,
+ DownloadCount = 30,
+ IsLatestVersion = true
+ };
+ FakePackage fakePackage1 = new FakePackage()
+ {
+ Id = _addIn1.Manifest.PrimaryIdentity,
+ Version = new SemanticVersion(_addIn1.Version),
+ Tags = SharpDevelopAddInTag,
+ DownloadCount = 10,
+ IsLatestVersion = true
+ };
+ FakePackage fakePackage2 = new FakePackage()
+ {
+ Id = _addIn2.Manifest.PrimaryIdentity,
+ Version = new SemanticVersion(_addIn2.Version),
+ Tags = SharpDevelopAddInTag,
+ IsLatestVersion = false
+ };
+
+ // List of NuGet repositories
+ List registeredPackageSources = new List();
+ registeredPackageSources.Add(new PackageSource("", "Test Repository"));
+ _services.FakeRepositories.RegisteredPackageSources = registeredPackageSources;
+
+ List registeredPackageRepositories = new List();
+ FakeCorePackageRepository remoteRepository = new FakeCorePackageRepository();
+ remoteRepository.Source = registeredPackageSources[0].Source;
+ remoteRepository.ReturnedPackages = (new IPackage[] { fakePackage2_new, fakePackage1, fakePackage2 }).AsQueryable();
+ _services.FakeRepositories.RegisteredPackageRepositories = registeredPackageRepositories;
+
+ // PackageRepository service should return remoteRepository instance
+ _services.FakeRepositories.GetRepositoryFromSourceCallback = delegate(PackageSource packageSource)
+ {
+ return remoteRepository;
+ };
+
+ FakeCorePackageRepository localRepository = new FakeCorePackageRepository();
+ _services.FakeNuGet.FakeCorePackageManager.LocalRepository = localRepository;
+ localRepository.ReturnedPackages = (new IPackage[] { }).AsQueryable();
+
+ var viewModel = new AvailableAddInsViewModel(_services);
+ viewModel.ReadPackagesAndWaitForUpdate();
+
+ // There must be only 2 packages in list, because user should see only latest releases
+ Assert.That(viewModel.AddInPackages.Count, Is.EqualTo(2), "AddIn list must contain 2 items.");
+
+ // fakePackage2_new is the first one, because it has a greater download count
+ AddInPackageViewModelBase firstAddIn = viewModel.AddInPackages[0];
+ Assert.That(firstAddIn.Id, Is.EqualTo(_addIn2_new.Manifest.PrimaryIdentity), "Primary identity of 1st AddIn");
+ Assert.That(firstAddIn.Name, Is.EqualTo(_addIn2_new.Manifest.PrimaryIdentity), "Name of 1st AddIn");
+ Assert.That(firstAddIn.Version, Is.EqualTo(_addIn2_new.Version), "Version of 1st AddIn");
+ }
+
// [Test]
// public void FilteringOutNonSharpDevelopPackages()
// {
// CreateAddIns();
// _addIn1.Enabled = true;
-//
+//
// // Package to be shown in repository
// FakePackage fakePackage1 = new FakePackage()
// {
@@ -290,33 +363,33 @@ namespace ICSharpCode.AddInManager2.Tests
// Version = new SemanticVersion(_addIn2.Version),
// Tags = SharpDevelopAddInTag
// };
-//
+//
// // List of NuGet repositories
// List registeredPackageSources = new List();
// registeredPackageSources.Add(new PackageSource("", "Test Repository"));
// _services.FakeRepositories.RegisteredPackageSources = registeredPackageSources;
-//
+//
// List registeredPackageRepositories = new List();
// FakeCorePackageRepository remoteRepository = new FakeCorePackageRepository();
// remoteRepository.Source = registeredPackageSources[0].Source;
// remoteRepository.ReturnedPackages = (new IPackage[] { fakePackage1, fakePackage2 }).AsQueryable();
// _services.FakeRepositories.RegisteredPackageRepositories = registeredPackageRepositories;
-//
+//
// // PackageRepository service should return remoteRepository instance
// _services.FakeRepositories.GetRepositoryFromSourceCallback = delegate(PackageSource packageSource)
// {
// return remoteRepository;
// };
-//
+//
// FakeCorePackageRepository localRepository = new FakeCorePackageRepository();
// _services.FakeNuGet.FakeCorePackageManager.LocalRepository = localRepository;
// localRepository.ReturnedPackages = (new IPackage[] { }).AsQueryable();
-//
+//
// var viewModel = new AvailableAddInsViewModel(_services);
// viewModel.ReadPackagesAndWaitForUpdate();
-//
+//
// Assert.That(viewModel.AddInPackages.Count, Is.EqualTo(1), "AddIn list must contain 1 item.");
-//
+//
// AddInPackageViewModelBase firstAddIn = viewModel.AddInPackages[0];
// Assert.That(firstAddIn.Id, Is.EqualTo(_addIn2.Manifest.PrimaryIdentity), "Primary identity of 1st AddIn");
// Assert.That(firstAddIn.Name, Is.EqualTo(_addIn2.Manifest.PrimaryIdentity), "Name of 1st AddIn");
@@ -335,9 +408,10 @@ namespace ICSharpCode.AddInManager2.Tests
{
fakePackages[i] = new FakePackage()
{
- Id = _addIn1.Manifest.PrimaryIdentity + i.ToString(),
+ Id = _addIn1.Manifest.PrimaryIdentity + i.ToString("00"),
Version = new SemanticVersion(_addIn1.Version),
- Tags = SharpDevelopAddInTag
+ Tags = SharpDevelopAddInTag,
+ IsLatestVersion = true
};
}
@@ -415,13 +489,15 @@ namespace ICSharpCode.AddInManager2.Tests
{
Id = _addIn1.Manifest.PrimaryIdentity,
Version = new SemanticVersion(_addIn1.Version),
- Tags = SharpDevelopAddInTag
+ Tags = SharpDevelopAddInTag,
+ IsLatestVersion = true
};
FakePackage fakePackage2 = new FakePackage()
{
Id = _addIn2.Manifest.PrimaryIdentity,
Version = new SemanticVersion(_addIn2.Version),
- Tags = SharpDevelopAddInTag
+ Tags = SharpDevelopAddInTag,
+ IsLatestVersion = true
};
_addIn1.Properties.Set(ManagedAddIn.NuGetPackageIDManifestAttribute, fakePackage1.Id);
@@ -512,13 +588,15 @@ namespace ICSharpCode.AddInManager2.Tests
{
Id = _addIn_noVersion.Manifest.PrimaryIdentity,
Version = new SemanticVersion("1.0.2.0"),
- Tags = SharpDevelopAddInTag
+ Tags = SharpDevelopAddInTag,
+ IsLatestVersion = true
};
FakePackage fakePackage2 = new FakePackage()
{
Id = _addIn2.Manifest.PrimaryIdentity,
Version = new SemanticVersion(_addIn2.Version),
- Tags = SharpDevelopAddInTag
+ Tags = SharpDevelopAddInTag,
+ IsLatestVersion = true
};
_addIn_noVersion.Properties.Set(ManagedAddIn.NuGetPackageIDManifestAttribute, fakePackage1.Id);
@@ -609,19 +687,22 @@ namespace ICSharpCode.AddInManager2.Tests
{
Id = _addIn1.Manifest.PrimaryIdentity,
Version = new SemanticVersion(_addIn1.Version),
- Tags = SharpDevelopAddInTag
+ Tags = SharpDevelopAddInTag,
+ IsLatestVersion = false
};
FakePackage fakePackage1_new = new FakePackage()
{
Id = _addIn1_new.Manifest.PrimaryIdentity,
Version = new SemanticVersion(_addIn1_new.Version),
- Tags = SharpDevelopAddInTag
+ Tags = SharpDevelopAddInTag,
+ IsLatestVersion = true
};
FakePackage fakePackage2 = new FakePackage()
{
Id = _addIn2.Manifest.PrimaryIdentity,
Version = new SemanticVersion(_addIn2.Version),
- Tags = SharpDevelopAddInTag
+ Tags = SharpDevelopAddInTag,
+ IsLatestVersion = true
};
_addIn1.Properties.Set(ManagedAddIn.NuGetPackageIDManifestAttribute, fakePackage1_old.Id);
diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackage.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackage.cs
index 5557c651d7..61490833d5 100644
--- a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackage.cs
+++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackage.cs
@@ -182,5 +182,10 @@ namespace ICSharpCode.AddInManager2.Tests.Fakes
throw new NotImplementedException();
}
}
+
+ public override string ToString()
+ {
+ return string.Format("[FakePackage Id={0}, Version={1}]", Id, Version);
+ }
}
}
diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/Model/AddInSetup.cs b/src/AddIns/Misc/AddInManager2/Project/Src/Model/AddInSetup.cs
index a7b18f701d..bfdbd8b904 100644
--- a/src/AddIns/Misc/AddInManager2/Project/Src/Model/AddInSetup.cs
+++ b/src/AddIns/Misc/AddInManager2/Project/Src/Model/AddInSetup.cs
@@ -417,11 +417,20 @@ namespace ICSharpCode.AddInManager2.Model
{
Directory.Delete(targetDir, true);
}
- Directory.CreateDirectory(targetDir);
+ var directoryInfo = Directory.CreateDirectory(targetDir);
FastZip fastZip = new FastZip();
fastZip.CreateEmptyDirectories = true;
fastZip.ExtractZip(zipFile, targetDir, null);
+ if (addIn.FileName == null) {
+ // Find .addin file to set it in AddIn object
+ var addInFiles = directoryInfo.GetFiles("*.addin", SearchOption.TopDirectoryOnly);
+ var addInFile = addInFiles.FirstOrDefault();
+ if (addInFile != null) {
+ addIn.FileName = addInFile.FullName;
+ }
+ }
+
return true;
}
catch (Exception)
@@ -445,20 +454,7 @@ namespace ICSharpCode.AddInManager2.Model
{
Directory.Delete(targetDir, true);
}
- Directory.CreateDirectory(targetDir);
- var packageContentsFiles = Directory.EnumerateFiles(packageDirectory, "*.*", SearchOption.TopDirectoryOnly);
- if (packageContentsFiles != null)
- {
- foreach (var file in packageContentsFiles)
- {
- // Don't copy the .nupkg file
- FileInfo fileInfo = new FileInfo(file);
- if (fileInfo.Extension != ".nupkg")
- {
- File.Copy(file, Path.Combine(targetDir, fileInfo.Name));
- }
- }
- }
+ DeepCopy(packageDirectory, targetDir);
return true;
}
@@ -467,6 +463,27 @@ namespace ICSharpCode.AddInManager2.Model
return false;
}
}
+
+ void DeepCopy(string packageDirectory, string targetDirectory)
+ {
+ Directory.CreateDirectory(targetDirectory);
+
+ foreach (string file in Directory.EnumerateFiles(packageDirectory, "*.*", SearchOption.TopDirectoryOnly))
+ {
+ // Don't copy the .nupkg file
+ FileInfo fileInfo = new FileInfo(file);
+ if (fileInfo.Extension != ".nupkg")
+ {
+ File.Copy(file, Path.Combine(targetDirectory, fileInfo.Name));
+ }
+ }
+
+ foreach (string packageSubDirectory in Directory.EnumerateDirectories(packageDirectory))
+ {
+ string newTargetDirectory = Path.Combine(targetDirectory, Path.GetFileName(packageSubDirectory));
+ DeepCopy(packageSubDirectory, newTargetDirectory);
+ }
+ }
public void CancelUpdate(AddIn addIn)
{
diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/UpdateNotifier.cs b/src/AddIns/Misc/AddInManager2/Project/Src/UpdateNotifier.cs
index ee4d0bbafb..977e79bc1b 100644
--- a/src/AddIns/Misc/AddInManager2/Project/Src/UpdateNotifier.cs
+++ b/src/AddIns/Misc/AddInManager2/Project/Src/UpdateNotifier.cs
@@ -128,9 +128,9 @@ namespace ICSharpCode.AddInManager2
_notifyIcon.Click += NotifyIcon_Click;
_notifyIcon.BalloonTipClicked += NotifyIcon_Click;
- _notifyIcon.Text = "Updates for SharpDevelop are available";
- _notifyIcon.BalloonTipTitle = "Updates for SharpDevelop are available";
- _notifyIcon.BalloonTipText = "Click here to see the updates";
+ _notifyIcon.Text = SD.ResourceService.GetString("AddInManager2.UpdateNotifier.BubbleTitle");
+ _notifyIcon.BalloonTipTitle = _notifyIcon.Text;
+ _notifyIcon.BalloonTipText = SD.ResourceService.GetString("AddInManager2.UpdateNotifier.BubbleText");
_notifyIcon.Visible = true;
_notifyIcon.ShowBalloonTip(40000);
diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs
index 9a371d20b5..269d6ad6c3 100644
--- a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs
+++ b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs
@@ -9,7 +9,7 @@ using ICSharpCode.SharpDevelop;
using NuGet;
namespace ICSharpCode.AddInManager2.ViewModel
-{
+{
public class AvailableAddInsViewModel : NuGetAddInsViewModelBase
{
public AvailableAddInsViewModel()
@@ -44,19 +44,15 @@ namespace ICSharpCode.AddInManager2.ViewModel
protected override IQueryable GetAllPackages()
{
- return (ActiveRepository ?? AddInManager.Repositories.AllRegistered).GetPackages();
+ return (ActiveRepository ?? AddInManager.Repositories.AllRegistered).GetPackages()
+ .Where(package => package.IsLatestVersion);
}
protected override IEnumerable GetFilteredPackagesBeforePagingResults(IQueryable allPackages)
{
return base.GetFilteredPackagesBeforePagingResults(allPackages)
- .Where(package => package.IsReleaseVersion())
- .DistinctLast(PackageEqualityComparer.Id);
- }
-
- protected override IQueryable OrderPackages(IQueryable packages)
- {
- return packages.OrderByDescending(package => package.DownloadCount);
+ .OrderByDescending(package => package.DownloadCount)
+ .ThenBy(package => package.Id);
}
protected override void UpdatePrereleaseFilter()
diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/InstalledAddInsViewModel.cs b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/InstalledAddInsViewModel.cs
index f143f41c24..eecd8795a3 100644
--- a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/InstalledAddInsViewModel.cs
+++ b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/InstalledAddInsViewModel.cs
@@ -159,6 +159,9 @@ namespace ICSharpCode.AddInManager2.ViewModel
protected override void InstallFromArchive()
{
+ // Notify about new operation
+ AddInManager.Events.OnOperationStarted();
+
OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = SD.ResourceService.GetString("AddInManager2.SDAddInFileFilter");
dlg.Multiselect = true;
diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetAddInsViewModelBase.cs b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetAddInsViewModelBase.cs
index 0682d62999..2a549a9932 100644
--- a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetAddInsViewModelBase.cs
+++ b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetAddInsViewModelBase.cs
@@ -143,10 +143,11 @@ namespace ICSharpCode.AddInManager2.ViewModel
return _allPackages;
}
- protected virtual IQueryable OrderPackages(IQueryable packages)
+ private IQueryable OrderPackages(IQueryable packages)
{
return packages
- .OrderBy(package => package.Id);
+ .OrderBy(package => package.Id)
+ .ThenBy(package => package.Version);
}
private IQueryable FilterPackagesBySearchCriteria(IQueryable packages)