public ITask CreateDecodeSsq() { return(Build("Decode SSQ", task => { var files = GetInputFiles(task); if (!files.Any()) { task.Message = "No input files."; return false; } ParallelProgress(task, files, file => { using (var inFile = OpenRead(task, file)) { var chunks = _ssqStreamReader.Read(inFile); var charts = _ssqDecoder.Decode(chunks); var aggregatedInfo = _metadataAggregator.Aggregate(charts); var title = Path.GetFileNameWithoutExtension(file.Name); var globalOffset = Args.Options.ContainsKey("-offset") ? BigRationalParser.ParseString(Args.Options["-offset"].FirstOrDefault() ?? "0") : BigRational.Zero; // This is a temporary hack to make building sets easier for right now // TODO: make this optional via command line switch if (title.EndsWith("_all", StringComparison.InvariantCultureIgnoreCase)) { title = title.Substring(0, title.Length - 4); } var encoded = _smEncoder.Encode(new ChartSet { Metadata = new Metadata { [StringData.Title] = aggregatedInfo[StringData.Title] ?? title, [StringData.Subtitle] = aggregatedInfo[StringData.Subtitle], [StringData.Artist] = aggregatedInfo[StringData.Artist], [ChartTag.MusicTag] = aggregatedInfo[StringData.Music] ?? $"{title}.ogg", [ChartTag.PreviewTag] = aggregatedInfo[StringData.Music] ?? $"{title}-preview.ogg", [ChartTag.OffsetTag] = $"{(decimal) (-aggregatedInfo[NumericData.LinearOffset] + globalOffset)}" }, Charts = charts }); using (var outFile = OpenWriteSingle(task, file, i => $"{i}.sm")) { _smStreamWriter.Write(outFile, encoded); outFile.Flush(); } } }); return true; })); }
public IEnumerable <SsqChunk> Read(HeuristicResult heuristicResult, Stream stream) { return(_ssqStreamReader.Read(stream)); }