diff --git a/osu.Game/Scoring/Legacy/LegacyScoreParser.cs b/osu.Game/Scoring/Legacy/LegacyScoreParser.cs
index f17873df89..5a9a09cfbc 100644
--- a/osu.Game/Scoring/Legacy/LegacyScoreParser.cs
+++ b/osu.Game/Scoring/Legacy/LegacyScoreParser.cs
@@ -37,7 +37,11 @@ namespace osu.Game.Scoring.Legacy
var version = sr.ReadInt32();
- currentBeatmap = GetBeatmap(sr.ReadString()).Beatmap;
+ var workingBeatmap = GetBeatmap(sr.ReadString());
+ if (workingBeatmap is DummyWorkingBeatmap)
+ throw new BeatmapNotFoundException();
+
+ currentBeatmap = workingBeatmap.Beatmap;
score.ScoreInfo.BeatmapInfo = currentBeatmap.BeatmapInfo;
score.ScoreInfo.User = score.Replay.User = new User { Username = sr.ReadString() };
@@ -185,5 +189,13 @@ namespace osu.Game.Scoring.Legacy
/// The MD5 hash.
/// The .
protected abstract WorkingBeatmap GetBeatmap(string md5Hash);
+
+ public class BeatmapNotFoundException : Exception
+ {
+ public BeatmapNotFoundException()
+ : base("No corresponding beatmap for the score could be found.")
+ {
+ }
+ }
}
}
diff --git a/osu.Game/Scoring/ScoreManager.cs b/osu.Game/Scoring/ScoreManager.cs
index eec23ba48c..dbd2f0588d 100644
--- a/osu.Game/Scoring/ScoreManager.cs
+++ b/osu.Game/Scoring/ScoreManager.cs
@@ -6,6 +6,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using Microsoft.EntityFrameworkCore;
+using osu.Framework.Logging;
using osu.Framework.Platform;
using osu.Game.Beatmaps;
using osu.Game.Database;
@@ -41,7 +42,17 @@ namespace osu.Game.Scoring
return null;
using (var stream = archive.GetStream(archive.Filenames.First(f => f.EndsWith(".osr"))))
- return new DatabasedLegacyScoreParser(rulesets, beatmaps).Parse(stream).ScoreInfo;
+ {
+ try
+ {
+ return new DatabasedLegacyScoreParser(rulesets, beatmaps).Parse(stream).ScoreInfo;
+ }
+ catch (LegacyScoreParser.BeatmapNotFoundException e)
+ {
+ Logger.Log(e.Message, LoggingTarget.Information, LogLevel.Error);
+ return null;
+ }
+ }
}
protected override ScoreInfo CheckForExisting(ScoreInfo model)