diff --git a/osu.Game/Screens/Select/BeatmapDetails.cs b/osu.Game/Screens/Select/BeatmapDetails.cs index d7c509d979..6eaed67534 100644 --- a/osu.Game/Screens/Select/BeatmapDetails.cs +++ b/osu.Game/Screens/Select/BeatmapDetails.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2017 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; using OpenTK; using OpenTK.Graphics; using osu.Framework.Allocation; @@ -187,9 +188,7 @@ namespace osu.Game.Screens.Select ratingsContainer.FadeIn(transition_duration); advanced.Beatmap = Beatmap; - description.Text = Beatmap.Version; - source.Text = Beatmap.Metadata.Source; - tags.Text = Beatmap.Metadata.Tags; + loadDetailsAsync(Beatmap); var requestedBeatmap = Beatmap; if (requestedBeatmap.Metrics == null) @@ -213,6 +212,19 @@ namespace osu.Game.Screens.Select displayMetrics(requestedBeatmap.Metrics, false); } + private void loadDetailsAsync(BeatmapInfo beatmap) + { + if (description == null || source == null || tags == null) + throw new InvalidOperationException($@"Requires all {nameof(MetadataSection)} elements to be non-null."); + + Schedule(() => + { + description.Text = Beatmap?.Version; + source.Text = Beatmap?.Metadata?.Source; + tags.Text = Beatmap?.Metadata?.Tags; + }); + } + private void displayMetrics(BeatmapMetrics metrics, bool failOnMissing = true) { var hasRatings = metrics?.Ratings?.Any() ?? false; @@ -258,9 +270,7 @@ namespace osu.Game.Screens.Select private void clearStats() { - description.Text = null; - source.Text = null; - tags.Text = null; + loadDetailsAsync(null); advanced.Beatmap = new BeatmapInfo { StarDifficulty = 0,