public async Task Find(IReadOnlyCollection <IComparableFile[]> duplicateCandidates, IFileComparerConfig comparerConfig, CancellationToken cancellationToken) { await Task.Run(() => GetDuplicatesFromCandidates(duplicateCandidates, comparerConfig, cancellationToken), cancellationToken); }
private void GetDuplicatesFromCandidates(IReadOnlyCollection <IComparableFile[]> duplicateCandidates, IFileComparerConfig comparerConfig, CancellationToken cancellationToken) { var context = new SearchContext { ComparerConfig = comparerConfig, TotalFilesCount = duplicateCandidates.AsParallel().Sum(group => group.Length) }; foreach (var duplicateCandidateGroup in duplicateCandidates) { var groupDuplicates = GetDuplicatesFromGroup(duplicateCandidateGroup, context, cancellationToken); if (groupDuplicates.Count == 0) { continue; } var(duplicatesCount, duplicatesSize) = GetGroupDuplicatedCountAndSize(groupDuplicates); context.DuplicateGroupsCount += groupDuplicates.Count; context.DuplicateFilesCount += duplicatesCount; context.DuplicatedTotalSize += duplicatesSize; DuplicatesSearchProgress?.Invoke(this, new DuplicatesSearchProgressEventArgs(null, context)); foreach (var group in groupDuplicates) { DuplicatesGroupFound?.Invoke(this, new DuplicatesGroupFoundEventArgs(group)); } } }
public Factory(IFileComparerConfig config) { Config = config; }