public IEnumerable <DiscoveryResult> DiscoverPath(string path, bool includeFiles)
        {
            IEnumerable <DiscoveryResult> result = Enumerable.Empty <DiscoveryResult>();

            try
            {
                var directories = Directory.GetDirectories(path)
                                  .Where(
                    dirPath => AccessUtility.HasAccess(dirPath)
                    )
                                  .Select(
                    dirPath => new DiscoveryResult(dirPath)
                    );

                result = result.Concat(directories);

                if (includeFiles)
                {
                    var files = Directory.GetFiles(path)
                                .Where(
                        filePath => AccessUtility.HasAccess(filePath)
                        )
                                .Select(
                        filePath => new DiscoveryResult(filePath)
                        );
                    result = result.Concat(files);
                }
            }
            catch (Exception exc)
            {
                _logger.LogError(1, exc, "Error listing directory and files");
            }

            return(result);
        }
        private DiscoveryResult RecursiveScan(DiscoveryResult parent)
        {
            var path        = parent.Path;
            var directories = Directory.GetDirectories(path)
                              .Where(filePath => AccessUtility.HasAccess(filePath))
                              .ToList().Select(filePath => new DiscoveryResult(filePath));

            foreach (var directory in directories)
            {
                RecursiveScan(directory);
                parent.AddChild(directory);
            }
            var files = Directory.GetFiles(path).ToList()
                        .Where(filePath => AccessUtility.HasAccess(filePath))
                        .Where(file =>
                               VideoFile.Extensions.Contains(Path.GetExtension(file), new ExtensionComparer())
                               )

                        .Select(filePath => new DiscoveryResult(filePath));

            foreach (var file in files)
            {
                parent.AddChild(file);
            }

            return(parent);
        }