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.
Addresses https://github.com/ppy/osu/discussions/33291
This is a half-baked RFC because things are awkward.
For this to work correctly the submission flow has to do an API request,
because one, the local beatmap status has been overwritten with "locally
modified", and secondly, even if it *was* there, there's no guarantee
that it was actually *up to date*.
And if we have to do an API request then there are two choices:
- Hard block on the API request and don't show anything until it
completes which possibly means waiting at a spinner for several
seconds if someone's on bad internet.
- Don't block on the API request --- but then there's no guarantee
what timing the API request completes at, which means that possibly the
user could change the dropdown before the API request completes, and
the API request will overwrite their choice, so to prevent that block
the dropdown until the request completes. This is what this commit
does.
Closes https://github.com/ppy/osu/issues/33393.
This is admittedly a half-assed diff. This was apparently "fixed" once
before, eons ago, in https://github.com/ppy/osu/pull/11032, but I'm not
sure whether it regressed, or where, because I don't want to bisect four
years back. (At that time `ControlPointInfo.ControlPointsChanged`
did not exist yet.)
Also there's the part where changes to control points do not undo or
redo (see https://github.com/ppy/osu/issues/31942), but I'm not touching
that *either*, because if I start touching that, then I will get yelled
at for not reviewing the 2.5k line PR that rewrites the entirety of
change handling in editor instead
(https://github.com/ppy/osu/pull/30314). I will attempt to get through
that mental block sometime within the year. Please do not rush me.
The cheap cop-out argument is that hooking this up to `ControlPointInfo`
specifically is probably "more efficient" anyway.