private void Execute(FileSorting sorting) { _logger.Debug("Executing next FileSorting"); var files = sorting.FileFinder.SelectMany(s => { return(s.FindFiles().Select(f => new FileSortingExecution(f))); }); var options = new ParallelOptions { MaxDegreeOfParallelism = 1 }; var results = new List <FileSortingExecution>(); var loop = Parallel.ForEach(files, options, x => { try { Execute(x, sorting); } catch (Exception ex) { _logger.Error(ex, "Moving of file {0} not possible due to:", x.SourceFile.FullPath); x.Error = ex; } results.Add(x); }); foreach (var entry in results) { var logPath = Path.Combine(entry.SourceFile.BasePath, MoveLogFileName); File.AppendAllText(logPath, DumpResult(entry)); } foreach (var finder in sorting.FileFinder) { finder.RemoveEmptyFolders(); } _logger.Debug("Finsihed executing of FileSorting"); }
public void AddFileSorting(FileSorting fileSorting) { _fileSortings.Add(fileSorting); }
private void Execute(FileSortingExecution execution, FileSorting sorting) { _logger.Debug("Executing file filter"); var fileFilterWasMatching = true; foreach (var filter in sorting.FileFilter) { if (filter.MatchFile(execution.SourceFile)) { execution.MatchingFileFilterName = filter.Name ?? string.Empty; fileFilterWasMatching = true; break; } fileFilterWasMatching = false; } if (!fileFilterWasMatching) { _logger.Debug("No Filter matching for file {0}", execution.SourceFile.FullPath); execution.FileWasProcessed = false; return; } execution.FileWasProcessed = true; _logger.Debug("Extracting informations from file {0}", execution.SourceFile.FullPath); var fileInformations = sorting.FileInformationExtractor.Select(x => x.ExtractInformation(execution.SourceFile)); execution.FileInformation = MergeFileInformation(fileInformations); _logger.Debug("Mapping informations from file {0}", execution.SourceFile.FullPath); foreach (var mapper in sorting.FileInformationMapper) { execution.FileInformation = mapper.MapInformation(execution.FileInformation); } _logger.Debug("Executing fileInformation filter"); var fileInformationFilterWasMatching = true; foreach (var filter in sorting.FileInformationFilter) { if (filter.MatchFile(execution.SourceFile, execution.FileInformation)) { execution.MatchingFileInformationFilterName = filter.Name ?? string.Empty; fileInformationFilterWasMatching = true; break; } fileInformationFilterWasMatching = false; } if (!fileInformationFilterWasMatching) { _logger.Debug("No fileInformation Filter matching for file {0}", execution.SourceFile.FullPath); return; } _logger.Debug("Creating new file path for file {0}", execution.SourceFile.FullPath); execution.DestinationPath = sorting.FilePathCreator.CreateDestinationPath(execution.FileInformation, execution.SourceFile); if (sorting.BackupFilePathCreator != null) { _logger.Debug("Creating backup file path for file {0}", execution.SourceFile.FullPath); execution.BackupPath = sorting.BackupFilePathCreator.CreateDestinationPath(execution.FileInformation, execution.SourceFile); _logger.Debug("Backuping file {0}", execution.SourceFile.FullPath); sorting.FileMover.ProcessFileBackup(execution.SourceFile, execution.BackupPath); } _logger.Debug("Moving file {0}", execution.SourceFile.FullPath); sorting.FileMover.ProcessFileSort(execution.SourceFile, execution.DestinationPath); _logger.Debug("Change content of file {0}", execution.DestinationPath.FullPath); foreach (var contentChanger in sorting.FileContentChanger) { contentChanger.ChangeContent(execution.DestinationPath); } _logger.Debug("Indexing file {0}", execution.DestinationPath.FullPath); foreach (var indexer in sorting.FileIndexer) { indexer.IndexFile(execution.DestinationPath); } }