Reported at https://osu.ppy.sh/community/forums/topics/2015478?n=1.
Would you believe it that this button that has been there for literal
years never did anything?
Implemented at a per-beatmap level. Also additionally added to context
menu (at @peppy's suggestion), and also copy reworded from "Delete from
unplayed" to "Mark as played" because double negation hurt my tiny
brain.
The intention here is to make things more testable going forward.
Specifically, to remove the "back-door" entrance into `BeatmapCarousel`
where `BeatmapSets` can be set by tests and bypas/block realm retrieval.
Not sure why I left this around during the refactor. This is 100%
handled by the `DetachedBeatmapStore`.
Removing this subscription reduces overheads by a huge amount for users
with large beatmap databases. My hypothesis is that subscriptions are
more expensive based on **the number of results matching**. This one
matches almost every beatmap so removing it is a large win.
I made these changes while working on
https://github.com/ppy/osu/pull/30579. Basically, it's hard to fix the
ranks not loading while underneath the footer, and the transparency both
looks bad, and is going away in the redesign.
I've chosen values here that are moving *in the direction* of the new
design without overhauling everything.
- I know that there's still some transparency. I did this because it
helps keep all current elements / colours contrasting without too much
effort.
- I completely removed the transparency adjustments on the beatmap
panels. This always looked bad due to being applied per-layer, and I
don't think it added much.
Fixes the root client-side failure causing
https://github.com/ppy/osu/issues/30415.
Thread of breakage is as follows:
1. `SongSelect` loads the carousel.
At this point, the ruleset is what the ambient ruleset would have
been at the time of pushing song select, so most likely it will
match the current ruleset.
Notably, the carousel is loaded with `AllowSelection == false`.
2. `OnlinePlaySongSelect` sets the ruleset to the one taken from
the relevant playlist item in `LoadComplete()`.
3. At any point between the previous and the next step, the user
changes the ruleset manually.
4. `SongSelect.carouselBeatmapsLoaded()` is ran, which calls
`transferRulesetValue()`, which calls `FilterControl.FilterChanged`.
But at this stage `Carousel.AllowSelection` is still false, so
the filter is not executed, but `pendingFilterApplication` is set
instead.
Unfortunately, the pending filter never gets applied after that.
The only place that checks that flag is `OnEntering()`, which at
this point has already ran.
To fix, move the `pendingFilterApplication` check to `Update()`, which
seems like the most obvious and safe solution.
Broke due to something changing in the way we handle realm things in the
carousel. The deselection happens in `updateBeatmapSet` so we need to
store / check the original selection before this occurs.
Doesn't seem this had test coverage? Probably implies that the overhead
of adding a test was very large, so maybe best to leave it that way.
Closes https://github.com/ppy/osu/issues/30163.
If I'm to be blunt, the decoupled stuff in song select makes my head
spin. I spent a solid 20 minutes thinking how I was going to fix this
one but then finally realised that generally most of the cause there
was the fact that `AdvancedStats` was seeing the new rulesets *before*
the "ensure global selected mods are valid for current ruleset" logic,
and so decided to just _delay_ that until the decoupled transfer
thingamajig happens.
I was honestly considering combining `BeatmapInfo`, `Ruleset`, and
`Mods` into one property on `AdvancedStats`. I figured I'd rather not
push my luck and try the baseline version first, but I honestly think
that direction is going to be required at some point to properly corral
all of the decoupled madness taking place in song select.