Lazy parse beatmap; Don't reload audio track if it hasn't changed.

This commit is contained in:
Dean Herbert
2016-10-28 20:24:14 +09:00
parent 74f1a9622f
commit 10ef34b805
4 changed files with 56 additions and 16 deletions

View File

@ -136,16 +136,26 @@ namespace osu.Game.Database
return Query<BeatmapSetInfo>().Where(s => s.BeatmapSetID == id).FirstOrDefault();
}
public WorkingBeatmap GetWorkingBeatmap(BeatmapInfo beatmapInfo)
public WorkingBeatmap GetWorkingBeatmap(BeatmapInfo beatmapInfo, WorkingBeatmap previous = null)
{
var beatmapSet = Query<BeatmapSetInfo>().Where(s => s.BeatmapSetID == beatmapInfo.BeatmapSetID).FirstOrDefault();
if (beatmapSet == null)
var beatmapSetInfo = Query<BeatmapSetInfo>().FirstOrDefault(s => s.BeatmapSetID == beatmapInfo.BeatmapSetID);
//we need metadata
GetChildren(beatmapSetInfo);
if (beatmapSetInfo == null)
throw new InvalidOperationException($@"Beatmap set {beatmapInfo.BeatmapSetID} is not in the local database.");
var reader = GetReader(beatmapSet);
var reader = GetReader(beatmapSetInfo);
using (var stream = new StreamReader(reader.ReadFile(beatmapInfo.Path)))
return new WorkingBeatmap(BeatmapDecoder.GetDecoder(stream)?.Decode(stream), reader);
if (beatmapInfo.Metadata == null)
beatmapInfo.Metadata = beatmapSetInfo.Metadata;
var working = new WorkingBeatmap(beatmapInfo, reader);
previous?.TransferTo(working);
return working;
}
public Beatmap GetBeatmap(BeatmapInfo beatmapInfo)