Centralise access to WorkingBeatmaps.

They can now only be instantiated from BeatmapDatabase and are abstract (to avoid misuse).
This commit is contained in:
Dean Herbert
2017-02-24 13:43:21 +09:00
parent 355bbb6324
commit 3a89348413
6 changed files with 44 additions and 35 deletions

View File

@ -183,19 +183,13 @@ namespace osu.Game.Database
if (beatmapInfo.Metadata == null)
beatmapInfo.Metadata = beatmapSetInfo.Metadata;
var working = new WorkingBeatmap(beatmapInfo, beatmapSetInfo, this, withStoryboard);
WorkingBeatmap working = new DatabaseWorkingBeatmap(this, beatmapInfo, beatmapSetInfo, withStoryboard);
previous?.TransferTo(working);
return working;
}
public Beatmap GetBeatmap(BeatmapInfo beatmapInfo)
{
using (WorkingBeatmap data = GetWorkingBeatmap(beatmapInfo))
return data.Beatmap;
}
public TableQuery<T> Query<T>() where T : class
{
return connection.Table<T>();
@ -237,5 +231,20 @@ namespace osu.Game.Database
else
connection.Update(record);
}
public bool Exists(BeatmapSetInfo beatmapSet) => storage.Exists(beatmapSet.Path);
private class DatabaseWorkingBeatmap : WorkingBeatmap
{
private readonly BeatmapDatabase database;
public DatabaseWorkingBeatmap(BeatmapDatabase database, BeatmapInfo beatmapInfo, BeatmapSetInfo beatmapSetInfo, bool withStoryboard = false)
: base(beatmapInfo, beatmapSetInfo, withStoryboard)
{
this.database = database;
}
protected override ArchiveReader GetReader() => database?.GetReader(BeatmapSetInfo);
}
}
}