public async Task <ActionResult> Get() { DogStatsd.Increment("beatmap.searches"); if (!GlobalConfig.EnableSearch) { return(Unauthorized("Searches are currently Disabled!")); } var raw = Request.Query.ContainsKey("raw"); var ruri = Request.Query.ContainsKey("ruri"); TryGetFromQuery(new[] { "query", "q" }, string.Empty, out var query); TryGetFromQuery(new[] { "amount", "a" }, 100, out var amount); TryGetFromQuery(new[] { "offset", "o" }, 0, out var offset); TryGetFromQuery(new[] { "page", "p" }, 0, out var page); TryGetFromQuery(new[] { "mode", "m" }, (int)PlayMode.All, out var mode); TryGetFromQuery(new[] { "status", "r" }, null, out int?r); if (ruri && r.HasValue) { r = r switch { 4 => (int)BeatmapSetOnlineStatus.None, 0 => (int)BeatmapSetOnlineStatus.Ranked, 7 => (int)BeatmapSetOnlineStatus.Ranked, 8 => (int)BeatmapSetOnlineStatus.Loved, 3 => (int)BeatmapSetOnlineStatus.Qualified, 2 => (int)BeatmapSetOnlineStatus.Pending, 5 => (int)BeatmapSetOnlineStatus.Graveyard, _ => (int)BeatmapSetOnlineStatus.Graveyard, }; } BeatmapSetOnlineStatus?status = null; if (r != null) { status = (BeatmapSetOnlineStatus)r.Value; } offset += 100 * page; if (query.ToLower().Equals("newest") || query.ToLower().Equals("top rated") || // TODO: Implementing this query.ToLower().Equals("most played")) // and this { query = ""; } var ha = "pisstaube:cache:search" + query + amount + offset + status + mode + page + raw; var ca = await _cache.GetStringAsync(ha); if (ca != null) { return(Ok(ca)); } var result = await _searchEngine.Search(query, amount, offset, status, (PlayMode)mode); var beatmapSets = result as BeatmapSet[] ?? result.ToArray(); if (beatmapSets.Length == 0) { result = null; // Cheesegull logic ^^, } if (!raw) { ca = JsonUtil.Serialize(beatmapSets); } else { if (result == null) { ca = "-1\nNo Beatmaps were found!"; goto Return; } ca = beatmapSets.Length >= 100 ? "101" : beatmapSets.Length + "\n"; foreach (var set in beatmapSets) { ca += set.ToDirect(); } } Return: await _cache.SetStringAsync(ha, ca, new DistributedCacheEntryOptions { AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(10) }); return(Ok(ca)); }
public ActionResult <string> Get() { DogStatsd.Increment("beatmap.searches"); if (!GlobalConfig.EnableSearch) { return(Unauthorized("Searches are currently Disabled!")); } var raw = Request.Query.ContainsKey("raw"); var ruri = Request.Query.ContainsKey("ruri"); GetTryFromQuery(new[] { "query", "q" }, string.Empty, out var query); GetTryFromQuery(new[] { "amount", "a" }, 100, out var amount); GetTryFromQuery(new[] { "offset", "o" }, 0, out var offset); GetTryFromQuery(new[] { "page", "p" }, 0, out var page); GetTryFromQuery(new[] { "mode", "m" }, (int)PlayMode.All, out var mode); GetTryFromQuery(new[] { "status", "r" }, null, out int?r); if (ruri == true && r.HasValue) { r = r switch { 4 => (int)BeatmapSetOnlineStatus.None, 0 => (int)BeatmapSetOnlineStatus.Ranked, 7 => (int)BeatmapSetOnlineStatus.Ranked, 8 => (int)BeatmapSetOnlineStatus.Loved, 3 => (int)BeatmapSetOnlineStatus.Qualified, 2 => (int)BeatmapSetOnlineStatus.Pending, 5 => (int)BeatmapSetOnlineStatus.Graveyard, }; } BeatmapSetOnlineStatus?status = null; if (r != null) { status = (BeatmapSetOnlineStatus)r.Value; } offset += 100 * page; MapSearchType searchType = MapSearchType.Normal; if (query.ToLower().Equals("newest")) { searchType = MapSearchType.Newest; } else if (query.ToLower().Equals("most played")) { searchType = MapSearchType.TopPlays; } var ha = query + amount + offset + status + mode + page + raw; if (_cache.TryGet(ha, out string ca)) { return(ca); } var result = _searchEngine.Search(query, amount, offset, status, (PlayMode)mode, searchType); var beatmapSets = result as BeatmapSet[] ?? result.ToArray(); if (beatmapSets.Length == 0) { result = null; // Cheesegull logic ^^, } if (!raw) { ca = JsonUtil.Serialize(beatmapSets); } else { if (result == null) { ca = "-1\nNo Beatmaps were found!"; goto Return; } ca = string.Empty; ca += beatmapSets.Count() >= 100 ? "101" : beatmapSets.Count().ToString(); ca += "\n"; foreach (var set in beatmapSets) { ca += set.ToDirect(); } } Return: _cache.Set(ha, ca, TimeSpan.FromMinutes(10)); return(ca); }