Takes changes in https://github.com/ppy/osu/pull/34233 and removes *all*
of the complexity.
Supersedes and closes#34233.
Contains same caveat that we can only display one beatmap once in the
carousel; this will be addressed separately.
Probably closes https://github.com/ppy/osu/issues/34449. I say probably
because I couldn't break this myself without commenting out chunks of
code that apply the metadata from the id3 tags, and the reporter of that
issue did not provide mp3s to test with or a clear reproduction
scenario. But chances are this is going to fix the problem anyhow.
This is borderline pedantic and mostly irrelevant but I think it makes
some sense for a bit of extra safety. It definitely does not fix any
bugs (that I'm aware of).
Closes https://github.com/ppy/osu/issues/34445.
The primary issue is that song select is the only one that supports
non-score sort mode, and therefore if any other component changes the
sort mode in a way opaque to song select to score, then song select will
lose the sort mode because it's using the global leaderboard manager's
state which will contain scores sorted by total.
Notably, the bug this is fixing requires specific circumstances. For
instance, it is not enough to just *start gameplay* for the bug to
manifest, because starting gameplay causes a working beatmap refetch:
https://github.com/ppy/osu/blob/4b73afd1957a9161e2956fc4191c8114d9958372/osu.Game/Screens/SelectV2/SongSelect.cs#L456-L457
which will trigger a *delayed schedule refetch* of the scores:
https://github.com/ppy/osu/blob/d2d3d14f1572ff8fc68fd01ea43c2ef68b5882fa/osu.Game/Screens/SelectV2/BeatmapLeaderboardWedge.cs#L235-L253
and because the refetch is thusly delayed, there's a very high chance it
*will not run before the screen is resumed* because the wedge will not
have its scheduler run until that point in time.
This conundrum is also because there is no test coverage for this,
because the above makes test coverage setup rather annoying.
This is due to the global betamap becoming `Default` momentarily. Rather
than react to this by clearing the display in a single frame, let's
transition so it's mostly hidden.
This change refactors `GetAdjustedDisplayDifficulty()` and
`GetBeatmapAttributesToDisplay()` in two ways:
- Both methods now accept `IBeatmapInfo` instead of
`IBeatmapDifficultyInfo`. This is done in order to make mania key
count display to work, wherein `IBeatmapDifficultyInfo` is not enough
to calculate the final key count.
- `GetAdjustedDisplayDifficulty()` now applies all
`IApplicableToDifficulty` mods itself. I did this after noticing that
every real consumer of this method had to do that themselves for very
little reason.