Exemple #1
0
        public IEnumerable <AbstractMediaMetaData> Execute(IMetaDataExtractor extractor, string folder, bool includeSubFolders)
        {
            var files = Directory.EnumerateFiles(
                folder,
                extractor.FileSearchPattern,
                includeSubFolders ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly);

            if (UseParallelProcessing)
            {
                var       result    = new List <AbstractMediaMetaData>();
                var       locker    = new object();
                const int batchSize = 10;

                var batches = files.Batch(batchSize);
#pragma warning disable PH_S022 // Parallel.For with Monitor Synchronization
                Parallel.ForEach(
                    batches,
                    batch =>
                {
                    var localResult = ProcessBatch(extractor, batch);

                    lock (locker)
                    {
                        result.AddRange(localResult);
                    }
                });
#pragma warning restore PH_S022 // Parallel.For with Monitor Synchronization

                return(result);
            }

            return(ProcessBatch(extractor, files));
        }
Exemple #2
0
        public FormatFileNameGenerator(IMetaDataExtractor imageMetaDataExtractor)
        {
            if (imageMetaDataExtractor == null)
            {
                throw new ArgumentNullException(nameof(imageMetaDataExtractor));
            }

            _imageMetaDataExtractor = imageMetaDataExtractor;
        }
Exemple #3
0
        public EquipmentDetector(IFolderManager folderManager, IMetaDataExtractor imageMetaDataExtractor)
        {
            if (folderManager == null)
            {
                throw new ArgumentNullException(nameof(folderManager));
            }
            if (imageMetaDataExtractor == null)
            {
                throw new ArgumentNullException(nameof(imageMetaDataExtractor));
            }

            _folderManager          = folderManager;
            _imageMetaDataExtractor = imageMetaDataExtractor;
        }
Exemple #4
0
        private IEnumerable <AbstractMediaMetaData> ProcessBatch(
            IMetaDataExtractor extractor,
            IEnumerable <string> files)
        {
            foreach (var file in files)
            {
                var metaData = extractor.Extract(file);

                var filename = Path.GetFileName(file);
                if (metaData == null)
                {
                    OnProgressEvent(filename, "Could not extract metadata", error: true);
                    continue;
                }

                OnProgressEvent(filename, $"Processing {filename}");
                yield return(metaData);
            }
        }
Exemple #5
0
        public (int count, string outputPath) Execute(
            IMetaDataExtractor extractor,
            string folder,
            bool includeSubFolders,
            bool useParallelProcessing)
        {
            var reader = new MediaFileReader
            {
                UseParallelProcessing = useParallelProcessing
            };

            ConfigureProgress(reader);

            var writer = new OutputWriter();

            var outputPath = GetOutputFilePath(folder, extractor.OutputFileName);
            var count      = writer.Execute(outputPath, reader.Execute(extractor, folder, includeSubFolders).ToArray());

            return(count, outputPath);
        }