예제 #1
0
        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;
            }));
        }
예제 #2
0
 public IEnumerable <SsqChunk> Read(HeuristicResult heuristicResult, Stream stream)
 {
     return(_ssqStreamReader.Read(stream));
 }