As spotted in https://github.com/ppy/osu/pull/33191/checks?check_run_id=42460062656
Seems like just a bog-standard race. Could be reproduced via
diff --git a/osu.Game/Screens/Ranking/SoloResultsScreen.cs b/osu.Game/Screens/Ranking/SoloResultsScreen.cs
index d11e7db178..1a594fd21b 100644
--- a/osu.Game/Screens/Ranking/SoloResultsScreen.cs
+++ b/osu.Game/Screens/Ranking/SoloResultsScreen.cs
@@ -45,6 +45,8 @@ protected override async Task<ScoreInfo[]> FetchScores()
if (Score.BeatmapInfo!.OnlineID <= 0 || Score.BeatmapInfo.Status <= BeatmapOnlineStatus.Pending)
return [];
+ await Task.Delay(5000).ConfigureAwait(false);
+
var criteria = new LeaderboardCriteria(
Score.BeatmapInfo!,
Score.Ruleset,
Audio offset is integer based in configuration, so let's make sure not
to show that there's an applicable offset when the value difference is
too low.
I've also fixed rounding to match expectations (`AudioOffset` is
precision limited to integer), and handled the case where a user adjusts
the slider but also has a suggested offset – previously it would not
enable the button after slider adjustments but now it will work as
expected.
Addresses
https://github.com/ppy/osu/discussions/32568#discussioncomment-12610577.
No changes in criteria (yet?), just allowing locally imported plays to
count the same way as full beatmap completion does.
The test scene is a bit rough / semi-manual but dealing with score
imports is a bit of a pain in general. The way to semi-manually test
with the test scene is to import a subset of scores, then recreate the
statistics panel, and observe behaviour. I'm not sure it's worth it to
be putting subscriptions in there, so the full recreation of the panel
is necessary.
This also throws away the logic of updating
`API.LocalUser.Value.Statistics`. Components should rely on
`LocalUserStatisticsProvider` instead for proper behaviour and ability
to update on statistics updates.