using System; using System.Collections.Generic; using System.Linq; using Spectre.Console.Rendering; namespace Spectre.Console { internal sealed class FallbackStatusRenderer : ProgressRenderer { private readonly object _lock; private IRenderable? _renderable; private string? _lastStatus; public override TimeSpan RefreshRate => TimeSpan.FromMilliseconds(100); public FallbackStatusRenderer() { _lock = new object(); } public override void Update(ProgressContext context) { lock (_lock) { var task = context.GetTasks().SingleOrDefault(); if (task != null) { // Not same description? if (_lastStatus != task.Description) { _lastStatus = task.Description; _renderable = new Markup(task.Description + "\n"); return; } } _renderable = null; return; } } public override IEnumerable Process(RenderContext context, IEnumerable renderables) { lock (_lock) { var result = new List(); result.AddRange(renderables); if (_renderable != null) { result.Add(_renderable); } _renderable = null; return result; } } } }