Yesterday after the lazer release there was a bit of a spike in the
number of osu-web requests pointed at `/api/v2/beatmaps/lookup`
specifically. The most likely reason for this is that prior to this
commit, the star rating recalculation was fully performed by the
`BeatmapUpdater.Process()` flow.
This process does full metadata lookups, and while it *will* attempt
to use the local `online.db` metadata cache, it *will* also fall back to
API requests if the local metadata fetch fails. While that means that
the local cache likely saved us from a doomsday scenario here, it *also*
is the case that all of that metadata lookup stuff is *entirely
unnecessary* when wanting to just update star ratings.
Therefore, this splits out only the part relevant to star ratings
as a separate background process, so that it can run completely
locally.
This commit takes half a step back.
Rather than trying to preserve the beatmap style across selections, it
probably makes more sense to always reset it. It is more likely for
playlists to be dominated by unique beatmap sets anyway. Doing this
already heavily simplifies the process.
Given the above, we can rely on the fact that the user beatmap and
ruleset are selected together, and are thus implicitly validated as of
exiting the style selection screen.
It follows that the only extra validation we need to do is to make sure
that the user's ruleset is valid for the playlist item.
This even makes the mod structure, which is a bit of an unfortunate
scenario, somewhat tenable to look at. The user mods only need to be
validated when either the playlist item or the user ruleset changes. If
we ever move the ruleset selection into the style selection screen, then
we can also remove the latter of the validations with similar reason as
the ruleset.