protected InputFile[] GetInputFiles(BuiltTask task) { task.Message = "Resolving input files."; var sourceFiles = Args.InputFiles .SelectMany(a => _fileSystem.GetFileNames(a, Args.RecursiveInputFiles)); if (Args.FilesAreZipArchives) { return(GetArchivedFiles(sourceFiles)); } return(sourceFiles .Select(sf => { var info = new FileInfo(sf); if (info.Exists) { return new InputFile( sf, () => _fileSystem.OpenRead(sf), f => _fileSystem.OpenRead(Path.Combine(Path.GetDirectoryName(sf), f)), s => s.Dispose()) { Length = info.Length }; } else { throw new RhythmCodexException($"File doesn't exist: {sf}"); } }) .ToArray()); }
protected ITask Build(string name, Func <BuiltTask, bool> task) { BuiltTask result = null; result = new BuiltTask(name, () => task(result)); result.MessageUpdated += (sender, message) => Logger.Info(message); return(result); }
protected byte[] GetFile(BuiltTask task, InputFile inputFile) { task.Message = $"Reading {inputFile}"; using (var stream = inputFile.Open()) { var reader = new BinaryReader(stream); return(reader.ReadBytes((int)stream.Length)); } }
protected void ParallelProgress <T>(BuiltTask task, ICollection <T> items, Action <T> action) { var progressIncrement = 1 / (float)items.Count; foreach (var item in items.AsParallel()) { action(item); task.Progress += progressIncrement; } }
protected Stream OpenWriteSingle(BuiltTask task, InputFile inputFile, Func <string, string> generateName) { if (_fileSystem == null) { throw new RhythmCodexException("Filesystem is not defined."); } var path = GetOutputFolder(inputFile.Name); var newName = generateName(Path.GetFileNameWithoutExtension(inputFile.Name)); var newPath = Path.Combine(path, newName); var newDirectory = Path.GetDirectoryName(newPath); task.Message = $"Writing {newPath}"; _fileSystem.CreateDirectory(newDirectory); return(_fileSystem.OpenWrite(newPath)); }
protected Stream OpenRead(BuiltTask task, InputFile inputFile) { task.Message = $"Opening {inputFile.Name}"; return(inputFile.Open()); }