// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using osu.Framework.IO.Network; using osu.Game.Extensions; using osu.Game.Overlays; using osu.Game.Overlays.BeatmapListing; using osu.Game.Rulesets; namespace osu.Game.Online.API.Requests { public class SearchBeatmapSetsRequest : APIRequest { public SearchCategory SearchCategory { get; } public SortCriteria SortCriteria { get; } public SortDirection SortDirection { get; } public SearchGenre Genre { get; } public SearchLanguage Language { get; } private readonly string query; private readonly RulesetInfo ruleset; private readonly Cursor cursor; private string directionString => SortDirection == SortDirection.Descending ? @"desc" : @"asc"; public SearchBeatmapSetsRequest( string query, RulesetInfo ruleset, Cursor cursor = null, SearchCategory searchCategory = SearchCategory.Any, SortCriteria sortCriteria = SortCriteria.Ranked, SortDirection sortDirection = SortDirection.Descending, SearchGenre genre = SearchGenre.Any, SearchLanguage language = SearchLanguage.Any) { this.query = string.IsNullOrEmpty(query) ? string.Empty : System.Uri.EscapeDataString(query); this.ruleset = ruleset; this.cursor = cursor; SearchCategory = searchCategory; SortCriteria = sortCriteria; SortDirection = sortDirection; Genre = genre; Language = language; } protected override WebRequest CreateWebRequest() { var req = base.CreateWebRequest(); req.AddParameter("q", query); if (ruleset.ID.HasValue) req.AddParameter("m", ruleset.ID.Value.ToString()); req.AddParameter("s", SearchCategory.ToString().ToLowerInvariant()); if (Genre != SearchGenre.Any) req.AddParameter("g", ((int)Genre).ToString()); if (Language != SearchLanguage.Any) req.AddParameter("l", ((int)Language).ToString()); req.AddParameter("sort", $"{SortCriteria.ToString().ToLowerInvariant()}_{directionString}"); req.AddCursor(cursor); return req; } protected override string Target => @"beatmapsets/search"; } }