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); } }