Skip to content

Commit

Permalink
Merge pull request ppy#30684 from Joehuu/source-filter
Browse files Browse the repository at this point in the history
Add missing source query filter in song select
  • Loading branch information
smoogipoo authored Nov 18, 2024
2 parents 5622da8 + 465cc71 commit 5276f77
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 0 deletions.
2 changes: 2 additions & 0 deletions osu.Game.Tests/NonVisual/Filtering/FilterMatchingTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,7 @@ public void TestCriteriaMatchingRangeMax(bool inclusive)
[TestCase("tags too", false)]
[TestCase("version", false)]
[TestCase("an auteur", true)]
[TestCase("unit", false)]
public void TestCriteriaMatchingTerms(string terms, bool filtered)
{
var exampleBeatmapInfo = getExampleBeatmap();
Expand Down Expand Up @@ -175,6 +176,7 @@ public void TestCriteriaMatchingTerms(string terms, bool filtered)
[TestCase("\"Artist\"!", true)]
[TestCase("\"The Artist\"!", false)]
[TestCase("\"the artist\"!", false)]
[TestCase("\"unit tests\"!", false)]
[TestCase("\"\\\"", true)] // nasty case, covers properly escaping user input in underlying regex.
public void TestCriteriaMatchingExactTerms(string terms, bool filtered)
{
Expand Down
12 changes: 12 additions & 0 deletions osu.Game.Tests/NonVisual/Filtering/FilterQueryParserTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -501,6 +501,18 @@ public void TestDifficultySearch(string query, int[] expectedBeatmapIndexes)
Assert.That(visibleBeatmaps, Is.EqualTo(expectedBeatmapIndexes));
}

[Test]
public void TestApplySourceQueries()
{
const string query = "find me songs with source=\"unit tests\" please";
var filterCriteria = new FilterCriteria();
FilterQueryParser.ApplyQueries(filterCriteria, query);
Assert.AreEqual("find me songs with please", filterCriteria.SearchText.Trim());
Assert.AreEqual(5, filterCriteria.SearchTerms.Length);
Assert.AreEqual("unit tests", filterCriteria.Source.SearchTerm);
Assert.That(filterCriteria.Source.MatchMode, Is.EqualTo(FilterCriteria.MatchMode.IsolatedPhrase));
}

private class CustomFilterCriteria : IRulesetFilterCriteria
{
public string? CustomValue { get; set; }
Expand Down
1 change: 1 addition & 0 deletions osu.Game/Screens/Select/Carousel/CarouselBeatmap.cs
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ private bool checkMatch(FilterCriteria criteria)
match &= !criteria.Title.HasFilter || criteria.Title.Matches(BeatmapInfo.Metadata.Title) ||
criteria.Title.Matches(BeatmapInfo.Metadata.TitleUnicode);
match &= !criteria.DifficultyName.HasFilter || criteria.DifficultyName.Matches(BeatmapInfo.DifficultyName);
match &= !criteria.Source.HasFilter || criteria.Source.Matches(BeatmapInfo.Metadata.Source);
match &= !criteria.UserStarDifficulty.HasFilter || criteria.UserStarDifficulty.IsInRange(BeatmapInfo.StarRating);

if (!match) return false;
Expand Down
1 change: 1 addition & 0 deletions osu.Game/Screens/Select/FilterCriteria.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ public class FilterCriteria
public OptionalTextFilter Artist;
public OptionalTextFilter Title;
public OptionalTextFilter DifficultyName;
public OptionalTextFilter Source;

public OptionalRange<double> UserStarDifficulty = new OptionalRange<double>
{
Expand Down
3 changes: 3 additions & 0 deletions osu.Game/Screens/Select/FilterQueryParser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,9 @@ private static bool tryParseKeywordCriteria(FilterCriteria criteria, string key,
case "diff":
return TryUpdateCriteriaText(ref criteria.DifficultyName, op, value);

case "source":
return TryUpdateCriteriaText(ref criteria.Source, op, value);

default:
return criteria.RulesetCriteria?.TryParseCustomKeywordCriteria(key, op, value) ?? false;
}
Expand Down

0 comments on commit 5276f77

Please sign in to comment.