using System;
using System.Diagnostics;
using System.Linq;
namespace Jellyfin.Database.Implementations;
///
/// Wrapper for progress reporting on Partition helpers.
///
/// The entity to load.
public class ProgressablePartitionReporting
{
private readonly IOrderedQueryable _source;
private readonly Stopwatch _partitionTime = new();
private readonly Stopwatch _itemTime = new();
internal ProgressablePartitionReporting(IOrderedQueryable source)
{
_source = source;
}
internal Action? OnBeginItem { get; set; }
internal Action? OnBeginPartition { get; set; }
internal Action? OnEndItem { get; set; }
internal Action? OnEndPartition { get; set; }
internal IOrderedQueryable Source => _source;
internal void BeginItem(TEntity entity, int iteration, int itemIndex)
{
_itemTime.Restart();
OnBeginItem?.Invoke(entity, iteration, itemIndex);
}
internal void BeginPartition(int iteration)
{
_partitionTime.Restart();
OnBeginPartition?.Invoke(iteration);
}
internal void EndItem(TEntity entity, int iteration, int itemIndex)
{
OnEndItem?.Invoke(entity, iteration, itemIndex, _itemTime.Elapsed);
}
internal void EndPartition(int iteration)
{
OnEndPartition?.Invoke(iteration, _partitionTime.Elapsed);
}
}