Skip to content

Commit 0d1788e

Browse files
authored
Merge pull request #34209 from smoogipoo/playlist-results-no-submission-no-indexing
Make online play results not request leaderboard on failed submission
2 parents f5a97e9 + 9cc5fab commit 0d1788e

File tree

2 files changed

+40
-2
lines changed

2 files changed

+40
-2
lines changed

osu.Game.Tests/Visual/Playlists/TestScenePlaylistsResultsScreen.cs

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,29 @@ public void TestFetchingAllTheWayToFirstNeverDisplaysNegativePosition()
274274
AddUntilStep("all panels have non-negative position", () => this.ChildrenOfType<ScorePanel>().All(p => p.ScorePosition.Value > 0));
275275
}
276276

277+
[Test]
278+
public void TestPresentInvalidOnlineScore()
279+
{
280+
AddStep("set up invalid user score", () =>
281+
{
282+
userScore.OnlineID = -1;
283+
userScore.TotalScore = 0;
284+
});
285+
286+
AddStep("bind user score info handler", () => bindHandler(userScore: userScore));
287+
288+
createResultsWithScore(() => userScore);
289+
290+
AddUntilStep("wait for user score to be displayed", () => resultsScreen.ChildrenOfType<ScorePanelList>().Single().GetScorePanels().Any());
291+
AddWaitStep("wait for any more potential scores", 5);
292+
AddAssert("only 1 score visible", () => resultsScreen.ChildrenOfType<ScorePanelList>().Single().GetScorePanels().Count(), () => Is.EqualTo(1));
293+
294+
AddUntilStep("left loading spinner hidden", () =>
295+
resultsScreen.ChildrenOfType<LoadingSpinner>().Single(l => l.Anchor == Anchor.CentreLeft).State.Value == Visibility.Hidden);
296+
AddUntilStep("right loading spinner hidden", () =>
297+
resultsScreen.ChildrenOfType<LoadingSpinner>().Single(l => l.Anchor == Anchor.CentreRight).State.Value == Visibility.Hidden);
298+
}
299+
277300
private void createResultsWithScore(Func<ScoreInfo> getScore)
278301
{
279302
AddStep("load results", () =>
@@ -359,15 +382,15 @@ private void bindHandler(bool delayed = false, ScoreInfo? userScore = null, bool
359382
switch (request)
360383
{
361384
case ShowPlaylistScoreRequest s:
362-
if (userScore == null)
385+
if (userScore == null || userScore.OnlineID == -1)
363386
triggerFail(s);
364387
else
365388
triggerSuccess(s, () => createUserResponse(userScore));
366389

367390
break;
368391

369392
case ShowPlaylistUserScoreRequest u:
370-
if (userScore == null)
393+
if (userScore == null || userScore.OnlineID == -1)
371394
triggerFail(u);
372395
else
373396
triggerSuccess(u, () => createUserResponse(userScore));

osu.Game/Screens/OnlinePlay/Playlists/PlaylistItemScoreResultsScreen.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// See the LICENCE file in the repository root for full licence text.
33

44
using System.Linq;
5+
using System.Threading.Tasks;
56
using osu.Game.Online.API;
67
using osu.Game.Online.Rooms;
78
using osu.Game.Scoring;
@@ -27,6 +28,20 @@ public PlaylistItemScoreResultsScreen(long scoreId, long roomId, PlaylistItem pl
2728
this.scoreId = scoreId;
2829
}
2930

31+
protected override Task<ScoreInfo[]> FetchScores()
32+
{
33+
// Don't attempt to index scores if the given score has an invalid online ID.
34+
// This can happen if the score failed to submit but is otherwise in a presentable state.
35+
return scoreId <= 0 ? Task.FromResult<ScoreInfo[]>([]) : base.FetchScores();
36+
}
37+
38+
protected override Task<ScoreInfo[]> FetchNextPage(int direction)
39+
{
40+
// Don't attempt to index scores if the given score has an invalid online ID.
41+
// This can happen if the score failed to submit but is otherwise in a presentable state.
42+
return scoreId <= 0 ? Task.FromResult<ScoreInfo[]>([]) : base.FetchNextPage(direction);
43+
}
44+
3045
protected override APIRequest<MultiplayerScore> CreateScoreRequest() => new ShowPlaylistScoreRequest(RoomId, PlaylistItem.ID, scoreId);
3146

3247
protected override void OnScoresAdded(ScoreInfo[] scores)

0 commit comments

Comments
 (0)