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:
commit
c940b48bba
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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 &&
|
||||||
|
@ -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; }
|
||||||
|
@ -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; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user