mirror of
https://github.com/nsnail/spectre.console.git
synced 2025-06-18 13:03:21 +08:00
Add support for fake input in asciicast recordings
* Fixes a bug with `SelectionPrompt` and page size. * Allow `IAnsiConsoleInput` to return `null`.
This commit is contained in:

committed by
Phil Scott

parent
46abadaccb
commit
450d87f5d3
@ -0,0 +1,87 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using Spectre.Console;
|
||||
|
||||
namespace Generator.Commands.Samples
|
||||
{
|
||||
internal class ProgressSample : BaseSample
|
||||
{
|
||||
public override (int Cols, int Rows) ConsoleSize => (base.ConsoleSize.Cols, 10);
|
||||
|
||||
public override IEnumerable<(string Name, Action<Capabilities> CapabilitiesAction)> GetCapabilities()
|
||||
{
|
||||
yield return ("non-interactive", capabilities =>
|
||||
{
|
||||
capabilities.Ansi = false;
|
||||
capabilities.Interactive = false;
|
||||
capabilities.Legacy = false;
|
||||
capabilities.Unicode = true;
|
||||
capabilities.ColorSystem = ColorSystem.TrueColor;
|
||||
});
|
||||
|
||||
foreach (var capability in base.GetCapabilities())
|
||||
{
|
||||
yield return capability;
|
||||
}
|
||||
}
|
||||
|
||||
public override void Run(IAnsiConsole console)
|
||||
{
|
||||
// Show progress
|
||||
console.Progress()
|
||||
.AutoClear(false)
|
||||
.Columns(new TaskDescriptionColumn(), new ProgressBarColumn(), new PercentageColumn(), new RemainingTimeColumn(), new SpinnerColumn())
|
||||
.Start(ctx =>
|
||||
{
|
||||
var random = new Random(122978);
|
||||
|
||||
// Create some tasks
|
||||
var tasks = CreateTasks(ctx, random);
|
||||
var warpTask = ctx.AddTask("Going to warp", autoStart: false).IsIndeterminate();
|
||||
|
||||
// Wait for all tasks (except the indeterminate one) to complete
|
||||
while (!ctx.IsFinished)
|
||||
{
|
||||
// Increment progress
|
||||
foreach (var (task, increment) in tasks)
|
||||
{
|
||||
task.Increment(random.NextDouble() * increment);
|
||||
}
|
||||
|
||||
// Simulate some delay
|
||||
Thread.Sleep(100);
|
||||
}
|
||||
|
||||
// Now start the "warp" task
|
||||
warpTask.StartTask();
|
||||
warpTask.IsIndeterminate(false);
|
||||
while (!ctx.IsFinished)
|
||||
{
|
||||
warpTask.Increment(12 * random.NextDouble());
|
||||
|
||||
// Simulate some delay
|
||||
Thread.Sleep(100);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static List<(ProgressTask Task, int Delay)> CreateTasks(ProgressContext progress, Random random)
|
||||
{
|
||||
var tasks = new List<(ProgressTask, int)>();
|
||||
|
||||
var names = new[]
|
||||
{
|
||||
"Retriculating algorithms", "Colliding splines", "Solving quarks", "Folding data structures",
|
||||
"Rerouting capacitators "
|
||||
};
|
||||
|
||||
for (var i = 0; i < 5; i++)
|
||||
{
|
||||
tasks.Add((progress.AddTask(names[i]), random.Next(2, 10)));
|
||||
}
|
||||
|
||||
return tasks;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user