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:
parent
637fe07b31
commit
3352571f2a
@ -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";
|
||||
}
|
||||
}
|
||||
|
@ -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 =>
|
||||
{
|
||||
|
@ -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;
|
||||
|
@ -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,
|
||||
}
|
||||
}
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user