Nuget panel progress bar

This commit is contained in:
Matt Parker
2025-12-05 18:36:55 +10:00
parent cffe141c6e
commit 80ae193f7a
2 changed files with 40 additions and 0 deletions

View File

@@ -1,7 +1,10 @@
using System.Diagnostics;
using Godot;
using SharpIDE.Application;
using SharpIDE.Application.Features.Evaluation;
using SharpIDE.Application.Features.Nuget;
using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence;
using SharpIDE.Godot.Features.ActivityListener;
namespace SharpIDE.Godot.Features.Nuget;
@@ -17,12 +20,15 @@ public partial class NugetPanel : Control
private Label _implicitlyInstalledPackagesSlnOrProjectNameLabel = null!;
private Label _implicitlyInstalledPackagesResultCountLabel = null!;
private ProgressBar _installedPackagesProgressBar = null!;
private NugetPackageDetails _nugetPackageDetails = null!;
private SharpIdeSolutionModel? _solution;
[Inject] private readonly NugetClientService _nugetClientService = null!;
[Inject] private readonly SharpIdeSolutionAccessor _sharpIdeSolutionAccessor = null!;
[Inject] private readonly ActivityMonitor _activityMonitor = null!;
private readonly PackedScene _packageEntryScene = ResourceLoader.Load<PackedScene>("uid://cqc2xlt81ju8s");
private readonly Texture2D _csprojIcon = ResourceLoader.Load<Texture2D>("uid://cqt30ma6xgder");
@@ -42,10 +48,13 @@ public partial class NugetPanel : Control
_installedPackagesResultCountLabel = GetNode<Label>("%InstalledPackagesResultCountLabel");
_implicitlyInstalledPackagesSlnOrProjectNameLabel = GetNode<Label>("%ImplicitlyInstalledPackagesSlnOrProjectNameLabel");
_implicitlyInstalledPackagesResultCountLabel = GetNode<Label>("%ImplicitlyInstalledPackagesResultCountLabel");
_installedPackagesProgressBar = GetNode<ProgressBar>("%InstalledPackagesProgressBar");
_installedPackagesProgressBar.Visible = false;
_nugetPackageDetails.Visible = false;
_installedPackagesVboxContainer.QueueFreeChildren();
_implicitlyInstalledPackagesItemList.QueueFreeChildren();
_availablePackagesItemList.QueueFreeChildren();
_activityMonitor.ActivityChanged.Subscribe(OnActivityChanged);
_ = Task.GodotRun(_AsyncReady);
}
@@ -66,6 +75,11 @@ public partial class NugetPanel : Control
OnSolutionOrProjectSelected(0);
}
public override void _ExitTree()
{
_activityMonitor.ActivityChanged.Unsubscribe(OnActivityChanged);
}
private void OnSolutionOrProjectSelected(long index)
{
var slnOrProject = (ISolutionOrProject?)_projects[(int)index] ?? _solution!;
@@ -133,6 +147,7 @@ public partial class NugetPanel : Control
private async Task PopulateInstalledPackages(ISolutionOrProject slnOrProject)
{
using var _ = SharpIdeOtel.Source.StartActivity($"{nameof(NugetPanel)}.{nameof(PopulateInstalledPackages)}");
var setDetailsProjectsTask = SetDetailsProjects(slnOrProject);
var msbuildEvalTask = slnOrProject switch
{
@@ -184,4 +199,13 @@ public partial class NugetPanel : Control
_implicitlyInstalledPackagesResultCountLabel.Text = transitiveScenes.Count.ToString();
});
}
private async Task OnActivityChanged(Activity activity)
{
var isOccurring = !activity.IsStopped;
if (activity.DisplayName == $"{nameof(NugetPanel)}.{nameof(PopulateInstalledPackages)}")
{
await this.InvokeAsync(() => _installedPackagesProgressBar.Visible = isOccurring);
}
}
}

View File

@@ -115,6 +115,22 @@ layout_mode = 2
theme_override_colors/font_color = Color(0.67058825, 0.67058825, 0.67058825, 1)
text = "0"
[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer/MarginContainer2/HSplitContainer/VBoxContainer/ScrollContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 4
theme_override_constants/margin_left = 10
[node name="InstalledPackagesProgressBar" type="ProgressBar" parent="VBoxContainer/MarginContainer2/HSplitContainer/VBoxContainer/ScrollContainer/VBoxContainer/HBoxContainer/MarginContainer"]
unique_name_in_owner = true
custom_minimum_size = Vector2(0, 9)
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 4
theme_override_font_sizes/font_size = 2
indeterminate = true
editor_preview_indeterminate = false
[node name="PanelContainer" type="PanelContainer" parent="VBoxContainer/MarginContainer2/HSplitContainer/VBoxContainer/ScrollContainer/VBoxContainer"]
layout_mode = 2