Files
Pf2eDataScrapper/Pf2e/Scrapper/Helpers/ProcessProgress.cs
T

88 lines
2.7 KiB
C#

using Pf2e.Scrapper.Processors.Definitions;
namespace Pf2e.Scrapper.Helpers;
/// <summary>
/// Класс для отслеживания прогресса обработки данных.
/// </summary>
public class ProcessProgress : AbstractLogger
{
/// <summary>
/// Прогресс обработки обработчиков <see cref="IProcessor"/>.
/// </summary>
public ProgressItem Processors { get; } = new();
/// <summary>
/// Прогресс работы конкретного обработчика <see cref="IProcessor"/>.
/// </summary>
public ProgressItem Local { get; } = new();
/// <summary>
/// Конструктор класса <see cref="ProcessProgress"/>.
/// </summary>
public ProcessProgress()
{
Processors.Update += Update;
Local.Update += Update;
}
/// <summary>
/// Событие обновления
/// </summary>
private void Update()
{
ProgressUpdate?.Invoke(this);
}
/// <summary>
/// Событие сообщения.
/// </summary>
/// <param name="level">Уровень сообщения.</param>
/// <param name="message"></param>
public override void Message(LogLevel level, string message)
{
ProgressMessage?.Invoke(this, level, message);
}
/// <summary>
/// Событие завершения процесса.
/// </summary>
public void Complete()
{
ProgressComplete?.Invoke(this);
}
/// <summary>
/// Делегат для события обновления прогресса.
/// </summary>
/// <param name="sender">Объект, вызвавший событие.</param>
public delegate void ProgressUpdateDelegate(ProcessProgress sender);
/// <summary>
/// Событие обновления прогресса.
/// </summary>
public event ProgressUpdateDelegate? ProgressUpdate;
/// <summary>
/// Событие завершения процесса.
/// </summary>
public event ProgressUpdateDelegate? ProgressComplete;
/// <summary>
/// Делегат для события сообщения прогресса.
/// </summary>
/// <param name="sender">Объект, вызвавший событие.</param>
/// <param name="level">Уровень сообщения.</param>
/// <param name="message">Сообщение.</param>
public delegate void ProgressMessageDelegate(
ProcessProgress sender,
LogLevel level,
string message
);
/// <summary>
/// Событие сообщения.
/// </summary>
public event ProgressMessageDelegate? ProgressMessage;
}