1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-16 06:52:55 +08:00

Fix beatmap selection being lost during update process

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.
This commit is contained in:
Dean Herbert 2024-10-22 17:53:34 +09:00
parent 9258916fa8
commit e1a950e2d3
No known key found for this signature in database

View File

@ -322,6 +322,11 @@ namespace osu.Game.Screens.Select
{
try
{
// To handle the beatmap update flow, attempt to track selection changes across delete-insert transactions.
// When an update occurs, the previous beatmap set is either soft or hard deleted.
// Check if the current selection was potentially deleted by re-querying its validity.
bool selectedSetMarkedDeleted = SelectedBeatmapSet != null && fetchFromID(SelectedBeatmapSet.ID)?.DeletePending != false;
foreach (var set in setsRequiringRemoval) removeBeatmapSet(set.ID);
foreach (var set in setsRequiringUpdate) updateBeatmapSet(set);
@ -331,11 +336,6 @@ namespace osu.Game.Screens.Select
// If SelectedBeatmapInfo is non-null, the set should also be non-null.
Debug.Assert(SelectedBeatmapSet != null);
// To handle the beatmap update flow, attempt to track selection changes across delete-insert transactions.
// When an update occurs, the previous beatmap set is either soft or hard deleted.
// Check if the current selection was potentially deleted by re-querying its validity.
bool selectedSetMarkedDeleted = fetchFromID(SelectedBeatmapSet.ID)?.DeletePending != false;
if (selectedSetMarkedDeleted && setsRequiringUpdate.Any())
{
// If it is no longer valid, make the bold assumption that an updated version will be available in the modified/inserted indices.