mirror of
https://github.com/ppy/osu.git
synced 2024-11-11 09:27:29 +08:00
Merge pull request #8584 from ThereGoesMySanity/getdecoder-fix
Fix GetDecoder getting fallback decoder too often
This commit is contained in:
commit
4e061ceabc
@ -127,6 +127,31 @@ namespace osu.Game.Tests.Beatmaps.Formats
|
||||
.Assert();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestGetJsonDecoder()
|
||||
{
|
||||
Decoder<Beatmap> decoder;
|
||||
|
||||
using (var stream = TestResources.OpenResource(normal))
|
||||
using (var sr = new LineBufferedReader(stream))
|
||||
{
|
||||
var legacyDecoded = new LegacyBeatmapDecoder { ApplyOffsets = false }.Decode(sr);
|
||||
|
||||
using (var memStream = new MemoryStream())
|
||||
using (var memWriter = new StreamWriter(memStream))
|
||||
using (var memReader = new LineBufferedReader(memStream))
|
||||
{
|
||||
memWriter.Write(legacyDecoded.Serialize());
|
||||
memWriter.Flush();
|
||||
|
||||
memStream.Position = 0;
|
||||
decoder = Decoder.GetDecoder<Beatmap>(memReader);
|
||||
}
|
||||
}
|
||||
|
||||
Assert.IsInstanceOf(typeof(JsonBeatmapDecoder), decoder);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads a .osu file first with a <see cref="LegacyBeatmapDecoder"/>, serializes the resulting <see cref="Beatmap"/> to JSON
|
||||
/// and then deserializes the result back into a <see cref="Beatmap"/> through an <see cref="JsonBeatmapDecoder"/>.
|
||||
|
@ -63,7 +63,7 @@ namespace osu.Game.Beatmaps.Formats
|
||||
if (line == null)
|
||||
throw new IOException("Unknown file format (null)");
|
||||
|
||||
var decoder = typedDecoders.Select(d => line.StartsWith(d.Key, StringComparison.InvariantCulture) ? d.Value : null).FirstOrDefault();
|
||||
var decoder = typedDecoders.Where(d => line.StartsWith(d.Key, StringComparison.InvariantCulture)).Select(d => d.Value).FirstOrDefault();
|
||||
|
||||
// it's important the magic does NOT get consumed here, since sometimes it's part of the structure
|
||||
// (see JsonBeatmapDecoder - the magic string is the opening brace)
|
||||
|
Loading…
Reference in New Issue
Block a user