Skip to content

Commit

Permalink
Merge pull request #20066 from peppy/fix-filtering-with-date-modes
Browse files Browse the repository at this point in the history
Fix "date submitted" and "date ranked" filtering not working as intended
smoogipoo authored Sep 1, 2022

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
2 parents db9970b + 1524623 commit 5ca6395
Showing 2 changed files with 42 additions and 4 deletions.
37 changes: 37 additions & 0 deletions osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs
Original file line number Diff line number Diff line change
@@ -494,6 +494,43 @@ public void TestSelectionEnteringFromEmptyRuleset()
AddAssert("Something is selected", () => carousel.SelectedBeatmapInfo != null);
}

[Test]
public void TestSortingDateSubmitted()
{
var sets = new List<BeatmapSetInfo>();
const string zzz_string = "zzzzz";

AddStep("Populuate beatmap sets", () =>
{
sets.Clear();

for (int i = 0; i < 20; i++)
{
var set = TestResources.CreateTestBeatmapSetInfo(5);

if (i >= 2 && i < 10)
set.DateSubmitted = DateTimeOffset.Now.AddMinutes(i);
if (i < 5)
set.Beatmaps.ForEach(b => b.Metadata.Artist = zzz_string);

sets.Add(set);
}
});

loadBeatmaps(sets);

AddStep("Sort by date submitted", () => carousel.Filter(new FilterCriteria { Sort = SortMode.DateSubmitted }, false));
checkVisibleItemCount(diff: false, count: 8);
checkVisibleItemCount(diff: true, count: 5);
AddStep("Sort by date submitted and string", () => carousel.Filter(new FilterCriteria
{
Sort = SortMode.DateSubmitted,
SearchText = zzz_string
}, false));
checkVisibleItemCount(diff: false, count: 3);
checkVisibleItemCount(diff: true, count: 5);
}

[Test]
public void TestSorting()
{
9 changes: 5 additions & 4 deletions osu.Game/Screens/Select/Carousel/CarouselBeatmapSet.cs
Original file line number Diff line number Diff line change
@@ -129,12 +129,13 @@ private int compareUsingAggregateMax(CarouselBeatmapSet other, Func<BeatmapInfo,
public override void Filter(FilterCriteria criteria)
{
base.Filter(criteria);
bool match = Items.All(i => i.Filtered.Value);

match &= criteria.Sort != SortMode.DateRanked || BeatmapSet?.DateRanked != null;
match &= criteria.Sort != SortMode.DateSubmitted || BeatmapSet?.DateSubmitted != null;
bool filtered = Items.All(i => i.Filtered.Value);

Filtered.Value = match;
filtered |= criteria.Sort == SortMode.DateRanked && BeatmapSet?.DateRanked == null;
filtered |= criteria.Sort == SortMode.DateSubmitted && BeatmapSet?.DateSubmitted == null;

Filtered.Value = filtered;
}

public override string ToString() => BeatmapSet.ToString();

0 comments on commit 5ca6395

Please sign in to comment.