From a17b9a63354073ebc3ac32fcc4d185a24d16bd16 Mon Sep 17 00:00:00 2001 From: Andreas Weizel Date: Mon, 8 Jul 2013 01:20:30 +0200 Subject: [PATCH 01/10] Added resource strings for UpdateNotifier. --- data/resources/StringResources.fr.resx | 155 ++++++++++++++++++ data/resources/StringResources.nl.resx | 12 ++ data/resources/StringResources.resx | 6 + .../Project/Src/UpdateNotifier.cs | 6 +- 4 files changed, 176 insertions(+), 3 deletions(-) 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/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); From 07da61da0b636c7be1d13d0edca561858030c609 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Sun, 7 Jul 2013 15:16:51 +0100 Subject: [PATCH 02/10] Support addins with subdirectories from the online gallery. Addin manager now copies all files and subdirectories from the extracted NuGet package to the temporary addin installation folder. --- .../Project/Src/Model/AddInSetup.cs | 36 +++++++++++-------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/Model/AddInSetup.cs b/src/AddIns/Misc/AddInManager2/Project/Src/Model/AddInSetup.cs index a7b18f701d..db87b53cc7 100644 --- a/src/AddIns/Misc/AddInManager2/Project/Src/Model/AddInSetup.cs +++ b/src/AddIns/Misc/AddInManager2/Project/Src/Model/AddInSetup.cs @@ -445,20 +445,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 +454,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) { From 541b51f6d3e4bccb5cf9b315da4549ba76c95bf4 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Mon, 8 Jul 2013 19:20:36 +0100 Subject: [PATCH 03/10] Fix PInvoke sample. --- samples/PInvokeAddIn/Project/PInvoke.nuspec | 3 ++- samples/PInvokeAddIn/Project/Src/PInvokeCodeGenerator.cs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) 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); } From f6649b343b4a45da23b2cc58c6ddc0ae4f1b44a2 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Mon, 8 Jul 2013 19:44:07 +0100 Subject: [PATCH 04/10] Only show latest version of addin from online gallery. --- .../Project/Src/ViewModel/AvailableAddInsViewModel.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs index 9a371d20b5..731dfc3334 100644 --- a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs +++ b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs @@ -44,7 +44,8 @@ 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) From 1e291212521a0a0645862ec73d2d1b4f03675e78 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Mon, 8 Jul 2013 20:18:44 +0100 Subject: [PATCH 05/10] Revert "Only show latest version of addin from online gallery." This reverts commit f6649b343b4a45da23b2cc58c6ddc0ae4f1b44a2. --- .../Project/Src/ViewModel/AvailableAddInsViewModel.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs index 731dfc3334..9a371d20b5 100644 --- a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs +++ b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs @@ -44,8 +44,7 @@ namespace ICSharpCode.AddInManager2.ViewModel protected override IQueryable GetAllPackages() { - return (ActiveRepository ?? AddInManager.Repositories.AllRegistered).GetPackages() - .Where(package => package.IsLatestVersion); + return (ActiveRepository ?? AddInManager.Repositories.AllRegistered).GetPackages(); } protected override IEnumerable GetFilteredPackagesBeforePagingResults(IQueryable allPackages) From 54811a1329a6cac69716fca35f93b6e4287f4288 Mon Sep 17 00:00:00 2001 From: Andreas Weizel Date: Tue, 9 Jul 2013 23:38:36 +0200 Subject: [PATCH 06/10] Fix: Under certain circumstances multiple releases of a package are shown in list of available packages. --- .../AvailableAddInsViewModelTests.cs | 64 ++++++++++++++++++- .../AddInManager2.Tests/Fakes/FakePackage.cs | 5 ++ .../Src/ViewModel/AvailableAddInsViewModel.cs | 9 +-- .../Src/ViewModel/NuGetAddInsViewModelBase.cs | 2 +- 4 files changed, 71 insertions(+), 9 deletions(-) diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs index 3604ef6a96..d2df883eff 100644 --- a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs +++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs @@ -272,6 +272,68 @@ namespace ICSharpCode.AddInManager2.Tests Assert.That(firstAddIn.Version, Is.EqualTo(_addIn2.Version), "Version of 1st AddIn"); } + [Test] + public void SearchInstallableAddInsWithMultipleReleasesAndDownloadCountSorting() + { + CreateAddIns(); + _addIn1.Enabled = true; + + // Package to be shown in repository + FakePackage fakePackage2 = new FakePackage() + { + Id = _addIn2.Manifest.PrimaryIdentity, + Version = new SemanticVersion(_addIn2.Version), + Tags = SharpDevelopAddInTag + }; + FakePackage fakePackage1 = new FakePackage() + { + Id = _addIn1.Manifest.PrimaryIdentity, + Version = new SemanticVersion(_addIn1.Version), + Tags = SharpDevelopAddInTag, + DownloadCount = 10 + }; + FakePackage fakePackage2_new = new FakePackage() + { + Id = _addIn2_new.Manifest.PrimaryIdentity, + Version = new SemanticVersion(_addIn2_new.Version), + Tags = SharpDevelopAddInTag, + DownloadCount = 20 + }; + + // 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, fakePackage1, fakePackage2_new }).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() // { @@ -335,7 +397,7 @@ 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 }; 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/ViewModel/AvailableAddInsViewModel.cs b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs index 9a371d20b5..ff0ce5c5ac 100644 --- a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs +++ b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs @@ -50,13 +50,8 @@ namespace ICSharpCode.AddInManager2.ViewModel 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/NuGetAddInsViewModelBase.cs b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetAddInsViewModelBase.cs index 0682d62999..37d0d605ae 100644 --- a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetAddInsViewModelBase.cs +++ b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetAddInsViewModelBase.cs @@ -143,7 +143,7 @@ namespace ICSharpCode.AddInManager2.ViewModel return _allPackages; } - protected virtual IQueryable OrderPackages(IQueryable packages) + private IQueryable OrderPackages(IQueryable packages) { return packages .OrderBy(package => package.Id); From 13de1ecd9a5d94f792898c61adb8bae7975f8991 Mon Sep 17 00:00:00 2001 From: Andreas Weizel Date: Wed, 10 Jul 2013 00:14:20 +0200 Subject: [PATCH 07/10] Fix: List of available AddIns might show an older instead of most recent release of a package. --- .../AvailableAddInsViewModelTests.cs | 25 ++++++++++--------- .../Src/ViewModel/NuGetAddInsViewModelBase.cs | 3 ++- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs index d2df883eff..6f914666de 100644 --- a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs +++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs @@ -225,7 +225,7 @@ 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, @@ -278,12 +278,14 @@ namespace ICSharpCode.AddInManager2.Tests CreateAddIns(); _addIn1.Enabled = true; - // Package to be shown in repository - FakePackage fakePackage2 = new FakePackage() + // 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.Manifest.PrimaryIdentity, - Version = new SemanticVersion(_addIn2.Version), - Tags = SharpDevelopAddInTag + Id = _addIn2_new.Manifest.PrimaryIdentity, + Version = new SemanticVersion(_addIn2_new.Version), + Tags = SharpDevelopAddInTag, + DownloadCount = 30 }; FakePackage fakePackage1 = new FakePackage() { @@ -292,12 +294,11 @@ namespace ICSharpCode.AddInManager2.Tests Tags = SharpDevelopAddInTag, DownloadCount = 10 }; - FakePackage fakePackage2_new = new FakePackage() + FakePackage fakePackage2 = new FakePackage() { - Id = _addIn2_new.Manifest.PrimaryIdentity, - Version = new SemanticVersion(_addIn2_new.Version), - Tags = SharpDevelopAddInTag, - DownloadCount = 20 + Id = _addIn2.Manifest.PrimaryIdentity, + Version = new SemanticVersion(_addIn2.Version), + Tags = SharpDevelopAddInTag }; // List of NuGet repositories @@ -308,7 +309,7 @@ namespace ICSharpCode.AddInManager2.Tests List registeredPackageRepositories = new List(); FakeCorePackageRepository remoteRepository = new FakeCorePackageRepository(); remoteRepository.Source = registeredPackageSources[0].Source; - remoteRepository.ReturnedPackages = (new IPackage[] { fakePackage2, fakePackage1, fakePackage2_new }).AsQueryable(); + remoteRepository.ReturnedPackages = (new IPackage[] { fakePackage2_new, fakePackage1, fakePackage2 }).AsQueryable(); _services.FakeRepositories.RegisteredPackageRepositories = registeredPackageRepositories; // PackageRepository service should return remoteRepository instance diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetAddInsViewModelBase.cs b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetAddInsViewModelBase.cs index 37d0d605ae..2a549a9932 100644 --- a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetAddInsViewModelBase.cs +++ b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetAddInsViewModelBase.cs @@ -146,7 +146,8 @@ namespace ICSharpCode.AddInManager2.ViewModel private IQueryable OrderPackages(IQueryable packages) { return packages - .OrderBy(package => package.Id); + .OrderBy(package => package.Id) + .ThenBy(package => package.Version); } private IQueryable FilterPackagesBySearchCriteria(IQueryable packages) From fc5b1497361c7ff959c401a4c193418b087f4aa2 Mon Sep 17 00:00:00 2001 From: Andreas Weizel Date: Sun, 14 Jul 2013 00:38:37 +0200 Subject: [PATCH 08/10] Showing correct path to .addin file in list of installed packages when installing an .sdaddin package or an external AddIn. --- .../AddInManager2/Project/Src/Model/AddInSetup.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/Model/AddInSetup.cs b/src/AddIns/Misc/AddInManager2/Project/Src/Model/AddInSetup.cs index db87b53cc7..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) From f9e6dbfa3259ae9e971f8adb6514af11784d4a79 Mon Sep 17 00:00:00 2001 From: Andreas Weizel Date: Sun, 14 Jul 2013 00:51:50 +0200 Subject: [PATCH 09/10] Removing error message when clicking at "Install from archive..." button. --- .../Project/Src/ViewModel/InstalledAddInsViewModel.cs | 3 +++ 1 file changed, 3 insertions(+) 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; From 64035be9fd6bb28f9172732f8b8eb3cd86de036d Mon Sep 17 00:00:00 2001 From: Andreas Weizel Date: Sun, 14 Jul 2013 01:09:16 +0200 Subject: [PATCH 10/10] Re-added prefiltering of available AddIn NuGet packages using IsLatestVersion, adapted unit tests. --- .../AvailableAddInsViewModelTests.cs | 70 ++++++++++++------- .../Src/ViewModel/AvailableAddInsViewModel.cs | 5 +- 2 files changed, 47 insertions(+), 28 deletions(-) diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs index 6f914666de..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 @@ -230,13 +235,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 @@ -285,20 +292,23 @@ namespace ICSharpCode.AddInManager2.Tests Id = _addIn2_new.Manifest.PrimaryIdentity, Version = new SemanticVersion(_addIn2_new.Version), Tags = SharpDevelopAddInTag, - DownloadCount = 30 + DownloadCount = 30, + IsLatestVersion = true }; FakePackage fakePackage1 = new FakePackage() { Id = _addIn1.Manifest.PrimaryIdentity, Version = new SemanticVersion(_addIn1.Version), Tags = SharpDevelopAddInTag, - DownloadCount = 10 + DownloadCount = 10, + IsLatestVersion = true }; FakePackage fakePackage2 = new FakePackage() { Id = _addIn2.Manifest.PrimaryIdentity, Version = new SemanticVersion(_addIn2.Version), - Tags = SharpDevelopAddInTag + Tags = SharpDevelopAddInTag, + IsLatestVersion = false }; // List of NuGet repositories @@ -340,7 +350,7 @@ namespace ICSharpCode.AddInManager2.Tests // { // CreateAddIns(); // _addIn1.Enabled = true; -// +// // // Package to be shown in repository // FakePackage fakePackage1 = new FakePackage() // { @@ -353,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"); @@ -400,7 +410,8 @@ namespace ICSharpCode.AddInManager2.Tests { Id = _addIn1.Manifest.PrimaryIdentity + i.ToString("00"), Version = new SemanticVersion(_addIn1.Version), - Tags = SharpDevelopAddInTag + Tags = SharpDevelopAddInTag, + IsLatestVersion = true }; } @@ -478,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); @@ -575,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); @@ -672,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/Project/Src/ViewModel/AvailableAddInsViewModel.cs b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs index ff0ce5c5ac..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,7 +44,8 @@ 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)