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)); }
public FormatFileNameGenerator(IMetaDataExtractor imageMetaDataExtractor) { if (imageMetaDataExtractor == null) { throw new ArgumentNullException(nameof(imageMetaDataExtractor)); } _imageMetaDataExtractor = imageMetaDataExtractor; }
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; }
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); } }
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); }