using System.Text;
namespace CLI.Monitor;
public class CompactCliTaskMonitor : TaskMonitor
{
///
public CompactCliTaskMonitor(IEnumerable<(string? Name, Task Task)> tasks) : base(tasks) { }
///
public CompactCliTaskMonitor(IEnumerable tasks) : base(tasks) { }
#region Overrides of TaskMonitor
///
protected override void OnUpdate(ICollection<(string? Name, Task Task)> tasks)
{
int completed = 0;
int total = tasks.Count;
var sb = new StringBuilder(total * 30);
foreach (var (_, task) in tasks)
{
var status = task.Status;
if (status > TaskStatus.WaitingForChildrenToComplete)
{
completed++;
}
sb.Append(task.Exception is not null ? 'X' : StatusMap[status].First());
}
sb.AppendLine($" ({completed}/{total})");
Console.Clear();
Console.Write(sb.ToString());
}
#endregion
}