Merge pull request #1029 from smoogipooo/fix-beatmap-null

Fix Player crashing due to null BeatmapInfo (now unused).
This commit is contained in:
Dean Herbert 2017-07-20 09:40:18 +09:00 committed by GitHub
commit 8417e59de3
5 changed files with 14 additions and 13 deletions

View File

@ -10,7 +10,7 @@ namespace osu.Desktop.VisualTests.Beatmaps
public class TestWorkingBeatmap : WorkingBeatmap
{
public TestWorkingBeatmap(Beatmap beatmap)
: base(beatmap.BeatmapInfo)
: base(beatmap.BeatmapInfo, true)
{
this.beatmap = beatmap;
}

View File

@ -22,14 +22,17 @@ public abstract class WorkingBeatmap : IDisposable
public readonly Bindable<IEnumerable<Mod>> Mods = new Bindable<IEnumerable<Mod>>(new Mod[] { });
public readonly bool WithStoryboard;
/// <summary>
/// Denotes whether extras like storyboards have been loaded for this <see cref="WorkingBeatmap"/>.
/// </summary>
public bool FullyLoaded { get; protected set; }
protected WorkingBeatmap(BeatmapInfo beatmapInfo, bool withStoryboard = false)
protected WorkingBeatmap(BeatmapInfo beatmapInfo, bool fullyLoaded = false)
{
BeatmapInfo = beatmapInfo;
BeatmapSetInfo = beatmapInfo.BeatmapSet;
Metadata = beatmapInfo.Metadata ?? BeatmapSetInfo.Metadata;
WithStoryboard = withStoryboard;
FullyLoaded = fullyLoaded;
Mods.ValueChanged += mods => applyRateAdjustments();
}

View File

@ -14,8 +14,8 @@ internal class DatabaseWorkingBeatmap : WorkingBeatmap
{
private readonly BeatmapDatabase database;
public DatabaseWorkingBeatmap(BeatmapDatabase database, BeatmapInfo beatmapInfo, bool withStoryboard = false)
: base(beatmapInfo, withStoryboard)
public DatabaseWorkingBeatmap(BeatmapDatabase database, BeatmapInfo beatmapInfo, bool fullyLoaded = false)
: base(beatmapInfo, fullyLoaded)
{
this.database = database;
}
@ -37,7 +37,7 @@ protected override Beatmap GetBeatmap()
beatmap = decoder.Decode(stream);
}
if (beatmap == null || !WithStoryboard || BeatmapSetInfo.StoryboardFile == null)
if (beatmap == null || !FullyLoaded || BeatmapSetInfo.StoryboardFile == null)
return beatmap;
using (var stream = new StreamReader(reader.GetStream(BeatmapSetInfo.StoryboardFile)))

View File

@ -35,8 +35,6 @@ public class Player : OsuScreen
internal override bool HasLocalCursorDisplayed => !pauseContainer.IsPaused && !HasFailed && HitRenderer.ProvidingUserCursor;
public BeatmapInfo BeatmapInfo;
public Action RestartRequested;
internal override bool AllowBeatmapRulesetChange => false;
@ -83,9 +81,9 @@ private void load(AudioManager audio, BeatmapDatabase beatmaps, OsuConfigManager
try
{
if (!Beatmap.Value.WithStoryboard)
// we need to ensure the storyboard is loaded.
Beatmap.Value = beatmaps.GetWorkingBeatmap(BeatmapInfo, withStoryboard: true);
if (!Beatmap.Value.FullyLoaded)
// we need to ensure extras like storyboards are loaded.
Beatmap.Value = beatmaps.GetWorkingBeatmap(Beatmap.Value.BeatmapInfo, withStoryboard: true);
if (Beatmap.Value.Beatmap == null)
throw new InvalidOperationException("Beatmap was not loaded");

View File

@ -189,7 +189,7 @@ private void load(BeatmapDatabase beatmaps, AudioManager audio, DialogOverlay di
private void carouselBeatmapsLoaded()
{
if (Beatmap.Value != null && !Beatmap.Value.BeatmapSetInfo.DeletePending)
if (Beatmap.Value != null && Beatmap.Value.BeatmapSetInfo?.DeletePending != false)
carousel.SelectBeatmap(Beatmap.Value.BeatmapInfo, false);
else
carousel.SelectNext();