Skip to content

Commit 4d66762

Browse files
authored
Merge pull request #35471 from bdach/single-result-reselected
Fix single filtered selection not being reselected after being filtered away
2 parents be9b99f + e61ae7a commit 4d66762

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed

osu.Game.Tests/Visual/SongSelectV2/TestSceneSongSelectFiltering.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,33 @@ public void TestFilterSingleResult_RetainsSelectedDifficulty()
8888
AddAssert("selection unchanged", () => Beatmap.Value.BeatmapInfo, () => Is.EqualTo(Beatmaps.GetAllUsableBeatmapSets().First().Beatmaps.Last()));
8989
}
9090

91+
[Test]
92+
public void TestFilterSingleResult_ReselectedAfterRulesetSwitches()
93+
{
94+
LoadSongSelect();
95+
96+
ImportBeatmapForRuleset(0);
97+
ImportBeatmapForRuleset(0);
98+
99+
AddStep("disable converts", () => Config.SetValue(OsuSetting.ShowConvertedBeatmaps, false));
100+
AddStep("set filter text", () => filterTextBox.Current.Value = $"\"{Beatmaps.GetAllUsableBeatmapSets().Last().Metadata.Title}\"");
101+
102+
AddWaitStep("wait for debounce", 5);
103+
AddUntilStep("wait for filter", () => !Carousel.IsFiltering);
104+
AddUntilStep("selection is second beatmap set", () => Beatmap.Value.BeatmapInfo, () => Is.EqualTo(Beatmaps.GetAllUsableBeatmapSets().Last().Beatmaps.First()));
105+
106+
AddStep("select last difficulty", () => Beatmap.Value = Beatmaps.GetWorkingBeatmap(Beatmap.Value.BeatmapSetInfo.Beatmaps.Last()));
107+
AddUntilStep("selection is last difficulty of second beatmap set", () => Beatmap.Value.BeatmapInfo, () => Is.EqualTo(Beatmaps.GetAllUsableBeatmapSets().Last().Beatmaps.Last()));
108+
109+
ChangeRuleset(1);
110+
AddUntilStep("wait for filter", () => !Carousel.IsFiltering);
111+
AddUntilStep("selection is default", () => Beatmap.IsDefault);
112+
113+
ChangeRuleset(0);
114+
AddUntilStep("wait for filter", () => !Carousel.IsFiltering);
115+
AddUntilStep("selection is last difficulty of second beatmap set", () => Beatmap.Value.BeatmapInfo, () => Is.EqualTo(Beatmaps.GetAllUsableBeatmapSets().Last().Beatmaps.Last()));
116+
}
117+
91118
[Test]
92119
public void TestFilterOnResumeAfterChange()
93120
{

osu.Game/Screens/SelectV2/BeatmapCarousel.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -561,8 +561,19 @@ private void attemptSelectSingleFilteredResult()
561561

562562
var beatmaps = items.Select(i => i.Model).OfType<GroupedBeatmap>();
563563

564-
if (beatmaps.Any(b => b.Equals(CurrentSelection as GroupedBeatmap)))
564+
// do not request recommended selection if the user already had selected a difficulty within the single filtered beatmap set,
565+
// as it could change the difficulty that will be selected
566+
var preexistingSelection = beatmaps.FirstOrDefault(b => b.Equals(CurrentSelection as GroupedBeatmap));
567+
568+
if (preexistingSelection != null)
569+
{
570+
// the selection might not have an item associated with it, if it was fully filtered away previously
571+
// in this case, request to reselect it
572+
if (CurrentSelectionItem == null)
573+
RequestSelection(preexistingSelection);
574+
565575
return;
576+
}
566577

567578
RequestRecommendedSelection(beatmaps);
568579
}

0 commit comments

Comments
 (0)