1
0
mirror of https://github.com/ppy/osu.git synced 2024-09-22 03:27:24 +08:00
Commit Graph

2717 Commits

Author SHA1 Message Date
Dan Balasescu
b64c0d011c Isolate client's Room from TestMultiplayerClient 2022-07-01 19:23:25 +09:00
andy840119
48047f2e58 Move the null check in the outside.
AddCursor() should not accept the null value.
2022-06-30 23:29:49 +08:00
Dan Balasescu
c6520de749 Ensure PlaylistItem beatmap is not null 2022-06-30 14:24:49 +09:00
Dan Balasescu
8e4a6c43b5
Merge pull request #18914 from peppy/spectator-playback-test-leniences
Increase leniences on `TestSceneSpectatorPlayback.TestWithSendFailure`
2022-06-28 16:15:51 +09:00
Dean Herbert
22b254e5c5 Handle task exception outside of schedule to avoid unobserved exceptions 2022-06-28 15:09:28 +09:00
Dean Herbert
c1075d113f Add logging around current channel changes and join requests
Tracking down a flaky test
(https://teamcity.ppy.sh/buildConfiguration/Osu_Build/553?hideProblemsFromDependencies=false&expandBuildTestsSection=true&hideTestsFromDependencies=false):

```csharp
TearDown : System.TimeoutException : "PM Channel 1 displayed" timed out
--TearDown
   at osu.Framework.Testing.Drawables.Steps.UntilStepButton.<>c__DisplayClass11_0.<.ctor>b__0()
   at osu.Framework.Testing.Drawables.Steps.StepButton.PerformStep(Boolean userTriggered)
   at osu.Framework.Testing.TestScene.runNextStep(Action onCompletion, Action`1 onError, Func`2 stopCondition)
--- End of stack trace from previous location ---
   at osu.Framework.Testing.TestSceneTestRunner.TestRunner.RunTestBlocking(TestScene test)
   at osu.Game.Tests.Visual.OsuTestScene.OsuTestSceneTestRunner.RunTestBlocking(TestScene test) in /opt/buildagent/work/ecd860037212ac52/osu.Game/Tests/Visual/OsuTestScene.cs:line 503
   at osu.Framework.Testing.TestScene.RunTestsFromNUnit()
------- Stdout: -------
[runtime] 2022-06-27 23:18:55 [verbose]: 💨 Class: TestSceneChatOverlay
[runtime] 2022-06-27 23:18:55 [verbose]: 🔶 Test:  TestKeyboardNextChannel
[runtime] 2022-06-27 23:18:55 [verbose]: Chat is now polling every 60000 ms
[runtime] 2022-06-27 23:18:55 [verbose]: 🔸 Step #1 Setup request handler
[runtime] 2022-06-27 23:18:55 [verbose]: 🔸 Step #2 Add test channels
[runtime] 2022-06-27 23:18:55 [verbose]: 🔸 Step #3 Show overlay with channels
[runtime] 2022-06-27 23:18:55 [verbose]: Unhandled Request Type: osu.Game.Online.API.Requests.CreateChannelRequest
[network] 2022-06-27 23:18:55 [verbose]: Failing request osu.Game.Online.API.Requests.CreateChannelRequest (System.InvalidOperationException: DummyAPIAccess cannot process this request.)
[runtime] 2022-06-27 23:18:55 [verbose]: Unhandled Request Type: osu.Game.Online.API.Requests.CreateChannelRequest
[network] 2022-06-27 23:18:55 [verbose]: Failing request osu.Game.Online.API.Requests.CreateChannelRequest (System.InvalidOperationException: DummyAPIAccess cannot process this request.)
[runtime] 2022-06-27 23:18:55 [verbose]: 🔸 Step #4 Select channel 1
[runtime] 2022-06-27 23:18:55 [verbose]: 🔸 Step #5 Channel 1 is visible
[runtime] 2022-06-27 23:18:55 [verbose]: 🔸 Step #6 Press document next keys
[runtime] 2022-06-27 23:18:55 [verbose]: 🔸 Step #7 Channel 2 is visible
[runtime] 2022-06-27 23:18:55 [verbose]: 🔸 Step #8 Press document next keys
[runtime] 2022-06-27 23:18:55 [verbose]: 🔸 Step #9 PM Channel 1 displayed
[network] 2022-06-27 23:18:55 [verbose]: Request to https://a.ppy.sh/587 failed with System.Net.WebException: NotFound.
[network] 2022-06-27 23:18:55 [verbose]: Request to https://a.ppy.sh/503 failed with System.Net.WebException: NotFound.
[runtime] 2022-06-27 23:19:05 [verbose]: 💥 Failed (on attempt 5,550)
[runtime] 2022-06-27 23:19:05 [verbose]:  Currently loading components (0)
[runtime] 2022-06-27 23:19:05 [verbose]: 🧵 Task schedulers
[runtime] 2022-06-27 23:19:05 [verbose]: LoadComponentsAsync (standard) concurrency:4 running:0 pending:0
[runtime] 2022-06-27 23:19:05 [verbose]: LoadComponentsAsync (long load) concurrency:4 running:0 pending:0
[runtime] 2022-06-27 23:19:05 [verbose]: 🎱 Thread pool
[runtime] 2022-06-27 23:19:05 [verbose]: worker:          min 1      max 32,767 available 32,766
[runtime] 2022-06-27 23:19:05 [verbose]: completion:      min 1      max 1,000  available 1,000
[runtime] 2022-06-27 23:19:05 [debug]: Focus on "ChatTextBox" no longer valid as a result of unfocusIfNoLongerValid.
[runtime] 2022-06-27 23:19:05 [debug]: Focus changed from ChatTextBox to nothing.
```

This kind of logging should be helpful:

```csharp
[runtime] 2022-06-28 04:59:57 [verbose]: 🔸 Step #5 Channel 1 is visible
[runtime] 2022-06-28 04:59:57 [verbose]: 🔸 Step #6 Press document next keys
[runtime] 2022-06-28 04:59:57 [verbose]: Current channel changed to #channel-2
[runtime] 2022-06-28 04:59:57 [debug]: Pressed (DocumentNext) handled by TestSceneChatOverlay+TestChatOverlay.
[runtime] 2022-06-28 04:59:57 [debug]: KeyDownEvent(PageDown, False) handled by ManualInputManager+LocalPlatformActionContainer.
[runtime] 2022-06-28 04:59:57 [verbose]: 🔸 Step #7 Channel 2 is visible
[runtime] 2022-06-28 04:59:57 [verbose]: 🔸 Step #8 Press document next keys
[runtime] 2022-06-28 04:59:57 [verbose]: Current channel changed to test user 685
[runtime] 2022-06-28 04:59:57 [debug]: Pressed (DocumentNext) handled by TestSceneChatOverlay+TestChatOverlay.
[runtime] 2022-06-28 04:59:57 [debug]: KeyDownEvent(PageDown, False) handled by ManualInputManager+LocalPlatformActionContainer.
[runtime] 2022-06-28 04:59:57 [verbose]: 🔸 Step #9 PM Channel 1 displayed
[runtime] 2022-06-28 04:59:57 [verbose]: 🔸 Step #10 Press document next keys
[runtime] 2022-06-28 04:59:57 [verbose]: Current channel changed to test user 218
```
2022-06-28 14:00:30 +09:00
Dean Herbert
569fde4b47 Add messages to all InvalidOperationExceptions
Without this, they can be very non-descript and hard to track down
2022-06-28 01:34:25 +09:00
Dan Balasescu
b13fa924fd
Merge pull request #18865 from peppy/fix-flaky-chat-test
Fix chat tests failing 1/10000 runs
2022-06-27 18:06:00 +09:00
Dean Herbert
13dcaf82ad Fix chat tests failing 1/10000 runs
31a447fda0/osu.Game/Online/Chat/ChannelManager.cs (L412-L414)

Sigh.
2022-06-27 16:50:10 +09:00
Dan Balasescu
f6a6538e96 Add more properties to IBeatmapOnlineInfo 2022-06-27 16:07:15 +09:00
Dean Herbert
31a447fda0 Update parameter discards 2022-06-24 21:26:19 +09:00
Bartłomiej Dach
26c5b59f6d
Replace usages of string.To{Lower,Upper}() 2022-06-24 11:57:45 +02:00
Bartłomiej Dach
34f1c80b7c
Add and use ILinkHandler interface 2022-06-20 20:04:21 +02:00
Dan Balasescu
f8830c6850 Automated #nullable processing 2022-06-17 16:37:17 +09:00
Bartłomiej Dach
f88c568c8d
Update flag sizes after switch to twemoji assets
The old flags used a size of 150x100, while the new assets based on
twemoji use a size of 150x108. Update existing usages to match this new
aspect ratio better.
2022-06-15 21:45:47 +02:00
Dean Herbert
52c8cea27d Update spectator/multiplayer endpoint in line with new deployment 2022-06-11 22:31:01 +09:00
Dean Herbert
c661f2b059 Ensure ChannelManager has access to API from point of construction
Closes https://github.com/ppy/osu/issues/18451.
2022-06-08 19:15:23 +09:00
Dean Herbert
3b46787e06
Merge pull request #18496 from smoogipoo/multiplayer-leaderboard-user-mods-2
Support mod/ruleset combinations in multiplayer gameplay leaderboard
2022-06-08 14:58:13 +09:00
Dean Herbert
eee79c9531
Merge pull request #18610 from jai-x/refactor-chat-line
Refactor `ChatLine` and fix `DrawableChannel` flow padding
2022-06-08 13:54:53 +09:00
Dean Herbert
cd649f7d97
Merge branch 'master' into multiplayer-leaderboard-user-mods-2 2022-06-08 13:39:42 +09:00
Salman Ahmed
830ff66688 Fix message notifier not handling unresolved PM channels 2022-06-08 04:31:31 +03:00
Jai Sharma
2f635fa854 Refactor ChatLine and fix DrawableChannel flow padding
Refactors `ChatLine` component to use more sensible override properties
and layout using grid container. Moves creation of username component
into its own method to simplify BDL.

Updates padding of base `DrawableChannel` flow padding.

Removes usage of `ChatOverlayDrawableChannel` since it's overrides are
no longer needed.

Updates usage of `StandAloneChatDisplay` to use new override properties
of `DrawableChannel`.
2022-06-07 22:35:45 +01:00
Dean Herbert
734636299e
Merge pull request #18567 from jai-x/update-dayseparator
Update `DaySeparator` to use new design throughout
2022-06-06 19:15:43 +09:00
Dean Herbert
7facbc9b28
Merge branch 'master' into multiplayer-test-clone-room 2022-06-06 13:47:16 +09:00
Jai Sharma
c0aaeff2b3 Update DaySeparator to use new design throughout
Moves `DaySeparator` chat component to it's own file and update it to
match new chat design. Makes use of several virtual attributes that can
be overridden to update spacing and layout in other usage contexts.

Remove redundant usage of `ChatOverlayDaySeparator`, since the new
design is now part of the base class.

Create `StandAloneDaySeparator` to use in `StandAloneChatDisplay` which
overrides attributes to match correct spacing and layout for its design.

Ensure that `DrawableChannel.CreateDaySeparator` returns type of
`DaySeparator` instead of `Drawable`.
2022-06-04 18:02:14 +01:00
Jamie Taylor
365819865e
Remove 'submit' sample usages 2022-06-03 22:31:35 +09:00
Dean Herbert
f68df1518f
Merge branch 'master' into multiplayer-test-clone-room 2022-06-03 22:29:39 +09:00
Dan Balasescu
06ac3c1ad3 Make MultiplayerClient update CurrentPlaylistItem 2022-06-03 21:17:23 +09:00
Dan Balasescu
77289c7224 Fix inability to serialise-then-deserialise playlist items 2022-06-03 20:36:12 +09:00
Dan Balasescu
5245995689 Use IsNotNull() helper 2022-06-03 19:50:21 +09:00
Dan Balasescu
646f5f0f33 Isolate "server-side" multiplayer rooms in testing 2022-06-03 19:17:34 +09:00
Dean Herbert
eb2d822530 Fix web requests potentially being performed after cancelled
Closes https://github.com/ppy/osu/issues/18524.
2022-06-03 16:04:52 +09:00
Bartłomiej Dach
59ffc8b08e
Merge branch 'master' into multiplayer-leaderboard-user-mods-2 2022-06-02 20:45:10 +02:00
Dan Balasescu
4d9a77bdc0 Stop using Drawable.Clock altogether 2022-06-02 15:02:50 +09:00
Dan Balasescu
6fb1fe06a0 Remove unnecessary ApplyBeatmap call 2022-06-02 14:47:04 +09:00
Dan Balasescu
13d85b8cc7 Merge branch 'scoreprocessor-cleanup' into multiplayer-leaderboard-user-mods-2 2022-05-31 19:53:37 +09:00
Dan Balasescu
22d998dc2a Use new score processor in MultiplayerGameplayLeaderboard 2022-05-30 19:26:26 +09:00
Dan Balasescu
75b50de269 Implement score processor for spectator states 2022-05-30 19:26:26 +09:00
Dan Balasescu
a052e09ac3 Send ScoreProcessor statistics in SpectatorState 2022-05-30 19:26:26 +09:00
Dean Herbert
dcc53fbd47 Merge branch 'rename-chat-overlay' into fix-dummmy-api-request-firing-2 2022-05-30 17:56:12 +09:00
Dean Herbert
f65d2db77f Remove "V2" suffix from ChatOverlay components 2022-05-30 17:54:09 +09:00
Dean Herbert
c18dd8c8fb Ensure Queue operations on DummyAPIAccess are performed on the update thread 2022-05-30 16:32:44 +09:00
Dean Herbert
a2a057440e Fail requests taretting the fake API with a more deliberate exception
I think this feels better than relying on some other method to throw an
exception.
2022-05-30 16:31:54 +09:00
Jai Sharma
8f596520f3 Remove old chat overlay components 2022-05-29 20:08:43 +01:00
Dean Herbert
ca9b2648a3
Merge pull request #18421 from peppy/reconnect-on-server-shutdown-exception
Handle server shutdown messages in room creation and spectator initialisation
2022-05-28 03:52:24 +09:00
Dean Herbert
ef47b380c6 Add featured artist playlist category 2022-05-27 20:18:46 +09:00
Dean Herbert
b2607196b8 Merge branch 'master' into new-chat-integrate 2022-05-26 18:38:26 +09:00
Dean Herbert
abb69a49b0 Handle server shutdown messages in room creation and spectator initialisation 2022-05-26 18:03:41 +09:00
Dean Herbert
63dd9bd493 Expose Reconnect logic in HubClientConnector 2022-05-26 18:02:50 +09:00
Dean Herbert
87959a59d9 Add missing "announce" channel type
Of note, this doesn't mean the channels will display, but it does fix
parsing errors which cause the whole chat display to fail.
2022-05-25 18:28:33 +09:00
Jai Sharma
d2a49ca266 Use ChatOverlayV2 in message notifier and tests 2022-05-23 21:02:50 +01:00
Dean Herbert
136ecb45e2 Rename dummy channel and move to a nested class inside the ChannelListing itself 2022-05-19 19:26:14 +09:00
Jai Sharma
dd4b11c593 Re-add exception handling on PM message request failure 2022-05-18 01:47:23 +01:00
Jai Sharma
ae5b6c3e10 Use dummy channel to show selector and remove ChannelListSelector
Add dummy channel `DummySelectorChannel` which should be set as the
current channel in the channel manager when the selector in the chat
overlay should be shown.

Refactors the `ChannelListItem` to not show mention pill and close
button when the channel is the dummy selector channel.

Ensure that the `ChannelList` selects the dummy channel on clicking the
selector item.

Removes `ChannelListSelector` as it is no longer needed.

Removes the `setCurrent` parameter from `ChannelManager.JoinChannel`
method as it is no longer needed.
2022-05-15 20:24:49 +01:00
Salman Ahmed
d5027cdfbd Add FeaturedInSpotlight property to API beatmapsets 2022-05-14 19:46:13 +03:00
Dean Herbert
a35c57860c Resolve colour inline 2022-05-12 23:54:43 +09:00
Dean Herbert
8760e5d884 Merge branch 'master' into new-chat-drawable-channel 2022-05-12 22:36:19 +09:00
Jai Sharma
cced8609f6 Add setCurrent param to ChannelManager.JoinChannel 2022-05-11 22:51:15 +01:00
Jai Sharma
f4acfbd0df Change return type of CreateDaySeparator to Drawable 2022-05-07 22:23:46 +01:00
Jai Sharma
bec28c5b28 Remove virtual ColourInfo properties from DaySeparator 2022-05-07 22:16:11 +01:00
Jai Sharma
9d62206176 Update new chat overlay day separator colours and spacing
Updates the `DaySeparator` component to have separately settable colours
for the text and the lines.

Updates existing overrides of the `DaySeparator` to use the new colour
setter.

Create new `ChatOverlayDrawableChannel` with adjusted spacing and new
`DaySeparator` colours.
2022-05-06 23:06:18 +01:00
Dean Herbert
319867f73c Mark GuestUser as system user via Id for now
Should resolve https://github.com/ppy/osu/issues/18105.

Checking through usages, it doesn't immediately look like this will
regress any other scenarios.
2022-05-06 17:37:46 +09:00
Dean Herbert
2f12c7d9e1 Change ChatTextBox to not handle up/down arrows 2022-05-04 19:09:22 +09:00
Dean Herbert
5c13200c75 Update production endpoint to new version 2022-05-01 13:01:38 +09:00
Dan Balasescu
fe0fcc7e9e Rename countdown object 2022-04-28 20:00:38 +09:00
Dan Balasescu
b293d3923c Merge branch 'master' into multiplayer-force-start-2 2022-04-23 01:03:55 +09:00
Salman Ahmed
a9ea0ab91b Add support for fetching user guest participations 2022-04-22 07:55:39 +03:00
Dan Balasescu
cbb07d4011 Add countdown classes 2022-04-21 23:14:37 +09:00
Dan Balasescu
59622deb1f Add LoadAborted() event 2022-04-21 22:40:52 +09:00
Dan Balasescu
08d250fe58 Rename MatchStarted() -> GameplayStarted() 2022-04-21 22:39:24 +09:00
Dan Balasescu
8c3b541312 Add state for when user is ready for gameplay 2022-04-21 22:35:52 +09:00
Dean Herbert
e54d3702a6 Specify web proxy in SignalR connection building
Might solve https://github.com/ppy/osu/discussions/17897 (depends on how
adeptly signalr falls back to long polling if/when is fails to websocket
via the proxy, or maybe succeed).

