keep selected package across sln/project changes
This commit is contained in:
@@ -44,7 +44,7 @@ public partial class NugetPackageDetails : VBoxContainer
|
|||||||
});
|
});
|
||||||
var (iconBytes, iconFormat) = await iconTask;
|
var (iconBytes, iconFormat) = await iconTask;
|
||||||
var imageTexture = ImageTextureHelper.GetImageTextureFromBytes(iconBytes, iconFormat) ?? _defaultIconTextureRect;
|
var imageTexture = ImageTextureHelper.GetImageTextureFromBytes(iconBytes, iconFormat) ?? _defaultIconTextureRect;
|
||||||
await SetProjects(package.InstalledNugetPackageInfo!.ProjectPackageReferences);
|
await SetProjectPackageReferences(package.InstalledNugetPackageInfo?.ProjectPackageReferences ?? []);
|
||||||
await this.InvokeAsync(() =>
|
await this.InvokeAsync(() =>
|
||||||
{
|
{
|
||||||
_packageIconTextureRect.Texture = imageTexture;
|
_packageIconTextureRect.Texture = imageTexture;
|
||||||
@@ -59,15 +59,13 @@ public partial class NugetPackageDetails : VBoxContainer
|
|||||||
OnNugetSourceSelected(0);
|
OnNugetSourceSelected(0);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task SetProjects(List<ProjectPackageReference> projectPackageReferences)
|
public async Task SetProjects(HashSet<SharpIdeProjectModel> projects)
|
||||||
{
|
{
|
||||||
var scenes = projectPackageReferences.Select(s =>
|
var scenes = projects.Select(s =>
|
||||||
{
|
{
|
||||||
var scene = _packageDetailsProjectEntryScene.Instantiate<PackageDetailsProjectEntry>();
|
var scene = _packageDetailsProjectEntryScene.Instantiate<PackageDetailsProjectEntry>();
|
||||||
scene.ProjectModel = s.Project;
|
scene.ProjectModel = s;
|
||||||
scene.InstalledVersion = s.InstalledVersion;
|
|
||||||
scene.IsTransitive = s.IsTransitive;
|
|
||||||
return scene;
|
return scene;
|
||||||
}).ToList();
|
}).ToList();
|
||||||
await this.InvokeAsync(() =>
|
await this.InvokeAsync(() =>
|
||||||
@@ -79,6 +77,21 @@ public partial class NugetPackageDetails : VBoxContainer
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task SetProjectPackageReferences(List<ProjectPackageReference> projectPackageReferences)
|
||||||
|
{
|
||||||
|
await this.InvokeAsync(() =>
|
||||||
|
{
|
||||||
|
var scenes = _projectsVBoxContainer.GetChildren().OfType<PackageDetailsProjectEntry>().ToList();
|
||||||
|
foreach (var projectPackageReference in projectPackageReferences)
|
||||||
|
{
|
||||||
|
var scene = scenes.Single(s => s.ProjectModel == projectPackageReference.Project);
|
||||||
|
scene.InstalledVersion = projectPackageReference.InstalledVersion;
|
||||||
|
scene.IsTransitive = projectPackageReference.IsTransitive;
|
||||||
|
scene.SetValues();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private async void OnNugetSourceSelected(long sourceIndex)
|
private async void OnNugetSourceSelected(long sourceIndex)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ public partial class NugetPanel : Control
|
|||||||
|
|
||||||
// we use this to access the project for the dropdown
|
// we use this to access the project for the dropdown
|
||||||
private List<SharpIdeProjectModel?> _projects = null!;
|
private List<SharpIdeProjectModel?> _projects = null!;
|
||||||
|
private IdePackageResult? _selectedPackageResult = null!;
|
||||||
|
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
@@ -72,7 +73,6 @@ public partial class NugetPanel : Control
|
|||||||
{
|
{
|
||||||
if (_solution is null) throw new InvalidOperationException("Solution is null but should not be");
|
if (_solution is null) throw new InvalidOperationException("Solution is null but should not be");
|
||||||
_ = Task.GodotRun(() => SetSolutionOrProjectNameLabels(slnOrProject));
|
_ = Task.GodotRun(() => SetSolutionOrProjectNameLabels(slnOrProject));
|
||||||
//_ = Task.GodotRun(() => SetDetailsProjects(slnOrProject));
|
|
||||||
_ = Task.GodotRun(() => PopulateInstalledPackages(slnOrProject));
|
_ = Task.GodotRun(() => PopulateInstalledPackages(slnOrProject));
|
||||||
_ = Task.GodotRun(PopulateSearchResults);
|
_ = Task.GodotRun(PopulateSearchResults);
|
||||||
});
|
});
|
||||||
@@ -80,6 +80,7 @@ public partial class NugetPanel : Control
|
|||||||
|
|
||||||
private async Task OnPackageSelected(IdePackageResult packageResult)
|
private async Task OnPackageSelected(IdePackageResult packageResult)
|
||||||
{
|
{
|
||||||
|
_selectedPackageResult = packageResult;
|
||||||
await _nugetPackageDetails.SetPackage(packageResult);
|
await _nugetPackageDetails.SetPackage(packageResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,11 +88,11 @@ public partial class NugetPanel : Control
|
|||||||
{
|
{
|
||||||
var projects = slnOrProject switch
|
var projects = slnOrProject switch
|
||||||
{
|
{
|
||||||
SharpIdeSolutionModel solutionModel => _projects.Skip(1).ToHashSet(),
|
SharpIdeSolutionModel => _projects.Skip(1).ToHashSet(),
|
||||||
SharpIdeProjectModel projectModel => [projectModel],
|
SharpIdeProjectModel projectModel => [projectModel],
|
||||||
_ => throw new InvalidOperationException("Unknown solution or project type")
|
_ => throw new InvalidOperationException("Unknown solution or project type")
|
||||||
};
|
};
|
||||||
//await _nugetPackageDetails.SetProjects(projects);
|
await _nugetPackageDetails.SetProjects(projects!);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task SetSolutionOrProjectNameLabels(ISolutionOrProject slnOrProject)
|
private async Task SetSolutionOrProjectNameLabels(ISolutionOrProject slnOrProject)
|
||||||
@@ -132,6 +133,7 @@ public partial class NugetPanel : Control
|
|||||||
|
|
||||||
private async Task PopulateInstalledPackages(ISolutionOrProject slnOrProject)
|
private async Task PopulateInstalledPackages(ISolutionOrProject slnOrProject)
|
||||||
{
|
{
|
||||||
|
var setDetailsProjectsTask = SetDetailsProjects(slnOrProject);
|
||||||
var msbuildEvalTask = slnOrProject switch
|
var msbuildEvalTask = slnOrProject switch
|
||||||
{
|
{
|
||||||
SharpIdeSolutionModel solutionModel => (Task)Task.WhenAll(solutionModel.AllProjects.Select(s => s.MsBuildEvaluationProjectTask)),
|
SharpIdeSolutionModel solutionModel => (Task)Task.WhenAll(solutionModel.AllProjects.Select(s => s.MsBuildEvaluationProjectTask)),
|
||||||
@@ -156,6 +158,16 @@ public partial class NugetPanel : Control
|
|||||||
}).ToList();
|
}).ToList();
|
||||||
var transitiveScenes = scenes.Where(s => s.PackageResult.InstalledNugetPackageInfo!.IsPrimarilyTransitive).ToList();
|
var transitiveScenes = scenes.Where(s => s.PackageResult.InstalledNugetPackageInfo!.IsPrimarilyTransitive).ToList();
|
||||||
var directScenes = scenes.Except(transitiveScenes).ToList();
|
var directScenes = scenes.Except(transitiveScenes).ToList();
|
||||||
|
await setDetailsProjectsTask;
|
||||||
|
if (_selectedPackageResult is not null)
|
||||||
|
{
|
||||||
|
var updatedPackageResult = idePackageResult.SingleOrDefault(p => p.PackageId.Equals(_selectedPackageResult.PackageId, StringComparison.OrdinalIgnoreCase));
|
||||||
|
if (updatedPackageResult is not null)
|
||||||
|
{
|
||||||
|
_selectedPackageResult = updatedPackageResult;
|
||||||
|
await OnPackageSelected(_selectedPackageResult);
|
||||||
|
}
|
||||||
|
}
|
||||||
await this.InvokeAsync(() =>
|
await this.InvokeAsync(() =>
|
||||||
{
|
{
|
||||||
_installedPackagesVboxContainer.QueueFreeChildren();
|
_installedPackagesVboxContainer.QueueFreeChildren();
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ public partial class PackageDetailsProjectEntry : MarginContainer
|
|||||||
_installedVersionLabel = GetNode<Label>("%InstalledVersionLabel");
|
_installedVersionLabel = GetNode<Label>("%InstalledVersionLabel");
|
||||||
SetValues();
|
SetValues();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetValues()
|
public void SetValues()
|
||||||
{
|
{
|
||||||
if (ProjectModel == null) return;
|
if (ProjectModel == null) return;
|
||||||
_projectNameLabel.Text = ProjectModel.Name;
|
_projectNameLabel.Text = ProjectModel.Name;
|
||||||
|
|||||||
Reference in New Issue
Block a user