As `APIUser` implements `IEquatable`, attempting to replace an `APIUser`
with another `APIUser` with the same online ID has no effect on the user
profile overlay. This is a significant hurdle in implementing support
for viewing the profile for different rulesets, as in that case the
profile is basically reloaded for the same user, but slightly different
data.
To facilitate this, wrap `APIUser` in a new `UserProfile` class. This
will mean that the equality rules can be changed locally to the user
profile overlay without impacting other components that depend on the
`APIUser` equality rules. The ruleset that the user profile is being
displayed with will eventually be added to `UserProfile`, too.
Feels like it's easier to understand this way. The difference of the
maximum scoring values for the entire beatmap and the max values for the
part of the beatmap that has already been played represents the act of
filling the rest of the unjudged objects with maximum results.
Closes#21920.
Weirdly enough this was semeingly fixed once before in ancient times in
3891f467a3, but then unfixed again in
566e09083f. The second change is no longer
needed since the toolbar became opaque in #9447.
- It was being glued in an ugly way that would have prevented sanely
localising it.
- Even on Linux, the filesystem (whichever one the user has chosen out
of the multitude available) still needs to support hard links for them
to have a chance of working.
This is more of a safety item. To avoid potential duplicate key in
dictionary errors (and also avoid being slightly memory-leaky), allow
`SoloStatisticsWatcher` consumers to dispose of the subscriptions they
take out.
If score submission fails, the score will not receive a correct online
ID from web, but will still be passed on to the solo statistics watcher
on the results screen. This could lead to the watcher subscribing to
changes with score ID equal to the default of -1. If this happened more
than once, that would cause a crash due to duplicate keys in the
`callbacks` dictionary.
Closes#21837.