Before attempting to fix issues with invalid selections reaching
gameplay, I needed to do a pass of the song select class as selection
logic was already more complex than I'd hope.
All operations now go through a single flow (`SelectAndRun`) when
leaving the song select screen in a "success" state.
Closes https://github.com/ppy/osu/issues/33336.
I was worried that doing that was going to cause terminal breakage but
in testing it does not appear to so I'm just going to do this and call
it a day.
I considered having this just be a straight guard followed by an
early-return, but if that guard ever actually gets hit, things are going
to be severely broken all over, and un-breaking them at that point will
be very annoying, so just going to cross fingers and hope this can be an
assertion forevermore instead.
This is a minimal implementation in order to keep moving forward.
For simplicity I've copied over the old implementation verbatim. Note
that this is beatmap*set* based randomisation, which means that when
panels are split up by difficulty, it is still randomising by set (with
the difficulty choice being left up to the user recommendation system).
I think this is what we want, but if it isn't, any changes can come
later.
This changes the flow of actions (yet again.. sorry) to standardise what
is shown on the beatmap options button in the footer and the context
menus.
This is something I wanted from the start – for devices where right
click is not available, it's always preferable to have a second method
of accessing actions which isn't the context menu.
Collection actions are missing for now, as they will come in a second
pass which includes tidying things up further.
Fix formatting
Duplicate menu items between implementations