namespace Pf2e.Scrapper.Helpers; /// /// Класс прогресса. /// public class ProgressItem { /// /// Количество обрабатываемых процессов. /// public int Count { get => _count; set { _count = value; Update?.Invoke(); } } private int _count; /// /// Индекс текущего обрабатываемого процесса. /// public int Current { get => _current; set { _current = value; Update?.Invoke(); } } private int _current; /// /// Название текущего обрабатываемого процесса. /// public string Text { get => _text; set { _text = value; Update?.Invoke(); } } private string _text = ""; /// /// Значение прогресса. /// public double Percent => Count > 0 ? 1.0 * Current / Count : 1.0; /// /// Сброс прогресса до нуля и установка нового максимального значения. /// /// Максимальное значение прогресса. public void Reset(int max = 0) { _count = max; _current = 0; _text = ""; Update?.Invoke(); } /// /// Отмечает начало работы над процессом, описываемым строкой . /// /// Строка, описывающая процесс. public void Start(string text) { _text = text; Update?.Invoke(); } /// /// Отмечает конец работы над процессом и увеличивает значение прогресса. /// public void End() { _current++; Update?.Invoke(); } /// /// Отмечает прогресс завершённым. /// public void Complete() { _current = _count; _text = "Готово!"; Update?.Invoke(); } /// /// Получение строкового представления прогресса. /// /// Строковое представление прогресса. public override string ToString() { return $"{Text} [{Current} / {Count}; {Percent:P}]"; } /// /// Делегат события обновления. /// public delegate void UpdateDelegate(); /// /// Событие обновление. /// public event UpdateDelegate? Update; }