Exemplo n.º 1
0
        public void ProcessSizes()
        {
            foreach (var path in _directoryPaths.GetConsumingEnumerable())
            {
                DirectoryInfo di = null;
                try
                {
                    di = new DirectoryInfo(path);
                }
                catch { }

                if (di != null)
                {
                    var size     = GetLocalSize(di);
                    var sizeData = new DirectorySizeData(di.FullName, size);

                    AddOrUpdateLocalSize(sizeData);

                    foreach (var ancestor in sizeData.Path.GetAncestorPaths())
                    {
                        AddOrUpdateAncestorSize(ancestor, size);
                    }
                }
            }
        }
Exemplo n.º 2
0
        private IEnumerable <DirectorySizeData> FindLargestSubDirectories(
            DirectorySizeData parentDirectory,
            double percentageThreshold
            )
        {
            double thresholdMultiplier              = percentageThreshold;
            double thresholdMultiplierIncrement     = percentageThreshold + (percentageThreshold / 2d);
            double includeParentThresholdMultiplier = 1 + (percentageThreshold * 4);

            var thresholdSize = parentDirectory.TotalSize * (thresholdMultiplier + (thresholdMultiplierIncrement * parentDirectory.Path.Depth));

            var qualifyingDirectories = new List <DirectorySizeData>();

            var directoriesWithinThreshold = _directoryData
                                             .Where(d => d.Path.ParentPath == parentDirectory.Path.FullPath &&
                                                    d.TotalSize >= thresholdSize).ToList();


            var subSize = directoriesWithinThreshold.Sum(d => d.TotalSize);

            if (Root != parentDirectory &&
                (parentDirectory.TotalSize - subSize) >= (thresholdSize * includeParentThresholdMultiplier))
            {
                qualifyingDirectories.Add(parentDirectory);
            }

            foreach (var directory in directoriesWithinThreshold)
            {
                qualifyingDirectories.AddRange(FindLargestSubDirectories(directory, percentageThreshold));
            }

            return(qualifyingDirectories);
        }
        private void RenderSubDirectory(DirectorySizeData directory)
        {
            var size      = _sizeConversion.Convert(directory.LocalSize);
            var totalSize = _sizeConversion.Convert(directory.TotalSize);
            var output    = $"  {directory.Name,NAME_COLUMN_WIDTH+2}{size,SIZE_COLUMN_WIDTH}{totalSize,SIZE_COLUMN_WIDTH}";

            RenderColorLine(totalSize, output);
        }
Exemplo n.º 4
0
        private IEnumerable <DirectorySizeData> GetSubDirectories(DirectorySizeData directory)
        {
            var directories = _directoryData.Where(d =>
                                                   d.Path.ParentPath == directory.Path.FullPath)
                              .OrderBy(d => d.Name);

            return(directories);
        }
 public DirectoryWithSubDirectoriesViewModel(
     DirectorySizeData directory,
     IEnumerable <DirectorySizeData> subDirectories,
     ISizeConversion sizeConversion)
 {
     _directory      = directory;
     _subDirectories = subDirectories;
     _sizeConversion = sizeConversion;
 }
Exemplo n.º 6
0
        private void ChangeCurrentDirectory(DirectorySizeData directory)
        {
            if (directory == null)
            {
                return;
            }

            _currentDirectory      = directory;
            _currentSubDirectories = GetSubDirectories(directory);
        }
Exemplo n.º 7
0
 private void AddOrUpdateLocalSize(DirectorySizeData directorySize)
 {
     if (!_directorySizes.TryAdd(directorySize.Path, directorySize))
     {
         DirectorySizeData loadedDirectory;
         if (_directorySizes.TryGetValue(directorySize.Path, out loadedDirectory))
         {
             loadedDirectory.SetSelfSize(directorySize.LocalSize);
         }
     }
 }
Exemplo n.º 8
0
        private void AddOrUpdateAncestorSize(string path, long size)
        {
            var directory = new DirectorySizeData(path, 0);

            directory.SetSizeFromDescendant(size);
            if (!_directorySizes.TryAdd(path, directory))
            {
                if (_directorySizes.TryGetValue(path, out directory))
                {
                    directory.SetSizeFromDescendant(size);
                }
            }
        }