As with the framework side change, I've tested this to not break a
zero-proxy flow. Intending to have the user test this after next
release.

Reference:
https://stackoverflow.com/questions/59343807/get-system-default-web-proxy-in-net-core
/
https://stackoverflow.com/questions/13515058/using-signalr-client-through-a-web-proxy
2022-04-21 15:16:41 +09:00
Joseph Madamba
5e5c8e78a6 Use existing web localisation for most hardcoded strings 2022-04-20 16:31:11 -07:00
Bartłomiej Dach
f82d58fa6a
Merge branch 'master' into update-paginated-profile-items-count 2022-04-19 22:17:26 +02:00
Salman Ahmed
c858ec2483 Pagination -> `PaginationParameters 2022-04-19 02:48:34 +03:00
Salman Ahmed
96d4369cc8 Introduce Pagination and simplify paginated API requests 2022-04-19 02:04:23 +03:00
Salman Ahmed
9d59cd408f Add concept of "initial items count" in paginated API requests 2022-04-18 22:59:49 +03:00
Dean Herbert
043599081b Split out INotificationOverlay to allow for easier testing 2022-04-18 20:14:01 +09:00
Dean Herbert
e315313266 Split out IDialogOverlay to allow for easier testing 2022-04-18 18:36:26 +09:00
Dean Herbert
0a7fbcad1e
Merge branch 'master' into match-start-control-test-refactor 2022-04-13 22:26:10 +09:00
Dean Herbert
c0ad91796d Fix gameplay start flow 2022-04-13 20:57:40 +09:00
Dean Herbert
2bb0d9e6d3 Expose required classes/properties for mocking 2022-04-13 17:02:33 +09:00
Dan Balasescu
59ff9be316
Merge pull request #17788 from peppy/fix-replay-download-button-tests
Fix multiple issues in `ReplayDownloadButton` test scene
2022-04-13 16:00:45 +09:00
Dean Herbert
20eca9bf6a Refactor TestSceneRankRangePill to not depend on TestMultiplayerClient 2022-04-12 19:39:24 +09:00
Dean Herbert
b51abfc722 Fix ScoreDownloadTracker matching on empty hash equality 2022-04-12 18:22:23 +09:00
Dean Herbert
09d560c93e Add test coverage of spectator requests 2022-04-11 19:27:14 +09:00
Dean Herbert
34457b4742 Expose mocked members as virtual on Multiplayer and SpectatorClient 2022-04-11 19:04:15 +09:00
Dean Herbert
ae1e126837 Make HighlightMessage implicitly show chat overlay 2022-04-09 00:30:28 +09:00
Dan Balasescu
9ea6f9b1fe Remove some incorrectly-firing asserts 2022-04-08 21:44:44 +09:00
Dan Balasescu
62f5409191
Merge pull request #17725 from peppy/multiplayer-hotifx
Avoid multiplayer crashes when events arrive in unexpected order
2022-04-08 20:23:37 +09:00
Dean Herbert
5c571996d8 Avoid multiplayer crashes when events arrive in unexpected order
Intended to be a temporary fix for
https://github.com/ppy/osu/issues/17713 while a more permanent solution
is established. A proper fix is actually quite simple, but updating the
test to work with it is... *slightly* more complicated.

This hotfix will mean that if a `UserJoined` event arrives during the
unobserved window during room join (of the local user), the local user
still won't see the joining user, but the game won't crash as a result.
2022-04-08 17:55:47 +09:00
Dean Herbert
6bb8243212 Fix potential assert failure due to Room access from disconnection event 2022-04-08 17:41:03 +09:00
Dean Herbert
933a722cfc Remove secondary null checks which cannot exist (were on wrong thread) 2022-04-08 14:56:04 +09:00
Dean Herbert
64c63fe93a Move null check in JoinRoom on to update thread 2022-04-08 14:52:56 +09:00
Dean Herbert
d50f41225f Rename scheduleAsync to runOnUpdateThreadAsync 2022-04-08 14:43:53 +09:00
Dean Herbert
9ba99ed57d Ensure all access to MultiplayerClient.Room is on the update thread
This was an implicit requirement until now, but not well documented
everywhere. Adding this makes it much easier to understand the
requirement (and probably safer).
2022-04-08 14:42:56 +09:00
Dean Herbert
f795f77cf9 Add missing newline 2022-04-06 14:00:54 +09:00
Dean Herbert
c540810943
Merge branch 'master' into fix-multiplayer-unobserved 2022-04-06 11:33:10 +09:00
Dan Balasescu
6e6271d0c0 Fix "server-side" room playlist not updated
Remove unused using
2022-04-01 18:32:10 +09:00
Dan Balasescu
16d4544ff9 Prevent reloads when playlist item order changes 2022-04-01 17:06:37 +09:00
Dean Herbert
5b3eb2d6f4 Add helper class to handle firing async multiplayer methods 2022-03-31 19:27:45 +09:00
Dean Herbert
a0692ce477 Add a const for system users which should never display a profile 2022-03-28 22:22:56 +09:00
Dean Herbert
f92a31cd39
Merge pull request #17402 from smoogipoo/multiplayer-auto-countdown
Add multiplayer auto-start countdown timer
2022-03-25 20:31:14 +09:00
Dean Herbert
792e79265b Add ignore rule for new helper property 2022-03-25 15:46:27 +09:00
Dean Herbert
b1f0f89fdd Simplify AutoStart and Host checks 2022-03-25 15:41:01 +09:00
Dean Herbert
de4c04ef80 Fix non-matching json propert for AutoStartDuration 2022-03-25 15:34:33 +09:00
Dan Balasescu
0d88af19ae Fix local setting not being updated 2022-03-24 20:23:58 +09:00
Dan Balasescu
40eca0fbe2 Merge branch 'master' into multiplayer-auto-countdown 2022-03-24 18:11:51 +09:00
Dean Herbert
e889d93441 Add asserts of playlist being non-empty after client operations 2022-03-24 17:52:20 +09:00
Dan Balasescu
a83a90e675 Rename countdown Delay -> Duration 2022-03-23 15:21:16 +09:00
Dan Balasescu
f7c0047206 Send time remaining in countdowns instead 2022-03-23 15:19:43 +09:00
Dan Balasescu
d0fee53e1f Implement auto countdown timers
Change to using TimeSpan
2022-03-22 14:34:06 +09:00
Dan Balasescu
04f4e81852 Rename start countdown request 2022-03-18 21:05:19 +09:00
Dan Balasescu
72843a6797 Add support for starting/stopping countdowns 2022-03-18 14:33:09 +09:00
Dan Balasescu
3b938865a1 Add room structure for countdown timers 2022-03-18 14:31:57 +09:00
Dean Herbert
1814a325d8 Move GetSettingUnderlyingValue to a SettingSource extension method 2022-03-15 14:54:00 +09:00
Salman Ahmed
cc87563d57
Merge branch 'master' into chat-mention-highlight 2022-03-11 17:51:22 +03:00
Salman Ahmed
a31611bdec Improve channel switching flow in HighlightMessage 2022-03-10 23:07:15 +03:00
Salman Ahmed
8086f73451 Revert "Add functionality to switch to successfully joined channel"
This reverts commit c72e8a8b5e.
2022-03-10 23:07:15 +03:00
Salman Ahmed
c72e8a8b5e Add functionality to switch to successfully joined channel 2022-03-10 21:28:38 +03:00
Dan Balasescu
c61397cc22 Fix whitespace/inspection 2022-03-10 16:22:27 +09:00
Dan Balasescu
13a4058efd
Merge pull request #17191 from peppy/fix-mod-conversion-exceptions
Change `ToMod` to return an `UnknownMod` rather than throw if a mod isn't available
2022-03-10 16:20:50 +09:00
Dean Herbert
022dd88aef
Merge branch 'master' into chat-mention-highlight 2022-03-10 14:23:23 +09:00
Dean Herbert
0267aed846 Change ToMod to return an UnknownMod rather than throw if a mod isn't available
As seen by this kind of crash, having the `.ToMod` method throw can be
very problematic and also hidden (as it is used inside of models in
places where exceptions are not expected to occur).

Given there are tens of usages of this method, returning a placeholder
mod seems like a better idea than outright throwing.

```
 An unhandled has occurred.
 System.InvalidOperationException:
