1
0
mirror of https://github.com/ppy/osu.git synced 2024-09-22 06:47:24 +08:00

Merge pull request #24057 from peppy/add-title-search-support

Add missing "title=" search support at song select
This commit is contained in:
Bartłomiej Dach 2023-06-27 21:25:09 +02:00 committed by GitHub
commit d731b84c73
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 40 additions and 1 deletions

View File

@ -33,7 +33,7 @@ namespace osu.Game.Tests.NonVisual.Filtering
Artist = "The Artist", Artist = "The Artist",
ArtistUnicode = "check unicode too", ArtistUnicode = "check unicode too",
Title = "Title goes here", Title = "Title goes here",
TitleUnicode = "Title goes here", TitleUnicode = "TitleUnicode goes here",
Author = { Username = "The Author" }, Author = { Username = "The Author" },
Source = "unit tests", Source = "unit tests",
Tags = "look for tags too", Tags = "look for tags too",
@ -204,6 +204,27 @@ namespace osu.Game.Tests.NonVisual.Filtering
Assert.AreEqual(filtered, carouselItem.Filtered.Value); Assert.AreEqual(filtered, carouselItem.Filtered.Value);
} }
[Test]
[TestCase("", false)]
[TestCase("Goes", false)]
[TestCase("GOES", false)]
[TestCase("goes", false)]
[TestCase("title goes", false)]
[TestCase("title goes AND then something else", true)]
[TestCase("titleunicode", false)]
[TestCase("unknown", true)]
public void TestCriteriaMatchingTitle(string titleName, bool filtered)
{
var exampleBeatmapInfo = getExampleBeatmap();
var criteria = new FilterCriteria
{
Title = new FilterCriteria.OptionalTextFilter { SearchTerm = titleName }
};
var carouselItem = new CarouselBeatmap(exampleBeatmapInfo);
carouselItem.Filter(criteria);
Assert.AreEqual(filtered, carouselItem.Filtered.Value);
}
[Test] [Test]
[TestCase("", false)] [TestCase("", false)]
[TestCase("The", false)] [TestCase("The", false)]

View File

@ -251,6 +251,18 @@ namespace osu.Game.Tests.NonVisual.Filtering
Assert.AreEqual("my_fav", filterCriteria.Creator.SearchTerm); Assert.AreEqual("my_fav", filterCriteria.Creator.SearchTerm);
} }
[Test]
public void TestApplyTitleQueries()
{
const string query = "find me songs with title=\"a certain title\" 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("a certain title", filterCriteria.Title.SearchTerm);
Assert.That(filterCriteria.Title.Exact, Is.True);
}
[Test] [Test]
public void TestApplyArtistQueries() public void TestApplyArtistQueries()
{ {

View File

@ -57,6 +57,8 @@ namespace osu.Game.Screens.Select.Carousel
match &= !criteria.Creator.HasFilter || criteria.Creator.Matches(BeatmapInfo.Metadata.Author.Username); match &= !criteria.Creator.HasFilter || criteria.Creator.Matches(BeatmapInfo.Metadata.Author.Username);
match &= !criteria.Artist.HasFilter || criteria.Artist.Matches(BeatmapInfo.Metadata.Artist) || match &= !criteria.Artist.HasFilter || criteria.Artist.Matches(BeatmapInfo.Metadata.Artist) ||
criteria.Artist.Matches(BeatmapInfo.Metadata.ArtistUnicode); criteria.Artist.Matches(BeatmapInfo.Metadata.ArtistUnicode);
match &= !criteria.Title.HasFilter || criteria.Title.Matches(BeatmapInfo.Metadata.Title) ||
criteria.Title.Matches(BeatmapInfo.Metadata.TitleUnicode);
match &= !criteria.UserStarDifficulty.HasFilter || criteria.UserStarDifficulty.IsInRange(BeatmapInfo.StarRating); match &= !criteria.UserStarDifficulty.HasFilter || criteria.UserStarDifficulty.IsInRange(BeatmapInfo.StarRating);

View File

@ -31,6 +31,7 @@ namespace osu.Game.Screens.Select
public OptionalRange<BeatmapOnlineStatus> OnlineStatus; public OptionalRange<BeatmapOnlineStatus> OnlineStatus;
public OptionalTextFilter Creator; public OptionalTextFilter Creator;
public OptionalTextFilter Artist; public OptionalTextFilter Artist;
public OptionalTextFilter Title;
public OptionalRange<double> UserStarDifficulty = new OptionalRange<double> public OptionalRange<double> UserStarDifficulty = new OptionalRange<double>
{ {

View File

@ -73,6 +73,9 @@ namespace osu.Game.Screens.Select
case "artist": case "artist":
return TryUpdateCriteriaText(ref criteria.Artist, op, value); return TryUpdateCriteriaText(ref criteria.Artist, op, value);
case "title":
return TryUpdateCriteriaText(ref criteria.Title, op, value);
default: default:
return criteria.RulesetCriteria?.TryParseCustomKeywordCriteria(key, op, value) ?? false; return criteria.RulesetCriteria?.TryParseCustomKeywordCriteria(key, op, value) ?? false;
} }