refactor to handle multiple projects
This commit is contained in:
@@ -26,8 +26,7 @@ public partial class NugetPanel : Control
|
||||
|
||||
private readonly PackedScene _packageEntryScene = ResourceLoader.Load<PackedScene>("uid://cqc2xlt81ju8s");
|
||||
private readonly Texture2D _csprojIcon = ResourceLoader.Load<Texture2D>("uid://cqt30ma6xgder");
|
||||
|
||||
private IdePackageResult? _selectedPackage;
|
||||
|
||||
// we use this to access the project for the dropdown
|
||||
private List<SharpIdeProjectModel?> _projects = null!;
|
||||
|
||||
@@ -81,7 +80,6 @@ public partial class NugetPanel : Control
|
||||
|
||||
private async Task OnPackageSelected(IdePackageResult packageResult)
|
||||
{
|
||||
_selectedPackage = packageResult;
|
||||
await _nugetPackageDetails.SetPackage(packageResult);
|
||||
}
|
||||
|
||||
@@ -113,6 +111,7 @@ public partial class NugetPanel : Control
|
||||
|
||||
private async Task PopulateSearchResults()
|
||||
{
|
||||
return;
|
||||
var result = await _nugetClientService.GetTop100Results(_solution!.DirectoryPath);
|
||||
var scenes = result.Select(s =>
|
||||
{
|
||||
@@ -135,7 +134,7 @@ public partial class NugetPanel : Control
|
||||
{
|
||||
var project = _solution!.AllProjects.First(s => s.Name == "ProjectA");
|
||||
await project.MsBuildEvaluationProjectTask;
|
||||
var installedPackages = await ProjectEvaluation.GetPackageReferencesForProject(project);
|
||||
var installedPackages = await ProjectEvaluation.GetPackageReferencesForProjects([project]);
|
||||
var idePackageResult = await _nugetClientService.GetPackagesForInstalledPackages(project.ChildNodeBasePath, installedPackages);
|
||||
var scenes = idePackageResult.Select(s =>
|
||||
{
|
||||
@@ -144,7 +143,7 @@ public partial class NugetPanel : Control
|
||||
scene.PackageSelected += OnPackageSelected;
|
||||
return scene;
|
||||
}).ToList();
|
||||
var transitiveScenes = scenes.Where(s => s.PackageResult.InstalledNugetPackageInfo!.IsTransitive).ToList();
|
||||
var transitiveScenes = scenes.Where(s => s.PackageResult.InstalledNugetPackageInfo!.ProjectPackageReferences.Any(x => x.IsTransitive)).ToList();
|
||||
var directScenes = scenes.Except(transitiveScenes).ToList();
|
||||
await this.InvokeAsync(() =>
|
||||
{
|
||||
|
||||
@@ -52,9 +52,10 @@ public partial class PackageEntry : MarginContainer
|
||||
if (PackageResult is null) return;
|
||||
_packageNameLabel.Text = PackageResult.PackageId;
|
||||
var installedPackagedInfo = PackageResult.InstalledNugetPackageInfo;
|
||||
if (installedPackagedInfo?.DependentPackages is not null && installedPackagedInfo.IsTransitive)
|
||||
var isTransitive = installedPackagedInfo?.ProjectPackageReferences.Any(p => p.IsTransitive) ?? false;
|
||||
if (isTransitive && installedPackagedInfo?.ProjectPackageReferences.Any(p => p.DependentPackages?.Count is not 0) is true)
|
||||
{
|
||||
var transitiveOriginsGroupedByVersion = installedPackagedInfo.DependentPackages
|
||||
var transitiveOriginsGroupedByVersion = installedPackagedInfo.ProjectPackageReferences.SelectMany(s => s.DependentPackages ?? [])
|
||||
.GroupBy(t => t.RequestedVersion)
|
||||
.Select(g => new
|
||||
{
|
||||
@@ -67,10 +68,10 @@ public partial class PackageEntry : MarginContainer
|
||||
{string.Join("\n", transitiveOriginsGroupedByVersion.Select(t => $"{t.RequestedVersion.ToString("p", VersionRangeFormatter.Instance)} by {string.Join(", ", t.PackageNames)}"))}
|
||||
""";
|
||||
}
|
||||
_installedVersionLabel.Text = installedPackagedInfo?.IsTransitive is true ? $"({installedPackagedInfo?.Version.ToNormalizedString()})" : installedPackagedInfo?.Version.ToNormalizedString();
|
||||
_installedVersionLabel.Text = GetInstalledVersionsText(installedPackagedInfo);
|
||||
var highestVersionPackageFromSource = PackageResult.PackageFromSources
|
||||
.MaxBy(p => p.PackageSearchMetadata.Identity.Version);
|
||||
if (installedPackagedInfo?.Version != highestVersionPackageFromSource.PackageSearchMetadata.Identity.Version)
|
||||
if (installedPackagedInfo?.ProjectPackageReferences.TrueForAll(s => s.InstalledVersion != highestVersionPackageFromSource.PackageSearchMetadata.Identity.Version) is true)
|
||||
{
|
||||
_latestVersionLabel.Text = highestVersionPackageFromSource.PackageSearchMetadata.Identity.Version.ToNormalizedString();
|
||||
}
|
||||
@@ -94,4 +95,17 @@ public partial class PackageEntry : MarginContainer
|
||||
_sourceNamesContainer.AddChild(label);
|
||||
}
|
||||
}
|
||||
|
||||
private string GetInstalledVersionsText(InstalledNugetPackageInfo? packageInfo)
|
||||
{
|
||||
if (packageInfo is null) return string.Empty;
|
||||
|
||||
var versions = packageInfo.ProjectPackageReferences
|
||||
.Select(p => p.InstalledVersion.ToNormalizedString())
|
||||
.Distinct()
|
||||
.ToList();
|
||||
var isTransitive = packageInfo.ProjectPackageReferences.Any(p => p.IsTransitive);
|
||||
var text = isTransitive ? $"({string.Join(", ", versions)})" : string.Join(", ", versions);
|
||||
return text;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user