From bf5a7e3f2aa077fcbddaea82e510b74975bb2973 Mon Sep 17 00:00:00 2001 From: Gabe Livengood <47010459+ggliv@users.noreply.github.com> Date: Wed, 22 Jun 2022 17:01:28 -0400 Subject: [PATCH 01/10] add locked room filter --- .../Lounge/Components/FilterCriteria.cs | 1 + .../Lounge/Components/RoomsContainer.cs | 2 ++ .../OnlinePlay/Lounge/LoungeSubScreen.cs | 19 +++++++++++++++---- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/osu.Game/Screens/OnlinePlay/Lounge/Components/FilterCriteria.cs b/osu.Game/Screens/OnlinePlay/Lounge/Components/FilterCriteria.cs index 67e805986a..45c1b9b394 100644 --- a/osu.Game/Screens/OnlinePlay/Lounge/Components/FilterCriteria.cs +++ b/osu.Game/Screens/OnlinePlay/Lounge/Components/FilterCriteria.cs @@ -13,5 +13,6 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components public RoomStatusFilter Status; public string Category; public RulesetInfo Ruleset; + public bool Locked = true; } } diff --git a/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs b/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs index 2c3a2997cc..908505e386 100644 --- a/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs +++ b/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs @@ -87,6 +87,8 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components matchingFilter &= r.FilterTerms.Any(term => term.ToString().Contains(criteria.SearchString, StringComparison.InvariantCultureIgnoreCase)); } + matchingFilter &= criteria.Locked || !r.Room.HasPassword.Value; + r.MatchingFilter = matchingFilter; } }); diff --git a/osu.Game/Screens/OnlinePlay/Lounge/LoungeSubScreen.cs b/osu.Game/Screens/OnlinePlay/Lounge/LoungeSubScreen.cs index f7f3c27ede..a726ff632f 100644 --- a/osu.Game/Screens/OnlinePlay/Lounge/LoungeSubScreen.cs +++ b/osu.Game/Screens/OnlinePlay/Lounge/LoungeSubScreen.cs @@ -85,6 +85,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge private RoomsContainer roomsContainer; private SearchTextBox searchTextBox; private Dropdown statusDropdown; + private Checkbox lockedCheckbox; [BackgroundDependencyLoader(true)] private void load([CanBeNull] IdleTracker idleTracker) @@ -224,9 +225,12 @@ namespace osu.Game.Screens.OnlinePlay.Lounge { SearchString = searchTextBox.Current.Value, Ruleset = ruleset.Value, - Status = statusDropdown.Current.Value + Status = statusDropdown.Current.Value, + Locked = lockedCheckbox.Current.Value, }; + #endregion + protected virtual IEnumerable CreateFilterControls() { statusDropdown = new SlimEnumDropdown @@ -237,10 +241,17 @@ namespace osu.Game.Screens.OnlinePlay.Lounge statusDropdown.Current.BindValueChanged(_ => UpdateFilter()); - yield return statusDropdown; - } + lockedCheckbox = new OsuTabControlCheckbox + { + Current = new Bindable(true), + RelativeSizeAxes = Axes.None, + Text = @"Show Locked", + }; - #endregion + lockedCheckbox.Current.BindValueChanged(_ => UpdateFilter()); + + return new Drawable[] { lockedCheckbox, statusDropdown, }; + } public override void OnEntering(ScreenTransitionEvent e) { From a03cfbc2d4ec60c07c3ea2156dad084a7e123247 Mon Sep 17 00:00:00 2001 From: Gabe Livengood <47010459+ggliv@users.noreply.github.com> Date: Wed, 22 Jun 2022 17:01:42 -0400 Subject: [PATCH 02/10] add test coverage --- .../TestSceneLoungeRoomsContainer.cs | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/osu.Game.Tests/Visual/Multiplayer/TestSceneLoungeRoomsContainer.cs b/osu.Game.Tests/Visual/Multiplayer/TestSceneLoungeRoomsContainer.cs index 171f8eea52..363a2b4a4d 100644 --- a/osu.Game.Tests/Visual/Multiplayer/TestSceneLoungeRoomsContainer.cs +++ b/osu.Game.Tests/Visual/Multiplayer/TestSceneLoungeRoomsContainer.cs @@ -157,6 +157,26 @@ namespace osu.Game.Tests.Visual.Multiplayer AddUntilStep("3 rooms visible", () => container.Rooms.Count(r => r.IsPresent) == 3); } + [Test] + public void TestLockedFiltering() + { + AddStep("add rooms", () => + { + RoomManager.AddRooms(1, withPassword: true); + RoomManager.AddRooms(1, withPassword: false); + }); + + AddUntilStep("both rooms shown", () => container.Rooms.Count(r => r.IsPresent) == 2); + + AddStep("filter locked rooms", () => container.Filter.Value = new FilterCriteria { Locked = false }); + + AddUntilStep("locked room hidden", () => container.Rooms.All(r => !r.Room.HasPassword.Value)); + + AddStep("unfilter locked rooms", () => container.Filter.SetDefault()); + + AddUntilStep("both rooms shown", () => container.Rooms.Count(r => r.IsPresent) == 2); + } + [Test] public void TestPasswordProtectedRooms() { From 2def6d809bf4c48108a95324101c5a1c107b3bfa Mon Sep 17 00:00:00 2001 From: Gabe Livengood <47010459+ggliv@users.noreply.github.com> Date: Thu, 23 Jun 2022 11:02:27 -0400 Subject: [PATCH 03/10] refactor to use enum dropdown --- .../Multiplayer/TestSceneLoungeRoomsContainer.cs | 12 +++++------- .../OnlinePlay/Lounge/Components/FilterCriteria.cs | 2 +- .../Lounge/Components/RoomPublicityFilter.cs | 13 +++++++++++++ .../OnlinePlay/Lounge/Components/RoomsContainer.cs | 2 +- .../Screens/OnlinePlay/Lounge/LoungeSubScreen.cs | 13 ++++++------- 5 files changed, 26 insertions(+), 16 deletions(-) create mode 100644 osu.Game/Screens/OnlinePlay/Lounge/Components/RoomPublicityFilter.cs diff --git a/osu.Game.Tests/Visual/Multiplayer/TestSceneLoungeRoomsContainer.cs b/osu.Game.Tests/Visual/Multiplayer/TestSceneLoungeRoomsContainer.cs index 363a2b4a4d..4ebd05d46a 100644 --- a/osu.Game.Tests/Visual/Multiplayer/TestSceneLoungeRoomsContainer.cs +++ b/osu.Game.Tests/Visual/Multiplayer/TestSceneLoungeRoomsContainer.cs @@ -158,7 +158,7 @@ namespace osu.Game.Tests.Visual.Multiplayer } [Test] - public void TestLockedFiltering() + public void TestPublicityFiltering() { AddStep("add rooms", () => { @@ -166,15 +166,13 @@ namespace osu.Game.Tests.Visual.Multiplayer RoomManager.AddRooms(1, withPassword: false); }); - AddUntilStep("both rooms shown", () => container.Rooms.Count(r => r.IsPresent) == 2); + AddStep("filter public rooms", () => container.Filter.Value = new FilterCriteria { Publicity = RoomPublicityFilter.Public }); - AddStep("filter locked rooms", () => container.Filter.Value = new FilterCriteria { Locked = false }); + AddUntilStep("private room hidden", () => container.Rooms.All(r => !r.Room.HasPassword.Value)); - AddUntilStep("locked room hidden", () => container.Rooms.All(r => !r.Room.HasPassword.Value)); + AddStep("filter private rooms", () => container.Filter.Value = new FilterCriteria { Publicity = RoomPublicityFilter.Private }); - AddStep("unfilter locked rooms", () => container.Filter.SetDefault()); - - AddUntilStep("both rooms shown", () => container.Rooms.Count(r => r.IsPresent) == 2); + AddUntilStep("public room hidden", () => container.Rooms.All(r => r.Room.HasPassword.Value)); } [Test] diff --git a/osu.Game/Screens/OnlinePlay/Lounge/Components/FilterCriteria.cs b/osu.Game/Screens/OnlinePlay/Lounge/Components/FilterCriteria.cs index 45c1b9b394..3bde1f07b8 100644 --- a/osu.Game/Screens/OnlinePlay/Lounge/Components/FilterCriteria.cs +++ b/osu.Game/Screens/OnlinePlay/Lounge/Components/FilterCriteria.cs @@ -13,6 +13,6 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components public RoomStatusFilter Status; public string Category; public RulesetInfo Ruleset; - public bool Locked = true; + public RoomPublicityFilter Publicity; } } diff --git a/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomPublicityFilter.cs b/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomPublicityFilter.cs new file mode 100644 index 0000000000..ffa527cb9c --- /dev/null +++ b/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomPublicityFilter.cs @@ -0,0 +1,13 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +#nullable disable + +namespace osu.Game.Screens.OnlinePlay.Lounge.Components +{ + public enum RoomPublicityFilter + { + Public, + Private + } +} diff --git a/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs b/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs index 908505e386..e5d7170f16 100644 --- a/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs +++ b/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs @@ -87,7 +87,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components matchingFilter &= r.FilterTerms.Any(term => term.ToString().Contains(criteria.SearchString, StringComparison.InvariantCultureIgnoreCase)); } - matchingFilter &= criteria.Locked || !r.Room.HasPassword.Value; + matchingFilter &= (criteria.Publicity == RoomPublicityFilter.Public && !r.Room.HasPassword.Value) || (criteria.Publicity == RoomPublicityFilter.Private && r.Room.HasPassword.Value); r.MatchingFilter = matchingFilter; } diff --git a/osu.Game/Screens/OnlinePlay/Lounge/LoungeSubScreen.cs b/osu.Game/Screens/OnlinePlay/Lounge/LoungeSubScreen.cs index a726ff632f..7ec2c7d8e7 100644 --- a/osu.Game/Screens/OnlinePlay/Lounge/LoungeSubScreen.cs +++ b/osu.Game/Screens/OnlinePlay/Lounge/LoungeSubScreen.cs @@ -85,7 +85,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge private RoomsContainer roomsContainer; private SearchTextBox searchTextBox; private Dropdown statusDropdown; - private Checkbox lockedCheckbox; + private Dropdown publicityDropdown; [BackgroundDependencyLoader(true)] private void load([CanBeNull] IdleTracker idleTracker) @@ -226,7 +226,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge SearchString = searchTextBox.Current.Value, Ruleset = ruleset.Value, Status = statusDropdown.Current.Value, - Locked = lockedCheckbox.Current.Value, + Publicity = publicityDropdown.Current.Value, }; #endregion @@ -241,16 +241,15 @@ namespace osu.Game.Screens.OnlinePlay.Lounge statusDropdown.Current.BindValueChanged(_ => UpdateFilter()); - lockedCheckbox = new OsuTabControlCheckbox + publicityDropdown = new SlimEnumDropdown { - Current = new Bindable(true), RelativeSizeAxes = Axes.None, - Text = @"Show Locked", + Width = 160, }; - lockedCheckbox.Current.BindValueChanged(_ => UpdateFilter()); + publicityDropdown.Current.BindValueChanged(_ => UpdateFilter()); - return new Drawable[] { lockedCheckbox, statusDropdown, }; + return new Drawable[] { publicityDropdown, statusDropdown, }; } public override void OnEntering(ScreenTransitionEvent e) From 9a15adbfffb4b4db274b71db5cc00b20694ccf32 Mon Sep 17 00:00:00 2001 From: Gabe Livengood <47010459+ggliv@users.noreply.github.com> Date: Thu, 23 Jun 2022 11:24:28 -0400 Subject: [PATCH 04/10] add an all option to publicity filter --- .../Visual/Multiplayer/TestSceneLoungeRoomsContainer.cs | 4 ++++ .../OnlinePlay/Lounge/Components/RoomPublicityFilter.cs | 1 + .../Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/osu.Game.Tests/Visual/Multiplayer/TestSceneLoungeRoomsContainer.cs b/osu.Game.Tests/Visual/Multiplayer/TestSceneLoungeRoomsContainer.cs index 4ebd05d46a..e16e71ca70 100644 --- a/osu.Game.Tests/Visual/Multiplayer/TestSceneLoungeRoomsContainer.cs +++ b/osu.Game.Tests/Visual/Multiplayer/TestSceneLoungeRoomsContainer.cs @@ -166,6 +166,10 @@ namespace osu.Game.Tests.Visual.Multiplayer RoomManager.AddRooms(1, withPassword: false); }); + AddStep("apply default filter", () => container.Filter.SetDefault()); + + AddUntilStep("both rooms visible", () => container.Rooms.Count(r => r.IsPresent) == 2); + AddStep("filter public rooms", () => container.Filter.Value = new FilterCriteria { Publicity = RoomPublicityFilter.Public }); AddUntilStep("private room hidden", () => container.Rooms.All(r => !r.Room.HasPassword.Value)); diff --git a/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomPublicityFilter.cs b/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomPublicityFilter.cs index ffa527cb9c..53f85ba7c4 100644 --- a/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomPublicityFilter.cs +++ b/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomPublicityFilter.cs @@ -7,6 +7,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components { public enum RoomPublicityFilter { + All, Public, Private } diff --git a/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs b/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs index e5d7170f16..0e8918fa18 100644 --- a/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs +++ b/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs @@ -87,7 +87,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components matchingFilter &= r.FilterTerms.Any(term => term.ToString().Contains(criteria.SearchString, StringComparison.InvariantCultureIgnoreCase)); } - matchingFilter &= (criteria.Publicity == RoomPublicityFilter.Public && !r.Room.HasPassword.Value) || (criteria.Publicity == RoomPublicityFilter.Private && r.Room.HasPassword.Value); + matchingFilter &= criteria.Publicity == RoomPublicityFilter.All || (criteria.Publicity == RoomPublicityFilter.Public && !r.Room.HasPassword.Value) || (criteria.Publicity == RoomPublicityFilter.Private && r.Room.HasPassword.Value); r.MatchingFilter = matchingFilter; } From d67c482c48b9cf3175672edccc84a91ec5d17c84 Mon Sep 17 00:00:00 2001 From: Gabe Livengood <47010459+ggliv@users.noreply.github.com> Date: Thu, 23 Jun 2022 11:36:08 -0400 Subject: [PATCH 05/10] move publicity filter to multi exclusively --- .../OnlinePlay/Lounge/LoungeSubScreen.cs | 18 ++++------------- .../Multiplayer/MultiplayerLoungeSubScreen.cs | 20 +++++++++++++++++++ 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/osu.Game/Screens/OnlinePlay/Lounge/LoungeSubScreen.cs b/osu.Game/Screens/OnlinePlay/Lounge/LoungeSubScreen.cs index 7ec2c7d8e7..f7f3c27ede 100644 --- a/osu.Game/Screens/OnlinePlay/Lounge/LoungeSubScreen.cs +++ b/osu.Game/Screens/OnlinePlay/Lounge/LoungeSubScreen.cs @@ -85,7 +85,6 @@ namespace osu.Game.Screens.OnlinePlay.Lounge private RoomsContainer roomsContainer; private SearchTextBox searchTextBox; private Dropdown statusDropdown; - private Dropdown publicityDropdown; [BackgroundDependencyLoader(true)] private void load([CanBeNull] IdleTracker idleTracker) @@ -225,12 +224,9 @@ namespace osu.Game.Screens.OnlinePlay.Lounge { SearchString = searchTextBox.Current.Value, Ruleset = ruleset.Value, - Status = statusDropdown.Current.Value, - Publicity = publicityDropdown.Current.Value, + Status = statusDropdown.Current.Value }; - #endregion - protected virtual IEnumerable CreateFilterControls() { statusDropdown = new SlimEnumDropdown @@ -241,17 +237,11 @@ namespace osu.Game.Screens.OnlinePlay.Lounge statusDropdown.Current.BindValueChanged(_ => UpdateFilter()); - publicityDropdown = new SlimEnumDropdown - { - RelativeSizeAxes = Axes.None, - Width = 160, - }; - - publicityDropdown.Current.BindValueChanged(_ => UpdateFilter()); - - return new Drawable[] { publicityDropdown, statusDropdown, }; + yield return statusDropdown; } + #endregion + public override void OnEntering(ScreenTransitionEvent e) { base.OnEntering(e); diff --git a/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerLoungeSubScreen.cs b/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerLoungeSubScreen.cs index ae65e1d969..2c0f0f43fe 100644 --- a/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerLoungeSubScreen.cs +++ b/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerLoungeSubScreen.cs @@ -3,11 +3,15 @@ #nullable disable +using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using osu.Framework.Allocation; using osu.Framework.Bindables; using osu.Framework.Logging; using osu.Framework.Screens; +using osu.Framework.Graphics; +using osu.Framework.Graphics.UserInterface; using osu.Game.Graphics.UserInterface; using osu.Game.Online.API; using osu.Game.Online.Multiplayer; @@ -27,6 +31,8 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer [Resolved] private MultiplayerClient client { get; set; } + private Dropdown publicityDropdown; + public override void OnResuming(ScreenTransitionEvent e) { base.OnResuming(e); @@ -40,10 +46,24 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer } } + protected override IEnumerable CreateFilterControls() + { + publicityDropdown = new SlimEnumDropdown + { + RelativeSizeAxes = Axes.None, + Width = 160, + }; + + publicityDropdown.Current.BindValueChanged(_ => UpdateFilter()); + + return base.CreateFilterControls().Prepend(publicityDropdown); + } + protected override FilterCriteria CreateFilterCriteria() { var criteria = base.CreateFilterCriteria(); criteria.Category = @"realtime"; + criteria.Publicity = publicityDropdown.Current.Value; return criteria; } From 454eff43c542fdad3a37a37ea66bad6c594aa5ba Mon Sep 17 00:00:00 2001 From: Gabe Livengood <47010459+ggliv@users.noreply.github.com> Date: Thu, 23 Jun 2022 11:40:25 -0400 Subject: [PATCH 06/10] publicity -> accesstype --- .../Multiplayer/TestSceneLoungeRoomsContainer.cs | 4 ++-- .../OnlinePlay/Lounge/Components/FilterCriteria.cs | 2 +- .../{RoomPublicityFilter.cs => RoomAccessType.cs} | 2 +- .../OnlinePlay/Lounge/Components/RoomsContainer.cs | 2 +- .../Multiplayer/MultiplayerLoungeSubScreen.cs | 10 +++++----- 5 files changed, 10 insertions(+), 10 deletions(-) rename osu.Game/Screens/OnlinePlay/Lounge/Components/{RoomPublicityFilter.cs => RoomAccessType.cs} (88%) diff --git a/osu.Game.Tests/Visual/Multiplayer/TestSceneLoungeRoomsContainer.cs b/osu.Game.Tests/Visual/Multiplayer/TestSceneLoungeRoomsContainer.cs index e16e71ca70..89be9cc188 100644 --- a/osu.Game.Tests/Visual/Multiplayer/TestSceneLoungeRoomsContainer.cs +++ b/osu.Game.Tests/Visual/Multiplayer/TestSceneLoungeRoomsContainer.cs @@ -170,11 +170,11 @@ namespace osu.Game.Tests.Visual.Multiplayer AddUntilStep("both rooms visible", () => container.Rooms.Count(r => r.IsPresent) == 2); - AddStep("filter public rooms", () => container.Filter.Value = new FilterCriteria { Publicity = RoomPublicityFilter.Public }); + AddStep("filter public rooms", () => container.Filter.Value = new FilterCriteria { AccessType = RoomAccessType.Public }); AddUntilStep("private room hidden", () => container.Rooms.All(r => !r.Room.HasPassword.Value)); - AddStep("filter private rooms", () => container.Filter.Value = new FilterCriteria { Publicity = RoomPublicityFilter.Private }); + AddStep("filter private rooms", () => container.Filter.Value = new FilterCriteria { AccessType = RoomAccessType.Private }); AddUntilStep("public room hidden", () => container.Rooms.All(r => r.Room.HasPassword.Value)); } diff --git a/osu.Game/Screens/OnlinePlay/Lounge/Components/FilterCriteria.cs b/osu.Game/Screens/OnlinePlay/Lounge/Components/FilterCriteria.cs index 3bde1f07b8..864634209b 100644 --- a/osu.Game/Screens/OnlinePlay/Lounge/Components/FilterCriteria.cs +++ b/osu.Game/Screens/OnlinePlay/Lounge/Components/FilterCriteria.cs @@ -13,6 +13,6 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components public RoomStatusFilter Status; public string Category; public RulesetInfo Ruleset; - public RoomPublicityFilter Publicity; + public RoomAccessType AccessType; } } diff --git a/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomPublicityFilter.cs b/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomAccessType.cs similarity index 88% rename from osu.Game/Screens/OnlinePlay/Lounge/Components/RoomPublicityFilter.cs rename to osu.Game/Screens/OnlinePlay/Lounge/Components/RoomAccessType.cs index 53f85ba7c4..bf8da65881 100644 --- a/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomPublicityFilter.cs +++ b/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomAccessType.cs @@ -5,7 +5,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components { - public enum RoomPublicityFilter + public enum RoomAccessType { All, Public, diff --git a/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs b/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs index 0e8918fa18..55fe8c129a 100644 --- a/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs +++ b/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs @@ -87,7 +87,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components matchingFilter &= r.FilterTerms.Any(term => term.ToString().Contains(criteria.SearchString, StringComparison.InvariantCultureIgnoreCase)); } - matchingFilter &= criteria.Publicity == RoomPublicityFilter.All || (criteria.Publicity == RoomPublicityFilter.Public && !r.Room.HasPassword.Value) || (criteria.Publicity == RoomPublicityFilter.Private && r.Room.HasPassword.Value); + matchingFilter &= criteria.AccessType == RoomAccessType.All || (criteria.AccessType == RoomAccessType.Public && !r.Room.HasPassword.Value) || (criteria.AccessType == RoomAccessType.Private && r.Room.HasPassword.Value); r.MatchingFilter = matchingFilter; } diff --git a/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerLoungeSubScreen.cs b/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerLoungeSubScreen.cs index 2c0f0f43fe..63a482ce46 100644 --- a/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerLoungeSubScreen.cs +++ b/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerLoungeSubScreen.cs @@ -31,7 +31,7 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer [Resolved] private MultiplayerClient client { get; set; } - private Dropdown publicityDropdown; + private Dropdown roomAccessTypeDropdown; public override void OnResuming(ScreenTransitionEvent e) { @@ -48,22 +48,22 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer protected override IEnumerable CreateFilterControls() { - publicityDropdown = new SlimEnumDropdown + roomAccessTypeDropdown = new SlimEnumDropdown { RelativeSizeAxes = Axes.None, Width = 160, }; - publicityDropdown.Current.BindValueChanged(_ => UpdateFilter()); + roomAccessTypeDropdown.Current.BindValueChanged(_ => UpdateFilter()); - return base.CreateFilterControls().Prepend(publicityDropdown); + return base.CreateFilterControls().Prepend(roomAccessTypeDropdown); } protected override FilterCriteria CreateFilterCriteria() { var criteria = base.CreateFilterCriteria(); criteria.Category = @"realtime"; - criteria.Publicity = publicityDropdown.Current.Value; + criteria.AccessType = roomAccessTypeDropdown.Current.Value; return criteria; } From bea70988bc09fe4cbed5723715175248c4eedf3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Thu, 23 Jun 2022 17:57:22 +0200 Subject: [PATCH 07/10] Remove unnecessary `#nullable disable` --- osu.Game/Screens/OnlinePlay/Lounge/Components/RoomAccessType.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomAccessType.cs b/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomAccessType.cs index bf8da65881..1141ed2937 100644 --- a/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomAccessType.cs +++ b/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomAccessType.cs @@ -1,8 +1,6 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. -#nullable disable - namespace osu.Game.Screens.OnlinePlay.Lounge.Components { public enum RoomAccessType From 04d69010b5666e1eb57ac02824c0fc2e2e257001 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Thu, 23 Jun 2022 18:03:04 +0200 Subject: [PATCH 08/10] Split overlong conditional to local function --- .../Lounge/Components/RoomsContainer.cs | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs b/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs index 55fe8c129a..24dd27c27b 100644 --- a/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs +++ b/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs @@ -87,11 +87,29 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components matchingFilter &= r.FilterTerms.Any(term => term.ToString().Contains(criteria.SearchString, StringComparison.InvariantCultureIgnoreCase)); } - matchingFilter &= criteria.AccessType == RoomAccessType.All || (criteria.AccessType == RoomAccessType.Public && !r.Room.HasPassword.Value) || (criteria.AccessType == RoomAccessType.Private && r.Room.HasPassword.Value); + matchingFilter &= matchesAccessType(r, criteria.AccessType); r.MatchingFilter = matchingFilter; } }); + + static bool matchesAccessType(DrawableLoungeRoom room, RoomAccessType accessType) + { + switch (accessType) + { + case RoomAccessType.All: + return true; + + case RoomAccessType.Public: + return !room.Room.HasPassword.Value; + + case RoomAccessType.Private: + return room.Room.HasPassword.Value; + + default: + throw new ArgumentOutOfRangeException(nameof(accessType), accessType, $"Unsupported {nameof(RoomAccessType)} in filter"); + } + } } private void roomsChanged(object sender, NotifyCollectionChangedEventArgs args) From 489ed5d34d2fd8ead9ed49a7eda7e9361e1a8b62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Thu, 23 Jun 2022 18:04:38 +0200 Subject: [PATCH 09/10] Rename test method --- .../Visual/Multiplayer/TestSceneLoungeRoomsContainer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Tests/Visual/Multiplayer/TestSceneLoungeRoomsContainer.cs b/osu.Game.Tests/Visual/Multiplayer/TestSceneLoungeRoomsContainer.cs index 89be9cc188..d56716a0b5 100644 --- a/osu.Game.Tests/Visual/Multiplayer/TestSceneLoungeRoomsContainer.cs +++ b/osu.Game.Tests/Visual/Multiplayer/TestSceneLoungeRoomsContainer.cs @@ -158,7 +158,7 @@ namespace osu.Game.Tests.Visual.Multiplayer } [Test] - public void TestPublicityFiltering() + public void TestAccessTypeFiltering() { AddStep("add rooms", () => { From e213c1a4ef6a489ad1154a353ab0beb4fc310da1 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 1 Jul 2022 17:26:40 +0900 Subject: [PATCH 10/10] Rename enum to explicitly mention it is a filter --- .../Multiplayer/TestSceneLoungeRoomsContainer.cs | 4 ++-- .../OnlinePlay/Lounge/Components/FilterCriteria.cs | 2 +- .../{RoomAccessType.cs => RoomPermissionsFilter.cs} | 2 +- .../OnlinePlay/Lounge/Components/RoomsContainer.cs | 12 ++++++------ .../Multiplayer/MultiplayerLoungeSubScreen.cs | 6 +++--- 5 files changed, 13 insertions(+), 13 deletions(-) rename osu.Game/Screens/OnlinePlay/Lounge/Components/{RoomAccessType.cs => RoomPermissionsFilter.cs} (87%) diff --git a/osu.Game.Tests/Visual/Multiplayer/TestSceneLoungeRoomsContainer.cs b/osu.Game.Tests/Visual/Multiplayer/TestSceneLoungeRoomsContainer.cs index d56716a0b5..82e7bf8969 100644 --- a/osu.Game.Tests/Visual/Multiplayer/TestSceneLoungeRoomsContainer.cs +++ b/osu.Game.Tests/Visual/Multiplayer/TestSceneLoungeRoomsContainer.cs @@ -170,11 +170,11 @@ namespace osu.Game.Tests.Visual.Multiplayer AddUntilStep("both rooms visible", () => container.Rooms.Count(r => r.IsPresent) == 2); - AddStep("filter public rooms", () => container.Filter.Value = new FilterCriteria { AccessType = RoomAccessType.Public }); + AddStep("filter public rooms", () => container.Filter.Value = new FilterCriteria { Permissions = RoomPermissionsFilter.Public }); AddUntilStep("private room hidden", () => container.Rooms.All(r => !r.Room.HasPassword.Value)); - AddStep("filter private rooms", () => container.Filter.Value = new FilterCriteria { AccessType = RoomAccessType.Private }); + AddStep("filter private rooms", () => container.Filter.Value = new FilterCriteria { Permissions = RoomPermissionsFilter.Private }); AddUntilStep("public room hidden", () => container.Rooms.All(r => r.Room.HasPassword.Value)); } diff --git a/osu.Game/Screens/OnlinePlay/Lounge/Components/FilterCriteria.cs b/osu.Game/Screens/OnlinePlay/Lounge/Components/FilterCriteria.cs index 864634209b..3a687ad351 100644 --- a/osu.Game/Screens/OnlinePlay/Lounge/Components/FilterCriteria.cs +++ b/osu.Game/Screens/OnlinePlay/Lounge/Components/FilterCriteria.cs @@ -13,6 +13,6 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components public RoomStatusFilter Status; public string Category; public RulesetInfo Ruleset; - public RoomAccessType AccessType; + public RoomPermissionsFilter Permissions; } } diff --git a/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomAccessType.cs b/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomPermissionsFilter.cs similarity index 87% rename from osu.Game/Screens/OnlinePlay/Lounge/Components/RoomAccessType.cs rename to osu.Game/Screens/OnlinePlay/Lounge/Components/RoomPermissionsFilter.cs index 1141ed2937..faef2a9d57 100644 --- a/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomAccessType.cs +++ b/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomPermissionsFilter.cs @@ -3,7 +3,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components { - public enum RoomAccessType + public enum RoomPermissionsFilter { All, Public, diff --git a/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs b/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs index 24dd27c27b..6142fc78a8 100644 --- a/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs +++ b/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs @@ -87,27 +87,27 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components matchingFilter &= r.FilterTerms.Any(term => term.ToString().Contains(criteria.SearchString, StringComparison.InvariantCultureIgnoreCase)); } - matchingFilter &= matchesAccessType(r, criteria.AccessType); + matchingFilter &= matchPermissions(r, criteria.Permissions); r.MatchingFilter = matchingFilter; } }); - static bool matchesAccessType(DrawableLoungeRoom room, RoomAccessType accessType) + static bool matchPermissions(DrawableLoungeRoom room, RoomPermissionsFilter accessType) { switch (accessType) { - case RoomAccessType.All: + case RoomPermissionsFilter.All: return true; - case RoomAccessType.Public: + case RoomPermissionsFilter.Public: return !room.Room.HasPassword.Value; - case RoomAccessType.Private: + case RoomPermissionsFilter.Private: return room.Room.HasPassword.Value; default: - throw new ArgumentOutOfRangeException(nameof(accessType), accessType, $"Unsupported {nameof(RoomAccessType)} in filter"); + throw new ArgumentOutOfRangeException(nameof(accessType), accessType, $"Unsupported {nameof(RoomPermissionsFilter)} in filter"); } } } diff --git a/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerLoungeSubScreen.cs b/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerLoungeSubScreen.cs index b482b1b680..37b977cff7 100644 --- a/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerLoungeSubScreen.cs +++ b/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerLoungeSubScreen.cs @@ -31,7 +31,7 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer [Resolved] private MultiplayerClient client { get; set; } - private Dropdown roomAccessTypeDropdown; + private Dropdown roomAccessTypeDropdown; public override void OnResuming(ScreenTransitionEvent e) { @@ -48,7 +48,7 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer protected override IEnumerable CreateFilterControls() { - roomAccessTypeDropdown = new SlimEnumDropdown + roomAccessTypeDropdown = new SlimEnumDropdown { RelativeSizeAxes = Axes.None, Width = 160, @@ -63,7 +63,7 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer { var criteria = base.CreateFilterCriteria(); criteria.Category = @"realtime"; - criteria.AccessType = roomAccessTypeDropdown.Current.Value; + criteria.Permissions = roomAccessTypeDropdown.Current.Value; return criteria; }