mirror of
https://github.com/nsnail/spectre.console.git
synced 2025-04-19 10:12:50 +08:00

* Adds Length and Lines to `Paragraph`, `Markup` and `Text`. * Do not use Environment.NewLine
61 lines
1.6 KiB
C#
61 lines
1.6 KiB
C#
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<IRenderable> Process(RenderContext context, IEnumerable<IRenderable> renderables)
|
|
{
|
|
lock (_lock)
|
|
{
|
|
var result = new List<IRenderable>();
|
|
result.AddRange(renderables);
|
|
|
|
if (_renderable != null)
|
|
{
|
|
result.Add(_renderable);
|
|
}
|
|
|
|
_renderable = null;
|
|
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
}
|