<PackageReference Include="Relativity.Server.Transfer.SDK" Version="24000.0.1" />

EnumerationWithStatistics

using Relativity.DataTransfer.Nodes; using Relativity.Transfer.Enumeration.Interfaces; using Relativity.Transfer.Enumeration.Operators; using System.Collections.Generic; using System.Threading; namespace Relativity.Transfer.Enumeration { internal class EnumerationWithStatistics : IEnumeratorProvider { private readonly IEnumeratorProvider _enumeratorProvider; private readonly IEnumerationHandler<EnumerationStatistic> _statisticsHandler; private long _totalFiles; private long _totalBytes; private long _totalEmptyDirectories; public EnumerationWithStatistics(IEnumeratorProvider enumeratorProvider, IEnumerationHandler<EnumerationStatistic> statisticsHandler) { _enumeratorProvider = enumeratorProvider; _statisticsHandler = statisticsHandler; } public IEnumerator<INode> GetEnumerator(IEnumerable<INode> nodes, CancellationToken token) { return _enumeratorProvider.GetEnumerator(nodes, token).OnNext(delegate(INode node) { IFile file = node as IFile; if (file == null) { if (node is IDirectory) _totalEmptyDirectories++; } else { _totalFiles++; _totalBytes += file.Size; } _statisticsHandler.Report(new EnumerationStatistic(_totalFiles, _totalBytes, _totalEmptyDirectories)); }, token); } } }