There is no mod in the ruleset (osu) matching the acronym AS.
 at osu.Game.Online.API.APIMod.ToMod(Ruleset ruleset) in /Users/dean/Projects/osu/osu.Game/Online/API/APIMod.cs:line 54
 at osu.Game.Scoring.ScoreInfo.<get_Mods>b__117_0(APIMod m) in /Users/dean/Projects/osu/osu.Game/Scoring/ScoreInfo.cs:line 193
 at System.Linq.Enumerable.SelectArrayIterator`2.ToArray()
 at osu.Game.Scoring.ScoreInfo.get_Mods() in /Users/dean/Projects/osu/osu.Game/Scoring/ScoreInfo.cs:line 193
 at osu.Game.Screens.Select.Leaderboards.BeatmapLeaderboard.<>c.<subscribeToLocalScores>b__40_2(ScoreInfo s) in /Users/dean/Projects/osu/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs:line 199
 at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
 at osu.Game.Database.RealmObjectExtensions.Detach[T](IEnumerable`1 items) in /Users/dean/Projects/osu/osu.Game/Database/RealmObjectExtensions.cs:line 180
 at osu.Game.Screens.Select.Leaderboards.BeatmapLeaderboard.<>c__DisplayClass40_0.<subscribeToLocalScores>g__localScoresChanged|1(IRealmCollection`1 sender, ChangeSet changes, Exception exception) in /Users/dean/Projects/osu/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs:line
209
 at Realms.RealmCollectionBase`1.Realms.INotifiable<Realms.NotifiableObjectHandleBase.CollectionChangeSet>.NotifyCallbacks(Nullable`1 changes, Nullable`1 exception)
 at Realms.NotifiableObjectHandleBase.NotifyObjectChanged(IntPtr managedHandle, IntPtr changes, IntPtr exception)
```
2022-03-09 17:57:55 +09:00
Dan Balasescu
b07a1e8d09 Fix unable to copy playlist rooms without first opening 2022-03-09 15:38:00 +09:00
Dean Herbert
512536f5fe Fix unconditional null in Equals implementation 2022-03-08 23:25:51 +09:00
Dean Herbert
da7c6f1772 Merge branch 'master' into chat-mention-highlight 2022-03-08 21:15:12 +09:00
Dean Herbert
b0f40d9e45 Remove user from SubmittableScore
This wasn't being used by osu-web, and included far too much unnecessary
data. Of note, `pp` and `ruleset_id` are also not strictly required, but
there's no harm in sending them so I've left them be for now.
2022-03-08 18:38:24 +09:00
Salman Ahmed
f8e5570e41 Fix Message equality not passing on equal references 2022-03-08 03:20:20 +03:00
Salman Ahmed
7f47be4680 Refactor message highlighting logic to rely on a Channel data bindable 2022-03-08 03:19:37 +03:00
Salman Ahmed
5764c53c17 OpenChannelNotification -> HighlightMessageNotification 2022-03-08 03:16:07 +03:00
Salman Ahmed
32d242dd62 Hook up message notifications to chat message highlighting logic 2022-03-07 05:10:49 +03:00
Dean Herbert
6673e456c5
Merge pull request #17090 from miniriley2012/wiki-locale-fix
Fix wiki links containing locale not loading when opened from chat.
2022-03-04 19:36:14 +09:00
Riley Quinn
8491bab77c
Replace string locale with Language 2022-03-04 00:57:13 -06:00
Dean Herbert
d4a2645510 Add localisation support for leaderboard error text 2022-03-02 14:14:44 +09:00
Dean Herbert
c342030b2c Add specific placeholder message for custom rulesets rather than showing network error 2022-03-02 14:10:59 +09:00
Dean Herbert
67082b8c5d Remove verbose logging from SpectatorClient for now 2022-02-25 22:25:36 +09:00
Dan Balasescu
e947c97e10
Merge branch 'master' into spectator-reliability 2022-02-25 20:20:30 +09:00
Dan Balasescu
8eef1774d5 Use Logger.Log instead of console 2022-02-25 20:18:22 +09:00
Dan Balasescu
80fc13fc1f
Merge pull request #16976 from peppy/dont-expose-mark-as-read-errors-to-user
Don't expose "mark as read" errors to the user via notifications
2022-02-24 23:20:34 +09:00
Dan Balasescu
16a3bbbcb4
Merge pull request #16944 from peppy/rooms-request-faster
Update playlists/multiplayer to use new compact response
2022-02-24 23:20:07 +09:00
Dean Herbert
35302aa297
Merge pull request #16980 from smoogipoo/fix-union-workaround-resolver
Fix SignalR union workaround resolver failing on multiple union'd types
2022-02-24 22:24:48 +09:00
Dan Balasescu
c5b1e5cbf8 Fix union resolver failing on multiple derived types 2022-02-24 20:27:22 +09:00
Dean Herbert
d69446ff6e
Merge pull request #16979 from smoogipoo/fix-playlists-partial-mod
Fix playlists not allowing entry with partial mods
2022-02-24 19:37:10 +09:00
Dan Balasescu
2acaffd5e7 Fix APIMod storing bindables instead of value 2022-02-24 17:01:12 +09:00
Dean Herbert
c6d78b9325 Fix several oversights in data linking causing drawable rooms not updating as expected 2022-02-24 16:12:15 +09:00
Dean Herbert
b4a54b38e7 Remove redundant parameter specification 2022-02-24 16:02:16 +09:00
Dean Herbert
3f6bdc5585 Don't expose "mark as read" errors to the user via notifications
This can happen if the user leaves the channel before the request is
fired. You can't mark a channel as read when you're not in the channel.

Addresses https://github.com/ppy/osu/discussions/16973.
2022-02-24 15:40:07 +09:00
Bartłomiej Dach
29d77a29aa
Merge branch 'master' into startup-protocol-handling 2022-02-23 21:10:27 +01:00
Dean Herbert
3f2ef030e4 Group SpectatorClient private fields together 2022-02-24 02:31:55 +09:00
Dean Herbert
5ffdd57895 Rename weirdly named parameter 2022-02-24 02:28:13 +09:00
Dean Herbert
694c6ad872 Fix frames potentially getting lost due to non-matching Schedule usage 2022-02-24 02:28:13 +09:00
Dean Herbert
47b84295a6 Fix bundle send logic not correctly waiting for task completion (due to nested schedule) 2022-02-24 02:23:48 +09:00
Dean Herbert
cff6f85472 Add note about reconnection being insufficient currently 2022-02-24 02:23:48 +09:00
Dean Herbert
5ff4d3f8e5 Add support to SpectatorClient to resend failed frame bundles 2022-02-24 02:21:29 +09:00
Dean Herbert
53bbd00675 Also make APIUser opt-in and remove the remaining serialization exclusion rule 2022-02-23 17:12:38 +09:00
Dean Herbert
43c83d2de1 Add note about why RoomID is nulled in DeepClone 2022-02-23 17:10:11 +09:00
Dean Herbert
f14a9af801 Make Room opt-in rather than opt-out for json serialization 2022-02-23 17:10:10 +09:00
Dean Herbert
28c9c5ab6a Remove unnecessary ShouldSerialize rules in Room 2022-02-23 17:10:10 +09:00
Susko3
7bdcb5952e Fix handling badly-formatted osu:// urls 2022-02-23 00:36:56 +01:00
Bartłomiej Dach
1a358698fb
Merge branch 'master' into startup-protocol-handling 2022-02-22 22:42:16 +01:00
Dean Herbert
ed008267d7
Fix one more case of escaping not being present
Co-authored-by: Bartłomiej Dach <dach.bartlomiej@gmail.com>
2022-02-22 16:45:18 +09:00
Dean Herbert
ca0a041153
Fix missing escaping causing test failures
Co-authored-by: Bartłomiej Dach <dach.bartlomiej@gmail.com>
2022-02-22 16:45:04 +09:00
Dean Herbert
61b3280de1 Add missing property copies in Room.CopyFrom implementation 2022-02-22 15:47:00 +09:00
Dean Herbert
71ae425fb2 Merge branch 'master' into rooms-request-faster 2022-02-22 15:45:05 +09:00
Dean Herbert
f12044b03e Add mention of PlaylistItem.Beatmap being a placeholder in many cases 2022-02-22 15:31:08 +09:00
Bartłomiej Dach
e3ae52360e
Merge branch 'master' into leaderboard-score-timeref 2022-02-21 20:50:00 +01:00
Dean Herbert
b43008b9f6 Add cover and count handling from newer response version 2022-02-21 19:05:22 +09:00
Dean Herbert
39d64e779c Handle API returned difficulty range for rooms 2022-02-21 19:05:19 +09:00
Dean Herbert
7f4cc221d2 Add API versioning 2022-02-21 19:02:03 +09:00
Dean Herbert
1737128334 Allow room category to be copied even if Spotlight
I remember that this conditional copy was added to support making copies
of spotlight rooms without carrying across the `Spotlight` type, but in
testing this is already handled web side to the point that it's not
required.

The rationale for allowing the copy is that this method is used for
tests, where it was not being copied correctly from the input as
expected (used at
bdc3b76df0/osu.Game/Tests/Visual/OnlinePlay/TestRoomManager.cs (L38)).
2022-02-21 17:47:56 +09:00
Dean Herbert
fc1877b6fa Move to extension method and revert logic to match previous implementation 2022-02-21 13:42:26 +09:00
Dean Herbert
79408f6afc Add xmldoc and clean up ScoreboardTimeUtils extension methods a touch 2022-02-21 13:30:58 +09:00
Dean Herbert
2ded7d281b Remove unused using statement 2022-02-21 13:17:19 +09:00
Dean Herbert
abe1a3990a
Merge branch 'master' into leaderboard-score-timeref 2022-02-21 12:11:10 +09:00
dekrain
262751a98a
Revert highlighting recent scores 2022-02-19 21:23:35 +01:00
dekrain
31b7ce053d
Fix CI issues 2022-02-19 21:18:26 +01:00
dekrain
0d83c5a39a
Add colour highlighting recent scores 2022-02-19 20:47:30 +01:00
dekrain
15ed9ec4fa
Merge scoreboard and leaderboard implementations together 2022-02-19 20:47:02 +01:00
Dean Herbert
98aaf83177 Add a centralised constant for the osu URL schema protocol 2022-02-18 15:57:37 +09:00
dekrain
1abbb9ab39
Align the bar to be on baseline of score components
Co-authored-by: Bartłomiej Dach <dach.bartlomiej@gmail.com>
2022-02-17 21:26:59 +01:00
Dean Herbert
9d0023c750 Fix incorrect mappings 2022-02-17 21:12:51 +09:00
Dean Herbert
3d5ed24e20 Fix beatmap overlay leaderboards and links not working
Completely aware that this isn't how it should be done, but would like
to get this out in a hotfix release today. Maybe changes opinions on
https://github.com/ppy/osu/pull/16890 structure?
2022-02-17 21:05:00 +09:00
dekrain
f4d1e6f600
Add tests for timerefs 2022-02-17 10:38:29 +01:00
dekrain
7bd731ae08
Move the date next to the flag icon 2022-02-17 10:12:35 +01:00
dekrain
333a305af3
Use floor instead of ceiling 2022-02-17 00:09:17 +01:00
dekrain
c124034cf3
Add text displaying recent score time 2022-02-16 23:18:14 +01:00
Dan Balasescu
55d9f0b44b Store beatmap to a field instead 2022-02-16 16:03:08 +09:00
Dean Herbert
7e24b36f26 Merge branch 'master' into remove-playlistitem-beatmap 2022-02-16 14:24:57 +09:00
Dan Balasescu
5db63a8751 Expose read-only list from request 2022-02-16 11:30:03 +09:00
Dan Balasescu
ea5bb46fb8
Merge branch 'master' into net6 2022-02-16 00:40:04 +09:00
Dan Balasescu
b1dbd4abfe Fix incorrect playlist item <-> availability tracker logic
Results in revert to some prior logic for the tracker implementation.
2022-02-15 23:50:12 +09:00
Dan Balasescu
bdc3b76df0 Remove beatmap bindable from PlaylistItem 2022-02-15 23:50:08 +09:00
Dan Balasescu
94a974e1c9 Make OnlinePlayBeatmapAvailabilityTracker look up the online beatmap 2022-02-15 23:41:50 +09:00
Dan Balasescu
afcb7a4630 Make DrawableRoomPlaylistItem look up the online beatmap 2022-02-15 23:41:50 +09:00
Dan Balasescu
ccd265ebe7 Handle beatmap lookup requests in TestRoomRequestsHandler 2022-02-15 23:41:50 +09:00
Dan Balasescu
efeba30b9f Remove ruleset and mod bindables from PlaylistItem 2022-02-15 16:28:15 +09:00
Dean Herbert
28b45fa899 Add assertions against null reference for connection usages 2022-02-15 15:19:50 +09:00
Dan Balasescu
8b05b35b8c
Merge pull request #16854 from peppy/combine-score-submission-request-implementation
Standardise and combine base implementation of score submission requests
2022-02-11 17:31:55 +09:00
Dean Herbert
28bbf34b14 Remove unnecessary this. prefix 2022-02-11 16:21:49 +09:00
Dan Balasescu
43f1044987
Merge pull request #16850 from frenzibyte/readonly-pinned-scores
Add read-only pinned scores view in user profile overlay
2022-02-11 16:15:46 +09:00
Dean Herbert
beb3731c0b Standardise and combine base implementation of score submission requests
These share too much yet have very different constructor signatures and
property exposure. Just a clean-up pass as I begin to look at replay
submission.
2022-02-11 15:53:47 +09:00
Salman Ahmed
92e22c57a7 Introduce private APIRuleset for online ID equality comparison 2022-02-11 08:27:01 +03:00
Salman Ahmed
9cd88ec2b8 Update API models with score pinning changes 2022-02-10 21:23:38 +03:00
Dan Balasescu
ffc4c64f7e Unify namings across the board 2022-02-09 12:10:07 +09:00
Dan Balasescu
886d1d2df6 Refactorings 2022-02-08 21:29:43 +09:00
Dan Balasescu
c1766d8a41 Add paused state 2022-02-08 20:29:53 +09:00
Dan Balasescu
4c76027178 Rename completed state to passed 2022-02-08 20:29:49 +09:00
Dan Balasescu
483977d5c8 Merge branch 'master' into spectator-state-rework 2022-02-03 19:59:07 +09:00
Dean Herbert
a69c7a9de6 Split exceptions back out to give better messaging 2022-02-03 14:09:27 +09:00
Dean Herbert
62fa915193 Standardise exception messages for local-user-logged-out flows 2022-02-03 13:58:55 +09:00
Dan Balasescu
d9a43b4c4c Fix API requests not completing when offline 2022-02-03 13:16:54 +09:00
Dan Balasescu
81a22dbd29 Add back playing users list 2022-02-02 23:19:43 +09:00
Dan Balasescu
fcbba3d948 Rename PlayingUserStates -> WatchingUserStates 2022-02-02 23:11:29 +09:00
Dan Balasescu
6d3bc005ea Merge branch 'master' into spectator-state-rework 2022-02-02 18:57:04 +09:00
Dean Herbert
6d962e7925
Merge pull request #16726 from dekrain/leaderboard-score-tooltip
Add basic tooltip for leaderboard scores
2022-02-02 13:56:45 +09:00
Dean Herbert
d065e32ca1 Fix crash due to MatchLeaderboardScores not having populated rulesets 2022-02-02 13:23:49 +09:00
Dean Herbert
35b7653290 Revert mod flow changes and add visual test coverage showing an overflow case 2022-02-02 09:13:19 +09:00
dekrain
eee020f8e4
Cleanup tooltip layout
Co-authored-by: Bartłomiej Dach <dach.bartlomiej@gmail.com>
2022-02-01 20:26:52 +01:00
Dan Balasescu
f4210f7a30 Rework spectator components to use new user state 2022-02-01 21:53:25 +09:00
Dan Balasescu
41007169f7 Give SpectatorState a user state 2022-02-01 21:51:05 +09:00
Dean Herbert
f87920cd83 Remove unnecessary GridContainer and list mods verticall to give more space 2022-02-01 16:43:26 +09:00
Dean Herbert
8eace12fe3 Synchronise (roughly) backgrounds of all custom tooltips 2022-02-01 16:35:25 +09:00
Dean Herbert
fdb52a8fd7 Remove gap in tooltip display between statistics 2022-02-01 16:35:25 +09:00
Dean Herbert
855135c51e Fix potential nullref during display due to incorrect equality check 2022-02-01 16:13:27 +09:00
Dean Herbert
e1b57c4bf6 Fix inspections 2022-02-01 16:07:57 +09:00
dekrain
d7b939277e
Code quality improvements 2022-02-01 07:10:00 +01:00
dekrain
fd287e06f2
Add missing license header 2022-02-01 06:51:00 +01:00
dekrain
c2b775c0a3
Minor alignment adjustments 2022-02-01 06:45:59 +01:00
Dan Balasescu
502e6af008 Remove PlayingUsers list from SpectatorClient 2022-02-01 14:42:30 +09:00
dekrain
db973fb348
Add basic tooltip for leaderboard scores 2022-02-01 06:28:18 +01:00
Dan Balasescu
4727aeda01 Give last bundled replay frame the frame header 2022-01-31 18:53:47 +09:00
Dean Herbert
c8c0ae5658
Merge branch 'master' into flush-frames-end-play 2022-01-31 15:12:41 +09:00
Dean Herbert
610eb9f6a4 Remove unnecessary container level 2022-01-31 13:45:49 +09:00
Dean Herbert
f8939af5e6 Track loading via state as well 2022-01-31 01:12:03 +09:00
Dean Herbert
1cec76df74
Fix weird reading xmldoc
Co-authored-by: Bartłomiej Dach <dach.bartlomiej@gmail.com>
2022-01-30 23:18:40 +09:00
Dean Herbert
04dbb5d3c6 Disallow setting "NoScores" externally as it is handled internally 2022-01-30 16:18:19 +09:00
Dean Herbert
acc1199add Consolidate flows of Set operations, either result or error 2022-01-30 16:16:00 +09:00
Dean Herbert
c401629dd8 Also refactor placeholder logic to make more sense 2022-01-30 10:50:32 +09:00
Dean Herbert
b434e29a7c Move loading hide operation inside early return to ensure not hidden too early
It should only be hidden after the async load completes.
2022-01-30 03:10:15 +09:00
Dean Herbert
dad9cc9315 Ensure Reset/Scores_Set run inline where possible 2022-01-30 03:06:29 +09:00
Dean Herbert
9b573fbc2b Add missing entries to switch statement and guard against out of range 2022-01-30 02:58:53 +09:00
Dean Herbert
d21464ea61 Fix assertions to work in both directions 2022-01-30 02:54:51 +09:00
Dean Herbert
d3cb910cf8 Convert inline math to not so inline to make operation more explicit 2022-01-30 02:37:01 +09:00
Dean Herbert
3d771c0fc7 Remove unnecessary loading hide call from PlaceholderState_Set and add more assertiveness 2022-01-30 02:34:31 +09:00
Dean Herbert
6f54f8ad78 Add more safety around CancellationToken usage 2022-01-29 23:58:57 +09:00
Dean Herbert
d0b74a91fb Fix edge cases with score drawable loading 2022-01-29 23:58:57 +09:00
Dean Herbert
0293d95f82 Simplify IsOnlineScope usage 2022-01-29 23:58:57 +09:00
Dean Herbert
daea13f491 Simplify flow of cancellation token 2022-01-29 23:58:57 +09:00
Dean Herbert
3d59bab7c6 Remove fetch callback logic completely 2022-01-29 23:58:57 +09:00