Exemplo n.º 1
0
        private static IEnumerable <FileRecord> CopyOrNot(IList <FileRecord> records)
        {
            var groupedByDestination = records.OrderByDescending(x => x.SourcePath).GroupBy(x => x.DestinationPath);

            foreach (var group in groupedByDestination)
            {
                var groupedByChecksum = group.GroupBy(x => x.Checksum).ToList();
                if (groupedByChecksum.Count == 1)
                {
                    group.First().CopyOrNot = "copy";
                    foreach (var item in group.Skip(1))
                    {
                        item.CopyOrNot = "not";
                    }
                }
                else
                {
                    foreach (var item1 in groupedByChecksum)
                    {
                        var firstInGroup = item1.First();
                        var prefix       = firstInGroup.RelativePath.ToLower().Replace("/", "-").Replace("\\", "-");
                        firstInGroup.DestinationPath = FileRecordTools.CalculateDestinationPath(firstInGroup.Year, firstInGroup.Month,
                                                                                                $"{prefix}-{firstInGroup.Filename}");
                        firstInGroup.CopyOrNot = "copy";
                        foreach (var item2 in item1.Skip(1))
                        {
                            item2.CopyOrNot = "not";
                        }
                    }
                }
            }
            return(records);
        }