diff --git a/src/SharpIDE.Application/Features/Nuget/NugetClientService.cs b/src/SharpIDE.Application/Features/Nuget/NugetClientService.cs index e7ac258..fb2fb5c 100644 --- a/src/SharpIDE.Application/Features/Nuget/NugetClientService.cs +++ b/src/SharpIDE.Application/Features/Nuget/NugetClientService.cs @@ -10,7 +10,7 @@ using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence; namespace SharpIDE.Application.Features.Nuget; //public record IdePackageResult(IPackageSearchMetadata PackageSearchMetadata, List PackageSources); -public record IdePackageResult(string PackageId, List PackageFromSources); +public record IdePackageResult(string PackageId, List PackageFromSources, bool? IsTransitive); public record struct IdePackageFromSourceResult(IPackageSearchMetadata PackageSearchMetadata, PackageSource Source); public class NugetClientService { @@ -42,7 +42,7 @@ public class NugetClientService log: _nugetLogger, cancellationToken: cancellationToken).ConfigureAwait(false); - packagesResult.AddRange(results.Select(s => new IdePackageResult(s.Identity.Id, [new IdePackageFromSourceResult(s, source)]))); + packagesResult.AddRange(results.Select(s => new IdePackageResult(s.Identity.Id, [new IdePackageFromSourceResult(s, source)], null))); } // Combine, group, and order by download count @@ -118,12 +118,12 @@ public class NugetClientService var packagesResult = new List(); foreach (var installedPackage in installedPackages) { - var idePackageResult = new IdePackageResult(installedPackage.Name, []); + var isTransitive = installedPackage.IsTopLevel is false; + var idePackageResult = new IdePackageResult(installedPackage.Name, [], isTransitive); var nugetVersionString = installedPackage.ResolvedVersion ?? installedPackage.RequestedVersion; var nugetVersion = NuGetVersion.Parse(nugetVersionString); var packageIdentity = new PackageIdentity(installedPackage.Name, nugetVersion); - foreach (var source in packageSources) { var repository = Repository.Factory.GetCoreV3(source.Source); @@ -139,10 +139,7 @@ public class NugetClientService } } - if (idePackageResult.PackageFromSources.Count > 0) - { - packagesResult.Add(idePackageResult); - } + packagesResult.Add(idePackageResult); } return packagesResult; } diff --git a/src/SharpIDE.Godot/Features/Nuget/NugetPanel.cs b/src/SharpIDE.Godot/Features/Nuget/NugetPanel.cs index eef1e4a..7b773b6 100644 --- a/src/SharpIDE.Godot/Features/Nuget/NugetPanel.cs +++ b/src/SharpIDE.Godot/Features/Nuget/NugetPanel.cs @@ -28,6 +28,9 @@ public partial class NugetPanel : Control _availablePackagesItemList = GetNode("%AvailablePackagesVBoxContainer"); _nugetPackageDetails = GetNode("%NugetPackageDetails"); _nugetPackageDetails.Visible = false; + _installedPackagesVboxContainer.QueueFreeChildren(); + _implicitlyInstalledPackagesItemList.QueueFreeChildren(); + _availablePackagesItemList.QueueFreeChildren(); _ = Task.GodotRun(async () => { @@ -39,7 +42,6 @@ public partial class NugetPanel : Control var project = Solution.AllProjects.First(s => s.Name == "ProjectB"); await project.MsBuildEvaluationProjectTask; var installedPackages = await ProjectEvaluation.GetPackageReferencesForProject(project); - await this.InvokeAsync(() => _installedPackagesVboxContainer.QueueFreeChildren()); var idePackageResult = await _nugetClientService.GetPackagesForInstalledPackages(project.ChildNodeBasePath, installedPackages); var scenes = idePackageResult.Select(s => { @@ -52,11 +54,11 @@ public partial class NugetPanel : Control { foreach (var scene in scenes) { - _installedPackagesVboxContainer.AddChild(scene); + var container = scene.PackageResult.IsTransitive!.Value ? _implicitlyInstalledPackagesItemList : _installedPackagesVboxContainer; + container.AddChild(scene); } }); }); - await this.InvokeAsync(() => _availablePackagesItemList.QueueFreeChildren()); var scenes = result.Select(s => { var scene = _packageEntryScene.Instantiate();