Fix beatmap details potentially using the incorrect metrics

This commit is contained in:
smoogipoo 2019-06-13 17:10:09 +09:00
parent dd7335079f
commit f54f6e552b
2 changed files with 37 additions and 11 deletions

View File

@ -138,6 +138,25 @@ namespace osu.Game.Tests.Visual.SongSelect
}); });
AddStep("null beatmap", () => details.Beatmap = null); AddStep("null beatmap", () => details.Beatmap = null);
AddStep("online ratings/retries/fails", () => details.Beatmap = new BeatmapInfo
{
OnlineBeatmapID = 162,
Version = "online ratings/retries/fails",
Metadata = new BeatmapMetadata
{
Source = "osu!lazer",
Tags = "this beatmap has online ratings/retries/fails",
},
BaseDifficulty = new BeatmapDifficulty
{
CircleSize = 7,
DrainRate = 1,
OverallDifficulty = 5.7f,
ApproachRate = 3.5f,
},
StarDifficulty = 5.3f
});
} }
} }
} }

View File

@ -185,9 +185,9 @@ namespace osu.Game.Screens.Select
tags.Text = Beatmap?.Metadata?.Tags; tags.Text = Beatmap?.Metadata?.Tags;
// metrics may have been previously fetched // metrics may have been previously fetched
if (Beatmap?.BeatmapSet?.Metrics != null) if (Beatmap?.BeatmapSet?.Metrics != null && Beatmap?.Metrics != null)
{ {
updateMetrics(Beatmap); updateMetrics(Beatmap.BeatmapSet.Metrics, Beatmap.Metrics);
return; return;
} }
@ -195,6 +195,7 @@ namespace osu.Game.Screens.Select
if (Beatmap?.OnlineBeatmapID != null) if (Beatmap?.OnlineBeatmapID != null)
{ {
var requestedBeatmap = Beatmap; var requestedBeatmap = Beatmap;
var lookup = new GetBeatmapRequest(requestedBeatmap); var lookup = new GetBeatmapRequest(requestedBeatmap);
lookup.Success += res => lookup.Success += res =>
{ {
@ -204,28 +205,34 @@ namespace osu.Game.Screens.Select
var b = res.ToBeatmap(rulesets); var b = res.ToBeatmap(rulesets);
if (requestedBeatmap.BeatmapSet == null)
requestedBeatmap.BeatmapSet = b.BeatmapSet;
else
requestedBeatmap.BeatmapSet.Metrics = b.BeatmapSet.Metrics; requestedBeatmap.BeatmapSet.Metrics = b.BeatmapSet.Metrics;
requestedBeatmap.Metrics = b.Metrics; requestedBeatmap.Metrics = b.Metrics;
Schedule(() => updateMetrics(requestedBeatmap)); Schedule(() => updateMetrics(b.BeatmapSet.Metrics, b.Metrics));
}; };
lookup.Failure += e => Schedule(() => updateMetrics());
lookup.Failure += e => Schedule(() => updateMetrics(Beatmap?.BeatmapSet?.Metrics, Beatmap?.Metrics));
api.Queue(lookup); api.Queue(lookup);
loading.Show(); loading.Show();
return; return;
} }
updateMetrics(); updateMetrics(Beatmap?.BeatmapSet?.Metrics, Beatmap?.Metrics);
} }
private void updateMetrics(BeatmapInfo beatmap = null) private void updateMetrics(BeatmapSetMetrics setMetrics, BeatmapMetrics beatmapMetrics)
{ {
var hasRatings = beatmap?.BeatmapSet?.Metrics?.Ratings?.Any() ?? false; var hasRatings = setMetrics?.Ratings?.Any() ?? false;
var hasRetriesFails = (beatmap?.Metrics?.Retries?.Any() ?? false) && (beatmap.Metrics.Fails?.Any() ?? false); var hasRetriesFails = (beatmapMetrics?.Retries?.Any() ?? false) && (beatmapMetrics.Fails?.Any() ?? false);
if (hasRatings) if (hasRatings)
{ {
ratings.Metrics = beatmap.BeatmapSet.Metrics; ratings.Metrics = setMetrics;
ratingsContainer.FadeIn(transition_duration); ratingsContainer.FadeIn(transition_duration);
} }
else else
@ -236,7 +243,7 @@ namespace osu.Game.Screens.Select
if (hasRetriesFails) if (hasRetriesFails)
{ {
failRetryGraph.Metrics = beatmap.Metrics; failRetryGraph.Metrics = beatmapMetrics;
failRetryContainer.FadeIn(transition_duration); failRetryContainer.FadeIn(transition_duration);
} }
else else