display logs

This commit is contained in:
Matt Parker
2025-08-01 01:59:34 +10:00
parent c8ae393c07
commit e756600b97
4 changed files with 37 additions and 4 deletions

View File

@@ -16,6 +16,7 @@ public enum BuildType
} }
public class BuildService public class BuildService
{ {
public event Func<Task> BuildStarted = () => Task.CompletedTask;
public Channel<string> BuildOutputChannel { get; } = Channel.CreateUnbounded<string>(); public Channel<string> BuildOutputChannel { get; } = Channel.CreateUnbounded<string>();
public async Task MsBuildSolutionAsync(string solutionFilePath, BuildType buildType = BuildType.Build) public async Task MsBuildSolutionAsync(string solutionFilePath, BuildType buildType = BuildType.Build)
{ {
@@ -24,7 +25,7 @@ public class BuildService
Loggers = Loggers =
[ [
//new BinaryLogger { Parameters = "msbuild.binlog" }, //new BinaryLogger { Parameters = "msbuild.binlog" },
new ConsoleLogger(LoggerVerbosity.Normal, message => BuildOutputChannel.Writer.TryWrite(message), s => { }, () => { }), new ConsoleLogger(LoggerVerbosity.Minimal, message => BuildOutputChannel.Writer.TryWrite(message), s => { }, () => { }),
//new InMemoryLogger(LoggerVerbosity.Normal) //new InMemoryLogger(LoggerVerbosity.Normal)
], ],
}; };
@@ -46,6 +47,7 @@ public class BuildService
await Task.Run(async () => await Task.Run(async () =>
{ {
await BuildStarted.Invoke();
var buildCompleteTcs = new TaskCompletionSource<BuildResult>(); var buildCompleteTcs = new TaskCompletionSource<BuildResult>();
BuildManager.DefaultBuildManager.BeginBuild(buildParameters); BuildManager.DefaultBuildManager.BeginBuild(buildParameters);
var buildResult2 = BuildManager.DefaultBuildManager.PendBuildRequest(buildRequest); var buildResult2 = BuildManager.DefaultBuildManager.PendBuildRequest(buildRequest);

View File

@@ -1,8 +1,12 @@
@using SharpIDE.Application.Features.Build @using SharpIDE.Application.Features.Build
@inject BuildService BuildService
<div style="height: 15rem; overflow-y: auto; padding: 1rem; background-color: #303030; border: 1px solid #ccc;"> @inject BuildService BuildService
@foreach(var line in _outputLines) @inject IJSRuntime JsRuntime
@implements IDisposable
<div @ref="_logContainer" style="height: 15rem; overflow-y: auto; padding: 1rem; background-color: #303030; border: 1px solid #ccc;">
@foreach (var line in _outputLines)
{ {
<MudText Typo="Typo.body2">@line</MudText> <MudText Typo="Typo.body2">@line</MudText>
} }
@@ -10,12 +14,32 @@
@code { @code {
private List<string> _outputLines = []; private List<string> _outputLines = [];
private ElementReference _logContainer;
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
BuildService.BuildStarted += ClearPreviousOutput;
await foreach (var logLine in BuildService.BuildOutputChannel.Reader.ReadAllAsync()) await foreach (var logLine in BuildService.BuildOutputChannel.Reader.ReadAllAsync())
{ {
_outputLines.Add(logLine); _outputLines.Add(logLine);
await InvokeAsync(StateHasChanged); await InvokeAsync(StateHasChanged);
await ScrollToBottomAsync();
} }
} }
private async Task ClearPreviousOutput()
{
_outputLines.Clear();
await InvokeAsync(StateHasChanged);
}
private async Task ScrollToBottomAsync()
{
await JsRuntime.InvokeVoidAsync("scrollToBottom", _logContainer);
}
public void Dispose()
{
BuildService.BuildStarted -= ClearPreviousOutput;
}
} }

View File

@@ -18,6 +18,7 @@
<a class="dismiss">🗙</a> <a class="dismiss">🗙</a>
</div> </div>
<script src="scripts2.js"></script>
<script src="_content/BlazorMonaco/jsInterop.js"></script> <script src="_content/BlazorMonaco/jsInterop.js"></script>
<script src="_content/BlazorMonaco/lib/monaco-editor/min/vs/loader.js"></script> <script src="_content/BlazorMonaco/lib/monaco-editor/min/vs/loader.js"></script>
<script src="_content/BlazorMonaco/lib/monaco-editor/min/vs/editor/editor.main.js"></script> <script src="_content/BlazorMonaco/lib/monaco-editor/min/vs/editor/editor.main.js"></script>

View File

@@ -0,0 +1,6 @@
window.scrollToBottom = function(element) {
if (element) {
element.scrollTop = element.scrollHeight;
}
}