1
0
mirror of https://github.com/ppy/osu.git synced 2025-03-24 19:17:20 +08:00

Add ability to filter out currently playing rooms

Addresses https://osu.ppy.sh/community/forums/topics/2013293?n=1.
This commit is contained in:
Bartłomiej Dach 2024-12-11 13:01:11 +09:00
parent 637fe07b31
commit 3352571f2a
No known key found for this signature in database
6 changed files with 42 additions and 13 deletions

View File

@ -12,12 +12,14 @@ namespace osu.Game.Online.Rooms
public class GetRoomsRequest : APIRequest<List<Room>>
{
private readonly RoomModeFilter mode;
private readonly RoomStatusFilter? status;
private readonly string category;
public GetRoomsRequest(RoomModeFilter mode, string category)
public GetRoomsRequest(FilterCriteria filterCriteria)
{
this.mode = mode;
this.category = category;
mode = filterCriteria.Mode;
category = filterCriteria.Category;
status = filterCriteria.Status;
}
protected override WebRequest CreateWebRequest()
@ -25,14 +27,17 @@ namespace osu.Game.Online.Rooms
var req = base.CreateWebRequest();
if (mode != RoomModeFilter.Open)
req.AddParameter("mode", mode.ToString().ToSnakeCase().ToLowerInvariant());
req.AddParameter(@"mode", mode.ToString().ToSnakeCase().ToLowerInvariant());
if (status != null)
req.AddParameter(@"status", status.Value.ToString().ToSnakeCase().ToLowerInvariant());
if (!string.IsNullOrEmpty(category))
req.AddParameter("category", category);
req.AddParameter(@"category", category);
return req;
}
protected override string Target => "rooms";
protected override string Target => @"rooms";
}
}

View File

@ -47,7 +47,7 @@ namespace osu.Game.Screens.OnlinePlay.Components
lastPollRequest?.Cancel();
var req = new GetRoomsRequest(Filter.Value.Mode, Filter.Value.Category);
var req = new GetRoomsRequest(Filter.Value);
req.Success += result =>
{

View File

@ -9,6 +9,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components
{
public string SearchString = string.Empty;
public RoomModeFilter Mode;
public RoomStatusFilter? Status;
public string Category = string.Empty;
public RulesetInfo? Ruleset;
public RoomPermissionsFilter Permissions;

View File

@ -0,0 +1,11 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
namespace osu.Game.Screens.OnlinePlay.Lounge.Components
{
public enum RoomStatusFilter
{
Idle,
Playing,
}
}

View File

@ -83,7 +83,8 @@ namespace osu.Game.Screens.OnlinePlay.Lounge
private LoadingLayer loadingLayer = null!;
private RoomsContainer roomsContainer = null!;
private SearchTextBox searchTextBox = null!;
private Dropdown<RoomModeFilter> statusDropdown = null!;
protected Dropdown<RoomModeFilter> StatusDropdown { get; private set; } = null!;
[BackgroundDependencyLoader(true)]
private void load()
@ -223,20 +224,20 @@ namespace osu.Game.Screens.OnlinePlay.Lounge
{
SearchString = searchTextBox.Current.Value,
Ruleset = ruleset.Value,
Mode = statusDropdown.Current.Value
Mode = StatusDropdown.Current.Value
};
protected virtual IEnumerable<Drawable> CreateFilterControls()
{
statusDropdown = new SlimEnumDropdown<RoomModeFilter>
StatusDropdown = new SlimEnumDropdown<RoomModeFilter>
{
RelativeSizeAxes = Axes.None,
Width = 160,
};
statusDropdown.Current.BindValueChanged(_ => UpdateFilter());
StatusDropdown.Current.BindValueChanged(_ => UpdateFilter());
yield return statusDropdown;
yield return StatusDropdown;
}
#endregion

View File

@ -31,6 +31,7 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer
private MultiplayerClient client { get; set; } = null!;
private Dropdown<RoomPermissionsFilter> roomAccessTypeDropdown = null!;
private OsuCheckbox showInProgress = null!;
public override void OnResuming(ScreenTransitionEvent e)
{
@ -56,7 +57,16 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer
roomAccessTypeDropdown.Current.BindValueChanged(_ => UpdateFilter());
return base.CreateFilterControls().Append(roomAccessTypeDropdown);
showInProgress = new OsuCheckbox
{
LabelText = "Show playing rooms",
RelativeSizeAxes = Axes.None,
Width = 200,
Current = { Value = true }
};
showInProgress.Current.BindValueChanged(_ => UpdateFilter());
return base.CreateFilterControls().Concat([roomAccessTypeDropdown, showInProgress]);
}
protected override FilterCriteria CreateFilterCriteria()
@ -64,6 +74,7 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer
var criteria = base.CreateFilterCriteria();
criteria.Category = @"realtime";
criteria.Permissions = roomAccessTypeDropdown.Current.Value;
criteria.Status = showInProgress.Current.Value ? null : RoomStatusFilter.Idle;
return criteria;
}