Exemple #1
0
 public async Task Find(IReadOnlyCollection <IComparableFile[]> duplicateCandidates, IFileComparerConfig comparerConfig, CancellationToken cancellationToken)
 {
     await Task.Run(() => GetDuplicatesFromCandidates(duplicateCandidates, comparerConfig, cancellationToken), cancellationToken);
 }
Exemple #2
0
        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));
                }
            }
        }
Exemple #3
0
 public Factory(IFileComparerConfig config)
 {
     Config = config;
 }