private List <LayoutBar> GetChartForBlocks(SortedDictionary <string, AppxFile> files) { var spaces = new List <LayoutBar>(); LayoutBar previousBlock = null; long position = 0; var processed = new HashSet <string>(); foreach (var block in files.SelectMany(f => f.Value.Blocks)) { var currentStatus = block.Status; if (!processed.Add(block.Hash)) { // todo: investigate // currentStatus = ComparisonStatus.Duplicate; } if (previousBlock == null) { previousBlock = new LayoutBar { Status = currentStatus, Position = position, Size = block.CompressedSize }; } else if (previousBlock.Status == currentStatus) { previousBlock.Size += block.CompressedSize; } else { spaces.Add(previousBlock); previousBlock = new LayoutBar { Status = currentStatus, Position = position, Size = block.CompressedSize }; } position += block.CompressedSize; } if (previousBlock != null) { spaces.Add(previousBlock); } return(spaces); }
private List <LayoutBar> GetChartForFiles(SortedDictionary <string, AppxFile> files) { var spaces = new List <LayoutBar>(); LayoutBar previousBlock = null; long position = 0; foreach (var file in files) { if (previousBlock == null) { previousBlock = new LayoutBar { Status = file.Value.Status, Position = position, Size = file.Value.UncompressedSize }; } else if (previousBlock.Status == file.Value.Status) { previousBlock.Size += file.Value.UncompressedSize; } else { spaces.Add(previousBlock); previousBlock = new LayoutBar { Status = file.Value.Status, Position = position, Size = file.Value.UncompressedSize }; } position += file.Value.UncompressedSize; } if (previousBlock != null) { spaces.Add(previousBlock); } return(spaces); }