fix(ui): Log Visualizer shows every footer-log message

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
mika kuns
2026-10-01 17:35:03 +02:00
co-authored by Claude Sonnet 5.5
parent d9355383a4
commit c956ab102e
5 changed files with 110 additions and 23 deletions
@@ -181,8 +181,23 @@ public sealed partial class IslandsShellViewModel : ViewModelBase, IDisposable
OnPropertyChanged(nameof(TasksColumnSpan));
}
private const int FooterHistoryCap = 500;
/// <summary>Every line the footer strip has shown this session, oldest-first, capped; UI thread only.</summary>
private readonly List<WorkerLogEntry> _footerHistory = new();
internal IReadOnlyList<WorkerLogEntry> FooterHistorySnapshot() => _footerHistory.ToArray();
private void RecordFooter(WorkerLogEntry entry)
{
_footerHistory.Add(entry);
if (_footerHistory.Count > FooterHistoryCap)
_footerHistory.RemoveAt(0);
}
public void OnWorkerLogReceived(WorkerLogEntry entry)
{
RecordFooter(entry);
var hhmm = entry.TimestampUtc.ToLocalTime().ToString("HH:mm");
WorkerLogText = $"{hhmm} · {entry.Message}";
WorkerLogLevel = entry.Level;
@@ -214,6 +229,7 @@ public sealed partial class IslandsShellViewModel : ViewModelBase, IDisposable
if (level == WorkerLogLevel.Error)
Serilog.Log.Warning("Footer error: {message}", message);
RecordFooter(new WorkerLogEntry(message, level, DateTime.UtcNow));
WorkerLogText = $"{DateTime.Now:HH:mm} · {message}";
WorkerLogLevel = level;
IsWorkerLogVisible = true;
@@ -541,7 +557,7 @@ public sealed partial class IslandsShellViewModel : ViewModelBase, IDisposable
private async Task OpenLogVisualizer()
{
if (Dialogs is null || Worker is null) return;
var vm = new LogVisualizerViewModel(Worker);
var vm = new LogVisualizerViewModel(Worker, FooterHistorySnapshot);
await vm.RefreshAsync();
await Dialogs.ShowLogVisualizerAsync(vm);
}