diff --git a/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs b/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs index e435554b03..c52cd61c42 100644 --- a/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs +++ b/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs @@ -63,7 +63,7 @@ namespace osu.Game.Screens.Select.Leaderboards } } - private readonly IBindable fetchedScores = new Bindable(); + private readonly Bindable fetchedScores = new Bindable(); [Resolved] private IBindable ruleset { get; set; } = null!; @@ -86,17 +86,7 @@ namespace osu.Game.Screens.Select.Leaderboards if (filterMods) RefetchScores(); }; - fetchedScores.BindTo(leaderboardManager.Scores); - } - - protected override void LoadComplete() - { - base.LoadComplete(); - fetchedScores.BindValueChanged(_ => - { - if (fetchedScores.Value != null) - SetScores(fetchedScores.Value.TopScores, fetchedScores.Value.UserScore); - }); + ((IBindable)fetchedScores).BindTo(leaderboardManager.Scores); } protected override bool IsOnlineScope => Scope != BeatmapLeaderboardScope.Local; @@ -147,7 +137,17 @@ namespace osu.Game.Screens.Select.Leaderboards .ContinueWith(t => { if (t.Exception != null && !t.IsCanceled) + { Schedule(() => SetErrorState(LeaderboardState.NetworkFailure)); + return; + } + + fetchedScores.UnbindEvents(); + fetchedScores.BindValueChanged(scores => + { + if (scores.NewValue != null) + Schedule(() => SetScores(scores.NewValue.TopScores, scores.NewValue.UserScore)); + }, true); }, cancellationToken); return null;