1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-19 21:02:55 +08:00

Merge pull request #1 from kizayoi/support-old-beatmaps

Support old beatmaps
This commit is contained in:
柯十六夜 2016-12-21 16:37:23 +08:00 committed by GitHub
commit c940b48bba
6 changed files with 35 additions and 22 deletions

View File

@ -25,6 +25,11 @@ namespace osu.Game.Beatmaps.Formats
AddDecoder<OsuLegacyDecoder>(@"osu file format v12"); AddDecoder<OsuLegacyDecoder>(@"osu file format v12");
AddDecoder<OsuLegacyDecoder>(@"osu file format v11"); AddDecoder<OsuLegacyDecoder>(@"osu file format v11");
AddDecoder<OsuLegacyDecoder>(@"osu file format v10"); AddDecoder<OsuLegacyDecoder>(@"osu file format v10");
AddDecoder<OsuLegacyDecoder>(@"osu file format v9");
AddDecoder<OsuLegacyDecoder>(@"osu file format v8");
AddDecoder<OsuLegacyDecoder>(@"osu file format v7");
AddDecoder<OsuLegacyDecoder>(@"osu file format v6");
AddDecoder<OsuLegacyDecoder>(@"osu file format v5");
// TODO: Not sure how far back to go, or differences between versions // TODO: Not sure how far back to go, or differences between versions
} }

View File

@ -69,7 +69,8 @@ namespace osu.Game.Database
using (var reader = ArchiveReader.GetReader(storage, path)) using (var reader = ArchiveReader.GetReader(storage, path))
metadata = reader.ReadMetadata(); metadata = reader.ReadMetadata();
if (connection.Table<BeatmapSetInfo>().Count(b => b.BeatmapSetID == metadata.BeatmapSetID) != 0) if (metadata.BeatmapSetID != -1 &&
connection.Table<BeatmapSetInfo>().Count(b => b.BeatmapSetID == metadata.BeatmapSetID) != 0)
return; // TODO: Update this beatmap instead return; // TODO: Update this beatmap instead
if (File.Exists(path)) // Not always the case, i.e. for LegacyFilesystemReader if (File.Exists(path)) // Not always the case, i.e. for LegacyFilesystemReader
@ -144,13 +145,13 @@ namespace osu.Game.Database
public WorkingBeatmap GetWorkingBeatmap(BeatmapInfo beatmapInfo, WorkingBeatmap previous = null) public WorkingBeatmap GetWorkingBeatmap(BeatmapInfo beatmapInfo, WorkingBeatmap previous = null)
{ {
var beatmapSetInfo = Query<BeatmapSetInfo>().FirstOrDefault(s => s.BeatmapSetID == beatmapInfo.BeatmapSetID); var beatmapSetInfo = Query<BeatmapSetInfo>().FirstOrDefault(s => s.ID == beatmapInfo.BeatmapSetInfoID);
//we need metadata //we need metadata
GetChildren(beatmapSetInfo); GetChildren(beatmapSetInfo);
if (beatmapSetInfo == null) if (beatmapSetInfo == null)
throw new InvalidOperationException($@"Beatmap set {beatmapInfo.BeatmapSetID} is not in the local database."); throw new InvalidOperationException($@"Beatmap set {beatmapInfo.BeatmapSetInfoID} is not in the local database.");
if (beatmapInfo.Metadata == null) if (beatmapInfo.Metadata == null)
beatmapInfo.Metadata = beatmapSetInfo.Metadata; beatmapInfo.Metadata = beatmapSetInfo.Metadata;

View File

@ -13,11 +13,15 @@ namespace osu.Game.Database
{ {
public class BeatmapInfo : IEquatable<BeatmapInfo> public class BeatmapInfo : IEquatable<BeatmapInfo>
{ {
[PrimaryKey] [PrimaryKey, AutoIncrement]
public int BeatmapID { get; set; } public int ID { get; set; }
public int BeatmapID { get; set; } = 0;
public int BeatmapSetID { get; set; } = -1;
[ForeignKey(typeof(BeatmapSetInfo))] [ForeignKey(typeof(BeatmapSetInfo))]
public int BeatmapSetID { get; set; } public int BeatmapSetInfoID { get; set; }
[ManyToOne] [ManyToOne]
public BeatmapSetInfo BeatmapSet { get; set; } public BeatmapSetInfo BeatmapSet { get; set; }
@ -71,7 +75,7 @@ namespace osu.Game.Database
public bool Equals(BeatmapInfo other) public bool Equals(BeatmapInfo other)
{ {
return BeatmapID == other?.BeatmapID; return ID == other?.ID;
} }
public bool AudioEquals(BeatmapInfo other) => other != null && public bool AudioEquals(BeatmapInfo other) => other != null &&

View File

@ -9,8 +9,9 @@ namespace osu.Game.Database
{ {
[PrimaryKey, AutoIncrement] [PrimaryKey, AutoIncrement]
public int ID { get; set; } public int ID { get; set; }
public int BeatmapSetID { get; set; } public int BeatmapSetID { get; set; } = -1;
public string Title { get; set; } public string Title { get; set; }
public string TitleUnicode { get; set; } public string TitleUnicode { get; set; }
public string Artist { get; set; } public string Artist { get; set; }

View File

@ -10,20 +10,22 @@ namespace osu.Game.Database
{ {
public class BeatmapSetInfo public class BeatmapSetInfo
{ {
[PrimaryKey] [PrimaryKey, AutoIncrement]
public int BeatmapSetID { get; set; } public int ID { get; set; }
public int BeatmapSetID { get; set; } = -1;
[OneToOne(CascadeOperations = CascadeOperation.All)] [OneToOne(CascadeOperations = CascadeOperation.All)]
public BeatmapMetadata Metadata { get; set; } public BeatmapMetadata Metadata { get; set; }
[NotNull, ForeignKey(typeof(BeatmapMetadata))] [NotNull, ForeignKey(typeof(BeatmapMetadata))]
public int BeatmapMetadataID { get; set; } public int BeatmapMetadataID { get; set; }
[OneToMany(CascadeOperations = CascadeOperation.All)] [OneToMany(CascadeOperations = CascadeOperation.All)]
public List<BeatmapInfo> Beatmaps { get; set; } public List<BeatmapInfo> Beatmaps { get; set; }
public string Hash { get; set; } public string Hash { get; set; }
public string Path { get; set; } public string Path { get; set; }
} }
} }

View File

@ -305,7 +305,7 @@ namespace osu.Game.Screens.Select
if (!beatmap.Equals(Beatmap?.BeatmapInfo)) if (!beatmap.Equals(Beatmap?.BeatmapInfo))
{ {
if (beatmap.BeatmapSetID == Beatmap?.BeatmapInfo.BeatmapSetID) if (beatmap.BeatmapSetInfoID == Beatmap?.BeatmapInfo.BeatmapSetInfoID)
sampleChangeDifficulty.Play(); sampleChangeDifficulty.Play();
else else
{ {
@ -332,7 +332,7 @@ namespace osu.Game.Screens.Select
private void addBeatmapSet(BeatmapSetInfo beatmapSet, BaseGame game) private void addBeatmapSet(BeatmapSetInfo beatmapSet, BaseGame game)
{ {
beatmapSet = database.GetWithChildren<BeatmapSetInfo>(beatmapSet.BeatmapSetID); beatmapSet = database.GetWithChildren<BeatmapSetInfo>(beatmapSet.ID);
beatmapSet.Beatmaps.ForEach(b => beatmapSet.Beatmaps.ForEach(b =>
{ {
database.GetChildren(b); database.GetChildren(b);