From 1243592fd392e75a9d49159ee7a57cc1dbb298b2 Mon Sep 17 00:00:00 2001 From: Matt Parker <61717342+MattParkerDev@users.noreply.github.com> Date: Thu, 7 Aug 2025 23:53:18 +1000 Subject: [PATCH] get runnable projects --- .../VsPersistence/SharpIdeModels.cs | 6 +++++- .../VsPersistence/VsPersistenceMapper.cs | 2 +- src/SharpIDE.Photino/Components/RunPopover.razor | 15 +++++++++++++-- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/SharpIDE.Application/Features/SolutionDiscovery/VsPersistence/SharpIdeModels.cs b/src/SharpIDE.Application/Features/SolutionDiscovery/VsPersistence/SharpIdeModels.cs index 2c0eb6e..f4c52c2 100644 --- a/src/SharpIDE.Application/Features/SolutionDiscovery/VsPersistence/SharpIdeModels.cs +++ b/src/SharpIDE.Application/Features/SolutionDiscovery/VsPersistence/SharpIdeModels.cs @@ -27,5 +27,9 @@ public class SharpIdeProjectModel : ISharpIdeNode public required List Folders { get; set; } public required List Files { get; set; } public bool Expanded { get; set; } - public required Task MsBuildEvaluationProject { get; set; } + public required Task MsBuildEvaluationProjectTask { get; set; } + + public Project MsBuildEvaluationProject => MsBuildEvaluationProjectTask.IsCompletedSuccessfully + ? MsBuildEvaluationProjectTask.Result + : throw new InvalidOperationException("Do not attempt to access the MsBuildEvaluationProject before it has been loaded"); } diff --git a/src/SharpIDE.Application/Features/SolutionDiscovery/VsPersistence/VsPersistenceMapper.cs b/src/SharpIDE.Application/Features/SolutionDiscovery/VsPersistence/VsPersistenceMapper.cs index 753bee6..39da95d 100644 --- a/src/SharpIDE.Application/Features/SolutionDiscovery/VsPersistence/VsPersistenceMapper.cs +++ b/src/SharpIDE.Application/Features/SolutionDiscovery/VsPersistence/VsPersistenceMapper.cs @@ -41,7 +41,7 @@ public static class VsPersistenceMapper FilePath = projectModel.FullFilePath, Files = TreeMapperV2.GetFiles(projectModel.FullFilePath), Folders = TreeMapperV2.GetSubFolders(projectModel.FullFilePath), - MsBuildEvaluationProject = Test.GetProject(projectModel.FullFilePath) + MsBuildEvaluationProjectTask = Test.GetProject(projectModel.FullFilePath) }; allProjects.Add(project); return project; diff --git a/src/SharpIDE.Photino/Components/RunPopover.razor b/src/SharpIDE.Photino/Components/RunPopover.razor index 0076f24..fd09bd6 100644 --- a/src/SharpIDE.Photino/Components/RunPopover.razor +++ b/src/SharpIDE.Photino/Components/RunPopover.razor @@ -7,9 +7,9 @@ - @if (SolutionModel?.AllProjects?.Count is >= 0) + @if (_ready) { - @foreach (var project in SolutionModel.AllProjects) + @foreach (var project in RunnableProjects) { @@ -35,5 +35,16 @@ [Parameter, EditorRequired] public SharpIdeSolutionModel SolutionModel { get; set; } = null!; + private IEnumerable RunnableProjects => SolutionModel.AllProjects.Where(p => p.MsBuildEvaluationProject.GetPropertyValue("OutputType") is "Exe" or "WinExe"); + private bool _open = false; + private bool _ready = false; + + protected override async Task OnInitializedAsync() + { + var tasks = SolutionModel.AllProjects.Select(p => p.MsBuildEvaluationProjectTask).ToList(); + await Task.WhenAll(tasks); + _ready = true; + } + }