separate transitive and top level packages in UI

This commit is contained in:
Matt Parker
2025-11-02 12:35:35 +10:00
parent ce1020c369
commit c7d72ef226
2 changed files with 10 additions and 11 deletions

View File

@@ -10,7 +10,7 @@ using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence;
namespace SharpIDE.Application.Features.Nuget; namespace SharpIDE.Application.Features.Nuget;
//public record IdePackageResult(IPackageSearchMetadata PackageSearchMetadata, List<PackageSource> PackageSources); //public record IdePackageResult(IPackageSearchMetadata PackageSearchMetadata, List<PackageSource> PackageSources);
public record IdePackageResult(string PackageId, List<IdePackageFromSourceResult> PackageFromSources); public record IdePackageResult(string PackageId, List<IdePackageFromSourceResult> PackageFromSources, bool? IsTransitive);
public record struct IdePackageFromSourceResult(IPackageSearchMetadata PackageSearchMetadata, PackageSource Source); public record struct IdePackageFromSourceResult(IPackageSearchMetadata PackageSearchMetadata, PackageSource Source);
public class NugetClientService public class NugetClientService
{ {
@@ -42,7 +42,7 @@ public class NugetClientService
log: _nugetLogger, log: _nugetLogger,
cancellationToken: cancellationToken).ConfigureAwait(false); 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 // Combine, group, and order by download count
@@ -118,12 +118,12 @@ public class NugetClientService
var packagesResult = new List<IdePackageResult>(); var packagesResult = new List<IdePackageResult>();
foreach (var installedPackage in installedPackages) 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 nugetVersionString = installedPackage.ResolvedVersion ?? installedPackage.RequestedVersion;
var nugetVersion = NuGetVersion.Parse(nugetVersionString); var nugetVersion = NuGetVersion.Parse(nugetVersionString);
var packageIdentity = new PackageIdentity(installedPackage.Name, nugetVersion); var packageIdentity = new PackageIdentity(installedPackage.Name, nugetVersion);
foreach (var source in packageSources) foreach (var source in packageSources)
{ {
var repository = Repository.Factory.GetCoreV3(source.Source); 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; return packagesResult;
} }

View File

@@ -28,6 +28,9 @@ public partial class NugetPanel : Control
_availablePackagesItemList = GetNode<VBoxContainer>("%AvailablePackagesVBoxContainer"); _availablePackagesItemList = GetNode<VBoxContainer>("%AvailablePackagesVBoxContainer");
_nugetPackageDetails = GetNode<NugetPackageDetails>("%NugetPackageDetails"); _nugetPackageDetails = GetNode<NugetPackageDetails>("%NugetPackageDetails");
_nugetPackageDetails.Visible = false; _nugetPackageDetails.Visible = false;
_installedPackagesVboxContainer.QueueFreeChildren();
_implicitlyInstalledPackagesItemList.QueueFreeChildren();
_availablePackagesItemList.QueueFreeChildren();
_ = Task.GodotRun(async () => _ = Task.GodotRun(async () =>
{ {
@@ -39,7 +42,6 @@ public partial class NugetPanel : Control
var project = Solution.AllProjects.First(s => s.Name == "ProjectB"); var project = Solution.AllProjects.First(s => s.Name == "ProjectB");
await project.MsBuildEvaluationProjectTask; await project.MsBuildEvaluationProjectTask;
var installedPackages = await ProjectEvaluation.GetPackageReferencesForProject(project); var installedPackages = await ProjectEvaluation.GetPackageReferencesForProject(project);
await this.InvokeAsync(() => _installedPackagesVboxContainer.QueueFreeChildren());
var idePackageResult = await _nugetClientService.GetPackagesForInstalledPackages(project.ChildNodeBasePath, installedPackages); var idePackageResult = await _nugetClientService.GetPackagesForInstalledPackages(project.ChildNodeBasePath, installedPackages);
var scenes = idePackageResult.Select(s => var scenes = idePackageResult.Select(s =>
{ {
@@ -52,11 +54,11 @@ public partial class NugetPanel : Control
{ {
foreach (var scene in scenes) 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 scenes = result.Select(s =>
{ {
var scene = _packageEntryScene.Instantiate<PackageEntry>(); var scene = _packageEntryScene.Instantiate<PackageEntry>();