From 02f6e461052922107eb304c4529217a5ebfcc303 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9F=AF=E5=8D=81=E5=85=AD=E5=A4=9C?= Date: Tue, 20 Dec 2016 23:56:49 +0800 Subject: [PATCH] Add support for v9 beatmaps --- osu.Game/Database/BeatmapDatabase.cs | 15 ++++++++++---- osu.Game/Database/BeatmapInfo.cs | 8 ++++++-- osu.Game/Database/BeatmapSetInfo.cs | 24 ++++++++++++----------- osu.Game/Screens/Select/PlaySongSelect.cs | 2 +- 4 files changed, 31 insertions(+), 18 deletions(-) diff --git a/osu.Game/Database/BeatmapDatabase.cs b/osu.Game/Database/BeatmapDatabase.cs index 896e742989..e1975e8a0e 100644 --- a/osu.Game/Database/BeatmapDatabase.cs +++ b/osu.Game/Database/BeatmapDatabase.cs @@ -69,8 +69,15 @@ namespace osu.Game.Database using (var reader = ArchiveReader.GetReader(storage, path)) metadata = reader.ReadMetadata(); - if (connection.Table().Count(b => b.BeatmapSetID == metadata.BeatmapSetID) != 0) - return; // TODO: Update this beatmap instead + if (metadata.BeatmapSetID != -1) + { + if (connection.Table().Count(b => b.BeatmapSetID == metadata.BeatmapSetID) != 0) + return; // TODO: Update this beatmap instead + } + else + { + // TODO: Another method is required to determine whether two beatmaps with no BeatmapSetID are equal. + } if (File.Exists(path)) // Not always the case, i.e. for LegacyFilesystemReader { @@ -144,13 +151,13 @@ namespace osu.Game.Database public WorkingBeatmap GetWorkingBeatmap(BeatmapInfo beatmapInfo, WorkingBeatmap previous = null) { - var beatmapSetInfo = Query().FirstOrDefault(s => s.BeatmapSetID == beatmapInfo.BeatmapSetID); + var beatmapSetInfo = Query().FirstOrDefault(s => s.ID == beatmapInfo.BeatmapSetInfoID); //we need metadata GetChildren(beatmapSetInfo); 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) beatmapInfo.Metadata = beatmapSetInfo.Metadata; diff --git a/osu.Game/Database/BeatmapInfo.cs b/osu.Game/Database/BeatmapInfo.cs index be47891016..6b0b124020 100644 --- a/osu.Game/Database/BeatmapInfo.cs +++ b/osu.Game/Database/BeatmapInfo.cs @@ -13,12 +13,16 @@ namespace osu.Game.Database { public class BeatmapInfo : IEquatable { - [PrimaryKey] + [PrimaryKey, AutoIncrement] + public int ID { get; set; } + public int BeatmapID { get; set; } - [ForeignKey(typeof(BeatmapSetInfo))] public int BeatmapSetID { get; set; } + [ForeignKey(typeof(BeatmapSetInfo))] + public int BeatmapSetInfoID { get; set; } + [ManyToOne] public BeatmapSetInfo BeatmapSet { get; set; } diff --git a/osu.Game/Database/BeatmapSetInfo.cs b/osu.Game/Database/BeatmapSetInfo.cs index 0a83753963..de90a4ed2c 100644 --- a/osu.Game/Database/BeatmapSetInfo.cs +++ b/osu.Game/Database/BeatmapSetInfo.cs @@ -10,20 +10,22 @@ namespace osu.Game.Database { public class BeatmapSetInfo { - [PrimaryKey] - public int BeatmapSetID { get; set; } - + [PrimaryKey, AutoIncrement] + public int ID { get; set; } + + public int BeatmapSetID { get; set; } + [OneToOne(CascadeOperations = CascadeOperation.All)] - public BeatmapMetadata Metadata { get; set; } - - [NotNull, ForeignKey(typeof(BeatmapMetadata))] + public BeatmapMetadata Metadata { get; set; } + + [NotNull, ForeignKey(typeof(BeatmapMetadata))] public int BeatmapMetadataID { get; set; } - [OneToMany(CascadeOperations = CascadeOperation.All)] - public List Beatmaps { get; set; } - - public string Hash { get; set; } - + [OneToMany(CascadeOperations = CascadeOperation.All)] + public List Beatmaps { get; set; } + + public string Hash { get; set; } + public string Path { get; set; } } } diff --git a/osu.Game/Screens/Select/PlaySongSelect.cs b/osu.Game/Screens/Select/PlaySongSelect.cs index 3a74c42029..b14dd24fd7 100644 --- a/osu.Game/Screens/Select/PlaySongSelect.cs +++ b/osu.Game/Screens/Select/PlaySongSelect.cs @@ -332,7 +332,7 @@ namespace osu.Game.Screens.Select private void addBeatmapSet(BeatmapSetInfo beatmapSet, BaseGame game) { - beatmapSet = database.GetWithChildren(beatmapSet.BeatmapSetID); + beatmapSet = database.GetWithChildren(beatmapSet.ID); beatmapSet.Beatmaps.ForEach(b => { database.GetChildren(b);