public ConverterFileStatus FinishFileProcessing(ConverterFileInfo processingFile, bool processedSuccessfully) { Contract.RequiresArgumentNotNull(processingFile, nameof(processingFile)); Contract.RequiresArgument(this.files[ConverterFileStatus.Processing].ContainsKey(processingFile.SourcePath), "File is not a processing file."); this.files[ConverterFileStatus.Processing].Remove(processingFile.SourcePath); ConverterFileStatus GetNewStatus() { if (processedSuccessfully) { return(ConverterFileStatus.ProcessedSuccessfully); } if (processingFile.ProcessingAttemps < this.MaxProcessingAttemps) { return(ConverterFileStatus.None); } return(ConverterFileStatus.Failed); } ConverterFileStatus newStatus = GetNewStatus(); this.files[newStatus].Add(processingFile.SourcePath, processingFile); return(newStatus); }
public void StartFreeFileProcessing(ConverterFileInfo freeFile) { Contract.RequiresArgumentNotNull(freeFile, nameof(freeFile)); Contract.RequiresArgument(this.files[ConverterFileStatus.None].ContainsKey(freeFile.SourcePath)); this.files[ConverterFileStatus.None].Remove(freeFile.SourcePath); this.files[ConverterFileStatus.Processing].Add(freeFile.SourcePath, freeFile); }
public Task ScanSourceDirectory() { string[] GetSourceFiles() => Directory.GetFiles( this.sourceDirectory, this.searchPattern, SearchOption.AllDirectories); string GetRelativePath(string sourceDirectory, string sourcePath) { bool IsSeparator(char c) => PathUtils.NativeDirectorySeparatorChars.Contains(c); return(new string( sourcePath .Skip(this.sourceDirectory.Length) .SkipWhile(c => IsSeparator(c)) .ToArray())); } void AddSourceFile(string sourcePath, string sourcePathSystemIndependent) { string relativePath = GetRelativePath(this.sourceDirectory, sourcePath); string destPath = Path.Combine(this.destDirectory, relativePath); string destPathSystemIndependent = PathUtils.GetSystemIndependentPath(destPath); var converterFileInfo = new ConverterFileInfo(sourcePathSystemIndependent, destPathSystemIndependent); this.files[ConverterFileStatus.None].Add(sourcePathSystemIndependent, converterFileInfo); } if (this.isScanningSourceDirectory) { return(Task.CompletedTask); } this.isScanningSourceDirectory = true; try { var nonProcessingFiles = this.files .Where(item => item.Key != ConverterFileStatus.Processing) .Select(item => item.Value) .ToArray(); var sourceFiles = GetSourceFiles(); sourceFiles.ForEach( sourcePath => { var sourcePathSystemIndependent = PathUtils.GetSystemIndependentPath(sourcePath); if (this.files.Any(item => item.Value.ContainsKey(sourcePathSystemIndependent))) { return; } AddSourceFile(sourcePath, sourcePathSystemIndependent); }); } finally { this.isScanningSourceDirectory = false; } return(Task.CompletedTask); }