1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-25 05:53:05 +08:00
Commit Graph

2181 Commits

Author SHA1 Message Date
Andrei Zavatski
4b97224932 Implement NewsSideBar component 2021-05-10 09:53:52 +03:00
Bartłomiej Dach
fe86ee629e Fix temp files from beatmap listing imports not being cleaned up
As reported in #12718, it turns out that temporary files from beatmap
set downloads performed via the beatmap listing overlay could remain in
the user's filesystem even after the download has concluded.

The reason for the issue is a failure in component integration.
In the case of online downloads, files are first downloaded to a
temporary directory (`C:/Temp` or `/tmp`), with a randomly generated
filename, which ends in an extension of `.tmp`.

On the other side, `ArchiveModelManager`s have a `ShouldDeleteArchive()`
method, which determines whether a file should be deleted after
importing. At the time of writing, in the case of beatmap imports the
file is only automatically cleaned up if the extension of the file is
equal to `.osz`, which was not the case for temporary files.

As it turns out, `APIDownloadRequest` has a facility for adjusting the
file's extension, via the protected `FileExtension` property. Therefore,
use it in the case of `DownloadBeatmapSetRequest` to specify `.osz`,
which then will make sure that the `ShouldDeleteArchive()` check in
`BeatmapManager` picks it up for clean-up.
2021-05-08 17:09:14 +02:00
smoogipoo
f8f9cf9412 Merge branch 'fix-initial-playingusers' into multiplayer-spectator-screen 2021-04-22 23:25:25 +09:00
smoogipoo
f593d9e42c Fix playing users not being updated on room join 2021-04-22 23:23:43 +09:00
smoogipoo
6df23f1301 Merge branch 'master' into multiplayer-spectator-screen 2021-04-22 20:29:24 +09:00
Dan Balasescu
b774f5b72b
Merge pull request #12526 from peppy/fix-system-message-ordering
Fix system messages always being displayed above standard messages
2021-04-22 18:51:25 +09:00
Dean Herbert
3befb49ea9 Fix system messages always being displayed above standard messages
Closes https://github.com/ppy/osu/issues/12509.
2021-04-22 14:52:01 +09:00
smoogipoo
4cc3321d54 Fix potential doubling of events 2021-04-20 21:20:08 +09:00
Gagah Pangeran Rosfatiputra
d4013bd885
add GetWikiRequest 2021-04-20 16:40:30 +07:00
Gagah Pangeran Rosfatiputra
f3555ad08c
add APIWikiPage response 2021-04-20 16:12:32 +07:00
smoogipoo
c50b526ba0 Remove local state dictionary from SpectatorScreen 2021-04-19 16:48:55 +09:00
smoogipoo
83716ddb08 Rename currentUserStates -> playingUserStates 2021-04-19 16:07:00 +09:00
smoogipoo
de9e37857e Lock around playingUsers 2021-04-19 16:06:40 +09:00
smoogipoo
5885c24e00 Clear current user states on disconnect 2021-04-19 16:00:56 +09:00
smoogipoo
65a6f9f8a4 Merge branch 'fix-initial-spectator-state-callback' into multiplayer-spectator-screen 2021-04-16 18:26:46 +09:00
smoogipoo
ca74f413cd Change to explicit method instead 2021-04-16 17:31:02 +09:00
smoogipoo
5652490d61 Fix OnUserBeganPlaying not being invoked if already watching 2021-04-16 14:11:55 +09:00
smoogipoo
56e1bffdfd Populate initial user states 2021-04-13 23:57:16 +09:00
smoogipoo
5b53a2b211 Merge branch 'master' into multiplayer-spectator-screen 2021-04-13 20:07:56 +09:00
Salman Ahmed
92fab653e1 Take current mod settings value into account on equality comparsion 2021-04-12 20:51:13 +03:00
Salman Ahmed
fbd5195738 Extract mod setting value handling to utils class 2021-04-12 03:37:03 +03:00
Salman Ahmed
18fb9f5ac9
Merge branch 'master' into mod-using-reference-equality 2021-04-11 19:48:55 +03:00
smoogipoo
6eddc6c59e Enable spectating multiplayer matches 2021-04-09 21:03:50 +09:00
Dean Herbert
51fee79ef1 Fix scores not being accepted due to missing ruleset ID 2021-04-09 15:18:02 +09:00
Dean Herbert
24ae5b9169 Fix slightly incorrect solo score submission routes 2021-04-08 23:15:08 +09:00
smoogipoo
2791d454d2 Don't send spectating user state yet 2021-04-07 22:21:22 +09:00
smoogipoo
99bee73ac1 Merge branch 'master' into add-spectate-button-and-state 2021-04-07 22:07:52 +09:00
smoogipoo
56c13148f1 Fix typo in class name 2021-04-07 16:45:10 +09:00
smoogipoo
6de91d7b6b Add spectate button + test 2021-04-06 21:37:27 +09:00
smoogipoo
d5ba77b2c2 Add spectating user state 2021-04-06 21:22:28 +09:00
Dan Balasescu
ba3689b5b9
Merge pull request #12269 from PercyDan54/beatmap-details
Use OnlineViewContainer for BeatmapDetails
2021-04-06 17:52:32 +09:00
Dean Herbert
933c4010da Allow creating OnlineViewContainers with no placeholder button 2021-04-06 16:17:20 +09:00
PercyDan54
d4724f4494
Fix crash 2021-04-04 09:44:45 +08:00
smoogipoo
e1aa927827 Add dropdown option to export score 2021-04-02 13:20:15 +09:00
Dean Herbert
0a889fafc4 Don't send progress updates when not in a downloading state
This is mostly just a sanity/debounce check.
2021-03-26 14:04:40 +09:00
Dean Herbert
17a0b19ee7 Always set progress before updating download state
Without doing so, a state change may read from an old progress value.
2021-03-26 14:04:10 +09:00
Max Hübner
aa2c1ee85e Add new beatmap search filter row "General" 2021-03-25 23:20:10 +01:00
Dean Herbert
5267fb74c4 Add submission requests 2021-03-23 18:18:49 +09:00
Dean Herbert
aeff9bd853 Add return bool to HandleRequest to better trigger failures 2021-03-23 18:17:29 +09:00
Dean Herbert
ce452565f4 Avoid firing any kind of failures after success 2021-03-23 17:50:31 +09:00
Dean Herbert
f5ba746ae5 Fail all API requests sent to DummyAPIAccess
Until now, API requests sent to dummy API were just lost in the void. In most cases this somehow worked as expected, but any logic which is waiting on a request to finish will potentially never get a response.

Going forward, I'm not 100% sure that every `Wait` on a web response will have local timeout logic (I think there is a certain amount of assumption that this is being managed for us by `APIAccess`), so I've made this change to better handle such cases going forward. Now, rather than nothing happening, requests will trigger a failure via the existing exception logic rather than silently pretending the request never arrived.
2021-03-23 17:37:45 +09:00
Dean Herbert
58c60100b4 Fix APIScoreToken's data type not matching server side 2021-03-23 14:04:47 +09:00
smoogipoo
7fa5fd5647 Update usages of config with framework changes 2021-03-17 16:10:16 +09:00
Dan Balasescu
ff2327ffac
Merge branch 'master' into configure-await-false 2021-03-08 22:24:29 +09:00
Dean Herbert
b1cd01ceb8 Apply ConfigureAwait changes to game side 2021-03-08 14:36:35 +09:00
Dean Herbert
765cc5cf37 Remove iOS multiplayer blocking code 2021-03-08 14:35:22 +09:00
smoogipoo
7adb33f40e Fix beatmap getting nulled due to failing web request 2021-03-01 17:24:54 +09:00
Dean Herbert
254f9bb58b Show API human readable error message when chat posting fails
Closes #11902.
2021-02-26 13:38:00 +09:00
Dean Herbert
9ed8d902f7 Fix requests being indefinitely queued when user is offline 2021-02-24 19:57:42 +09:00
Dean Herbert
664d243003 Disable multiplayer/spectator on iOS until it can be supported again 2021-02-23 15:22:46 +09:00
smoogipoo
d985b8ab2a Increase beatmapset download timeout 2021-02-22 17:14:39 +09:00
Dean Herbert
a2aec6bcdc
Merge pull request #11808 from smoogipoo/multiplayer-no-playlist-mangling
Rework multiplayer playlist handling to support multiple items
2021-02-19 14:33:53 +09:00
smoogipoo
c0e0bd4f42 Add compatibility with old server build 2021-02-19 13:57:04 +09:00
smoogipoo
183a481a34 Refactor playlist update to remove .Contains() check 2021-02-19 13:32:32 +09:00
Dean Herbert
71316bbee5 Allow using OnlineViewContainer without deriving it 2021-02-18 17:45:58 +09:00
smoogipoo
56e9e10ff5 Make server authoritative in playlist item id 2021-02-18 15:30:31 +09:00
smoogipoo
8930ff4465 Merge branch 'master' into multiplayer-no-playlist-mangling 2021-02-17 19:29:01 +09:00
smoogipoo
70a995919c Update comments 2021-02-17 17:58:24 +09:00
smoogipoo
0d1149911c Don't display expired playlist items 2021-02-17 17:33:10 +09:00
smoogipoo
fb0e9d6760 Add played property to playlist item 2021-02-17 16:58:32 +09:00
Dean Herbert
86faa7f465
Merge pull request #11798 from smoogipoo/multiplayer-long-types
Use long type where required in multiplayer
2021-02-17 15:50:12 +09:00
smoogipoo
9a7b6ebe50 Fix missed occurrence 2021-02-17 14:30:52 +09:00
smoogipoo
f61b8e6154 Change to long 2021-02-16 21:32:38 +09:00
smoogipoo
100097d78f Fix playlist not being handled correctly for non-joined cases 2021-02-16 21:32:35 +09:00
smoogipoo
379393fe10 Merge branch 'multiplayer-long-types' into multiplayer-no-playlist-mangling 2021-02-16 19:37:55 +09:00
smoogipoo
3e802531d3 Use long type where required in multiplayer 2021-02-16 19:34:01 +09:00
smoogipoo
3ff9e14e35 Make StatefulMultiplayerClient control current playlist item 2021-02-16 18:56:13 +09:00
Dean Herbert
02417697e9 Display remaining attempts for playlist rooms with room-level attempt limits 2021-02-16 13:32:14 +09:00
Dan Balasescu
6641f4d5a9
Merge branch 'master' into hub-send-version-hash 2021-02-15 21:12:46 +09:00
Dean Herbert
3562fddc27 Add missing nullability flag on CreateAccount return value 2021-02-15 17:02:07 +09:00
Dean Herbert
55d5d8d5be Send version hash on hub connection 2021-02-15 16:51:40 +09:00
Dean Herbert
9ad38ab20e Move HubClientConnector retrieval to IAPIProvider 2021-02-15 16:43:56 +09:00
Dan Balasescu
34e600464b
Merge branch 'master' into abstract-hub-connection 2021-02-15 13:53:54 +09:00
Dan Balasescu
dad6e7e825
Merge pull request #11755 from peppy/fix-message-formatter-domain
Fix MessageFormatter not working for custom endpoints
2021-02-12 16:01:55 +09:00
Dean Herbert
3799493536 Add test coverage of int match failures 2021-02-12 15:25:00 +09:00
Dean Herbert
bb9123eecd Better handle fallback scenarios for beatmap links 2021-02-12 15:17:54 +09:00
Dean Herbert
1c5aaf3832 Add back default value 2021-02-12 15:03:53 +09:00
Dean Herbert
6a42d312f6 Match using EndsWith to ignore protocol (and allow http) 2021-02-12 14:59:56 +09:00
Dean Herbert
33c9ecac8a Fix MessageFormatter not working for custom endpoints 2021-02-12 14:54:19 +09:00
Salman Ahmed
f4a7ec57e9 Remove unused using 2021-02-11 13:00:18 +03:00
Salman Ahmed
37e3d95c35 Slight reword in ConfigureConnection's xmldoc 2021-02-11 12:39:06 +03:00
Salman Ahmed
d3c1b47592 Replace nullable API with null connector instead 2021-02-11 12:34:39 +03:00
Salman Ahmed
18acd7f080
Apply documentation suggestions
Co-authored-by: Dean Herbert <pe@ppy.sh>
2021-02-11 10:51:04 +03:00
Salman Ahmed
5fb99fdc52 Rename some members and extract connection closure to separate method 2021-02-11 10:49:16 +03:00
Salman Ahmed
0c5e66205b Merge branch 'master' into abstract-hub-connection 2021-02-11 02:14:22 +03:00
smoogipoo
07b661e28c Add Messagepack support for serialising unknown bindable types 2021-02-10 23:44:06 +09:00
Dan Balasescu
92599aa02b
Merge branch 'master' into user-beatmap-downloading-states-2 2021-02-09 21:06:09 +09:00
Dean Herbert
04c243386b Fix initial state transfer regressing 2021-02-09 16:02:56 +09:00
Salman Ahmed
f04d6d5e5e Update hub clients with changes to connecotr 2021-02-09 08:02:32 +03:00
Salman Ahmed
848b81e952 Remove necessity of making hub client connector a component 2021-02-09 07:53:22 +03:00
Salman Ahmed
71e564d399 Revert clients to be Components 2021-02-09 07:46:00 +03:00
Salman Ahmed
f76f92515e Clean up spectator streaming client with new hub connector 2021-02-09 02:15:56 +03:00
Salman Ahmed
28b815ffe1 Clean up multiplayer client with new hub connector 2021-02-09 02:13:09 +03:00
Salman Ahmed
af345ea5db Add a SignalR hub client connector component 2021-02-09 01:52:35 +03:00
smoogipoo
d8c53e34ae Fix missing using 2021-02-08 19:42:17 +09:00
Dean Herbert
5fbed05d04
Merge pull request #11551 from smoogipoo/fix-leave-room-race-2
Fix client potentially not leaving a room on exiting multiplayer
2021-02-08 19:23:14 +09:00
smoogipoo
6e34e7d750 Merge branch 'master' into user-beatmap-downloading-states-2 2021-02-08 19:08:53 +09:00
smoogipoo
fb8e31a303 Fix incorrect connection building due to bad merges 2021-02-08 17:52:03 +09:00
smoogipoo
da85fb372d Merge branch 'master' into fix-multiplayer-client-connection-reliability 2021-02-08 13:43:24 +09:00
Dean Herbert
dad32da415 Add rate limiting on sending download progress updates 2021-02-05 17:34:05 +09:00
Dean Herbert
110458612d Avoid handling null playlist items when updating avaialability display 2021-02-05 17:19:23 +09:00
Dean Herbert
9e9e382bee Merge branch 'master' into user-beatmap-downloading-states-2 2021-02-05 15:27:17 +09:00
Dean Herbert
c5fa818630 Actually handle case of failing to achieve lock on SemaphoreSlim 2021-02-05 14:08:13 +09:00
Dean Herbert
cd67fe1091 Merge branch 'master' into fix-multiplayer-client-connection-reliability 2021-02-05 14:04:57 +09:00
Dean Herbert
9258836f10
Merge pull request #11641 from smoogipoo/freemods
Add support for optional per-user mods in multiplayer (aka freemod)
2021-02-05 13:59:30 +09:00
smoogipoo
2e85ce5b82 Rename UserMods -> Mods for MultiplayerRoomUser 2021-02-05 12:40:16 +09:00
smoogipoo
85e63afcb4 Rename Mods -> RequiredMods 2021-02-05 12:36:25 +09:00
Dan Balasescu
a71d6a4c97
Merge branch 'master' into multiplayer-beatmap-tracker 2021-02-05 12:25:36 +09:00
smoogipoo
a2fdba3e51 Rename to OnlinePlayBeatmapAvailabilityTracker 2021-02-05 12:24:38 +09:00
Salman Ahmed
d62bbbb762
Enhance documentation
Co-authored-by: Dan Balasescu <smoogipoo@smgi.me>
2021-02-05 00:38:56 +03:00
smoogipoo
cf5233c6ab Merge branch 'master' into freemods 2021-02-05 00:27:14 +09:00
Dean Herbert
76cfeae7e9 Add support for Bindable int in config 2021-02-04 15:10:56 +09:00
Salman Ahmed
db3f9e7cbe Apply documentation suggestion 2021-02-04 02:20:18 +03:00
Dean Herbert
e3d323989c Switch to SignalR 5.0 and implement using better API 2021-02-03 22:04:14 +09:00
smoogipoo
65d45ec74c Unschedule cancellation 2021-02-03 20:50:22 +09:00
Dean Herbert
1380717ebb Use PrimitiveObjectFormatter to simplify code 2021-02-03 20:19:27 +09:00
Dean Herbert
d3f056f188 Add missing licence header 2021-02-03 20:06:25 +09:00
Dean Herbert
75f1ebd5f9 Add custom resolver for mod settings dictionary 2021-02-03 19:46:47 +09:00
Salman Ahmed
62d0036c81 Fix using private constructor on MessagePack object 2021-02-02 17:45:11 +03:00
smoogipoo
97247b7a67 Fix unset key 2021-02-01 19:59:18 +09:00
smoogipoo
9c4c47599f Merge branch 'master' into freemods 2021-02-01 19:28:10 +09:00
smoogipoo
89a42d60fb General cleanup 2021-02-01 18:50:32 +09:00
smoogipoo
f538963607 Extra mods -> user mods 2021-02-01 17:57:32 +09:00
smoogipoo
ac2a995041 Add user and panel states 2021-02-01 17:54:56 +09:00
Dean Herbert
1d8de2f718 Rename class to better match purpose 2021-02-01 17:32:54 +09:00
Dean Herbert
fabb0eeb29 Add signalr messagepack key attribute 2021-02-01 17:27:14 +09:00
Dean Herbert
c73a05d0b5
Merge branch 'master' into multiplayer-beatmap-tracker 2021-02-01 17:24:24 +09:00
Bartłomiej Dach
c3ba92f057 Set canceled result in scheduleAsync
Was holding up the task completion source, and in consequence,
potentially the entire task chain.
2021-01-30 16:13:50 +01:00
Bartłomiej Dach
9ab1ad25eb Merge branch 'master' into fix-leave-room-race-2 2021-01-30 13:41:04 +01:00
smoogipoo
ab9a3e6dd0 Pass allowed mods and consume on server callback 2021-01-29 18:21:22 +09:00
Dean Herbert
a61444690e Remove all usage of CatchUnobservedExceptions
This should no longer be required with the recent framework side change
that stops a game from crashing on unobserved exceptions
(https://github.com/ppy/osu-framework/pull/4171).
2021-01-29 16:32:29 +09:00
Bartłomiej Dach
386f9f7842 Fix typos in comments 2021-01-28 22:36:07 +01:00
Dean Herbert
90a82f986b Fallback to using json for signalr communication if JIT is unavailable 2021-01-28 16:20:19 +09:00
smoogipoo
c408b46a21 Add AllowedMods to MultiplayerRoomSettings model 2021-01-27 22:25:14 +09:00
Dan Balasescu
7d06af916c
Merge branch 'master' into add-messagepack 2021-01-27 13:00:46 +09:00
Bartłomiej Dach
4d4d97661e Fix connection loop always getting a cancelled token 2021-01-26 21:26:50 +01:00
smoogipoo
248989b3eb wip 2021-01-27 01:20:50 +09:00
smoogipoo
085115cba5 Make threading even more thread safe 2021-01-26 22:49:01 +09:00
Dean Herbert
b573c96c07 Move disconnect logic inside connection loop to ensure previous connection is disposed 2021-01-26 18:59:42 +09:00
Dean Herbert
15885c17af Remove unused usings 2021-01-26 18:07:43 +09:00
Dean Herbert
20cfa991bf Switch clients to MessagePack mode 2021-01-26 17:41:21 +09:00
Dean Herbert
9537090d28 Setup all spectator model classes for MessagePack 2021-01-26 16:39:35 +09:00
Dean Herbert
e4fc604163 Setup all multiplayer model classes for MessagePack support 2021-01-26 16:26:03 +09:00
Salman Ahmed
c317d60169 Add offline test scene for beatmap listing overlay 2021-01-26 00:03:20 +03:00
smoogipoo
bb44fcfe31 Prevent some data races 2021-01-25 21:01:39 +09:00
smoogipoo
964976f604 Use a task chain and fix potential misordering of events 2021-01-25 21:01:39 +09:00
Dean Herbert
0f09a7feb9 Avoid semaphore potentially getting held forever 2021-01-25 17:17:04 +09:00
Dean Herbert
994fb2667d Call DisposeAsync instead of StopAsync 2021-01-25 17:11:04 +09:00
Dean Herbert
c05ae3497a Make connect/disconnect private 2021-01-25 17:02:24 +09:00
Dean Herbert
d24d236468 Make OperationCanceledException throwing behaviour consistent 2021-01-22 14:34:58 +09:00
Dean Herbert
9f89b4e6d7 Rewrite connection logic to better handle failure cases
The main goal here is to ensure the connection is built each connection
attempt. Previously, the access token would never be updated, leading to
outdated tokens failing repeatedly (in the connection retry loop) and
never being able to establish a new connection as a result.

Due to threading considerations, this isn't as simple as I would hope it
to be. I'm open to proposals as to a better way of handling this.

Also, keep in mind that this logic will need to be abstracted and
(re)used in `SpectatorClient` as well. I've intentionally not done that
yet until we agree that this is a good direction forward.
2021-01-22 14:25:23 +09:00
Dean Herbert
e6980688f6 Leave the multiplayer channel when leaving multiplayer 2021-01-21 15:42:23 +09:00
Dan Balasescu
76e1f6e57b
Fix locking on incorrect object
Co-authored-by: Bartłomiej Dach <dach.bartlomiej@gmail.com>
2021-01-21 12:45:44 +09:00
smoogipoo
6b139d4cf3 Reset task post-execution 2021-01-20 20:27:58 +09:00
smoogipoo
e005a1cc9f Remove unnecessary condition blocking the part 2021-01-20 20:16:34 +09:00
smoogipoo
5261c01849 Tie JoinRoom() and PartRoom() together 2021-01-20 19:43:42 +09:00
Salman Ahmed
63b4c529a6 Add xmldoc explaining what the multiplayer beatmap tracker is for 2021-01-19 11:59:07 +03:00
Salman Ahmed
5a64abee64 Inline with above method 2021-01-19 11:59:07 +03:00
Salman Ahmed
63ca9de7e4
Rewerite beatmap term properly
Co-authored-by: Bartłomiej Dach <dach.bartlomiej@gmail.com>
2021-01-18 23:00:07 +03:00
Salman Ahmed
5e476fa189 Enforce one missed property back to single-floating type 2021-01-18 22:07:25 +03:00
Salman Ahmed
25f511fd5b Remove unnecessary full querying 2021-01-18 21:34:24 +03:00
Salman Ahmed
dc91cebce9 Merge branch 'master' into multiplayer-beatmap-tracker 2021-01-18 19:15:45 +03:00
Salman Ahmed
88abee705b Add missing event mapping for user beatmap availability change 2021-01-18 10:49:02 +03:00
Salman Ahmed
b6a37c1c15 Make TriggerSuccess(filename) protected and expose in test instead 2021-01-17 22:10:30 +03:00
Salman Ahmed
ccef50e2a2 Log important message if user imported bad-checksum beatmap 2021-01-17 22:10:30 +03:00
Salman Ahmed
0425a659a8 Add null-permissive operator to manager back 2021-01-17 21:19:55 +03:00
Salman Ahmed
d93a853dfd Enforce float type in the download progress path instead 2021-01-17 21:16:48 +03:00
Dean Herbert
5e0fcc4a6c
Merge pull request #11473 from frenzibyte/explicit-search-control
Add "explicit maps" search filter control to beatmap listing
2021-01-17 23:27:15 +09:00
Dean Herbert
5fd644fc57 Unify variable names 2021-01-17 22:42:48 +09:00
Bartłomiej Dach
eb53e32792 Use task completion source for room join flow
On Android, users were unable to join or create multiplayer rooms. The
root cause of that was that the both the wait and set of the
`ManualResetEvent` in `getRoomUsers` occurred on the same thread, which
created a chicken-and-egg situation - the set could not proceed until
the wait had actually completed.

Resolve by substituting the `ManualResetEvent` for a
`TaskCompletionSource` to achieve a promise-style task, which the
previous code was a crude approximation of anyway.

Closes #11385.
2021-01-17 14:40:22 +01:00
Dean Herbert
addd463d26
Merge branch 'master' into explicit-search-control 2021-01-17 21:44:25 +09:00
Dean Herbert
edb6d3907b
Merge pull request #11472 from frenzibyte/explicit-beatmap-markers
Add explicit content markers to beatmap panels and overlay
2021-01-17 21:44:10 +09:00
Salman Ahmed
adb2605d5d Enforce double type in the download progress path
Wasn't sure where to exactly put this, or whether to split it, but it's very small change to worry about, so I guess it's fine being here
2021-01-17 00:12:14 +03:00
Salman Ahmed
23c7afa573 Expose method for setting progress of archive download request 2021-01-17 00:05:51 +03:00
Salman Ahmed
4778686dc4 Expose method for triggering filename-backed success in APIDownloadRequest
Exactly like in `APIRequest<T>`
2021-01-17 00:01:11 +03:00
Salman Ahmed
da9c23f347 Add beatmap availability tracker component for multiplayer 2021-01-17 00:01:11 +03:00
Salman Ahmed
7ad8b167cc Add overridable method for checking local availability of current model 2021-01-17 00:01:11 +03:00
Salman Ahmed
04d17aadfa Add overridable method for verifying models in database 2021-01-17 00:01:11 +03:00
Salman Ahmed
d9034eab26 Make model manager in DownloadTrackingComposite protected 2021-01-16 22:54:54 +03:00
Dan Balasescu
67b5ebadf5
Merge branch 'master' into fix-is-connected-thread-safety 2021-01-15 12:56:21 +09:00
Salman Ahmed
95acc457aa Fix stupid mistake
fuck.
2021-01-13 22:35:21 +03:00
Salman Ahmed
560b1e970c
Merge branch 'master' into user-beatmap-downloading-states 2021-01-13 22:31:31 +03:00
Salman Ahmed
1f12b2bd09 Rename download state Downloaded to Importing 2021-01-13 18:04:53 +03:00
Salman Ahmed
a5f99ed8e6 Merge branch 'explicit-beatmap-markers' into explicit-search-control 2021-01-13 12:53:57 +03:00
Salman Ahmed
e8daea91d2 Add online beatmap "explicit content" property 2021-01-13 12:13:14 +03:00
Dean Herbert
7298adc9d9 Fix non-threadsafe usage of MultiplayerClient.IsConnected 2021-01-12 19:04:16 +09:00
Salman Ahmed
249be461d5 Add "explicit maps" search filter control 2021-01-12 11:09:55 +03:00
Bartłomiej Dach
0d5fbb15ac Fix up code comments
Default value restated in xmldoc was snipped because it's made redundant
by the initialiser and possibly bound to be outdated at some point.
2021-01-11 20:31:52 +01:00
Salman Ahmed
90fb67b377 Update code in-line with decided direction 2021-01-11 20:52:24 +03:00
Salman Ahmed
2286e3679f Downloaded -> Importing 2021-01-11 08:21:07 +03:00
Salman Ahmed
a8dfa5e2a9 Rename typo'd method 2021-01-11 08:04:00 +03:00
Salman Ahmed
e99310b59c Add JsonConstructor attribute 2021-01-11 08:02:57 +03:00
Dean Herbert
deb1ad7bca
Merge branch 'master' into disable-repeat-multi-actions 2021-01-04 23:38:29 +09:00
Salman Ahmed
839f5a7570 Ensure clients don't blow up when given user isn't in room 2021-01-03 18:36:37 +03:00
Salman Ahmed
c8423d1c46 Make constructors design more pleasent to eyes 2021-01-03 18:36:05 +03:00
Salman Ahmed
152e9ecccf Make BeatmapAvailability class in-line with other online data structures 2021-01-03 18:36:05 +03:00
Dean Herbert
6ad1b7767e
Update osu.Game/Online/API/APIMod.cs
Co-authored-by: Salman Ahmed <slmanarendo1950@gmail.com>
2021-01-03 17:04:16 +09:00
Dean Herbert
99fa0e25dc Switch back to FirstOrDefault to allow for weird testing logic to pass 2021-01-03 16:46:24 +09:00
Dean Herbert
29dbb1cc0d Add internal pathway for ensuring correct application of bindable mods 2021-01-03 15:48:28 +09:00
Dean Herbert
23e216fa0b Simplify some default value checks (we are sure the return is an IBindable) 2021-01-03 15:47:15 +09:00
Dean Herbert
1a44338124 Use SingleOrDefault for added safety when looking up mod acronyms 2021-01-03 15:38:30 +09:00
Salman Ahmed
dfa8be9173 Add beatmap availability change state & event methods 2021-01-03 05:48:49 +03:00
Salman Ahmed
09e5e2629a Add user beatmap availability property 2021-01-03 05:48:49 +03:00
Salman Ahmed
8bb84570df Introduce beatmap availability structure 2021-01-03 05:48:49 +03:00
Bartłomiej Dach
9ab1091281
Merge branch 'master' into fix-signalr-reconnect 2021-01-02 13:18:02 +01:00
Dean Herbert
72a6ca7755 Allow signalr to retry connecting when connection is closed without an exception 2021-01-02 16:47:00 +09:00
Bartłomiej Dach
dee694fd50
Merge branch 'master' into mod-using-reference-equality 2020-12-30 19:39:22 +01:00
Bartłomiej Dach
f800448c87 Move game start logic to a higher level 2020-12-30 18:15:48 +01:00
Bartłomiej Dach
dd87478690 Add helper IsHost property to Client 2020-12-30 16:29:19 +01:00
Dean Herbert
497d644a19 Move thread safety / locking logic from MultiplayerRoom 2020-12-30 20:24:50 +09:00
Dean Herbert
3920dac8af Merge branch 'master' into fix-error-spam-on-disconnection 2020-12-30 00:55:37 +09:00
Dean Herbert
6bbd0ecfac Remove unused lock object 2020-12-29 17:39:00 +09:00
Bartłomiej Dach
e9b0652359 Move ready-up operation logic again to client
To salvage ready up button tests.
2020-12-29 09:16:02 +01:00
Dean Herbert
03b78d1c4b Handle SocketExceptions and HttpRequestExceptions more silently
These can occur when a network connection is completely unavailable (ie.
host resolution failures are occurring). Currently these would appear as
important errors which spammed the notification overlay every retry
forever, while no network connection is available.

I also took this opportunity to remove a lot of `bool` passing which was
no longer in use (previously the fail count / retry process was
different to what we have today).
2020-12-29 16:22:11 +09:00
Bartłomiej Dach
903dca875e Make localUser a client property 2020-12-29 07:46:22 +01:00
Dean Herbert
2cb84c5111 Fix error message being shown to user on multiplayer disconnection when not in room 2020-12-29 15:19:52 +09:00
Dean Herbert
f31a0e455a Minor xmldoc rewording 2020-12-29 14:29:40 +09:00
Dean Herbert
e3a41f6118 Rename variable to make more sense
It needs to be explicitly stated that the users in this list are related
to the *joined* room. Especially since it's sharing its variable name
with `SpectatorStreamingClient` where it has the opposite meaning (is a
list of *globally* playing players).
2020-12-29 14:27:35 +09:00
Dean Herbert
6aeb7ece66 Tidy up update state code, naming, xmldoc 2020-12-29 14:25:08 +09:00
Bartłomiej Dach
1d311a6680 Change PlayingUsers population logic to match expectations 2020-12-28 19:27:56 +01:00
Salman Ahmed
41b79d938b Fix wrong checks.. 2020-12-28 15:30:52 +03:00
Salman Ahmed
5efcdbd431 Fix IMod now using reference equality as well 2020-12-28 15:19:28 +03:00
Dean Herbert
1b7c72f03b
Merge branch 'master' into changelog-refactor 2020-12-28 11:00:14 +09:00
Dean Herbert
3b5260fd67
Merge branch 'master' into fix-gameplay-leaderboard-clickable-avatars 2020-12-27 19:00:38 +09:00
Salman Ahmed
43f8f3638a Fix mod using reference equality unless casted to IMod 2020-12-27 02:42:13 +03:00
Bartłomiej Dach
0b42b4b955 Rename {Drawable -> Clickable}Avatar 2020-12-26 14:35:11 +01:00
Bartłomiej Dach
a1af749b4b
Merge branch 'master' into patch/11310 2020-12-26 13:19:13 +01:00
Bartłomiej Dach
b059b5d616 Merge branch 'master' into fix-ready-button-crash 2020-12-26 12:41:47 +01:00
Dean Herbert
b9d725ab49 Don't copy spotlight category 2020-12-26 20:13:28 +09:00
Bartłomiej Dach
04d54c40db Allow all StatefulMultiplayerClient schedules to run inline
Fixes test failures due to not allowing to do so, therefore inverting
execution order in some cases - for example, calling

        JoinRoom(room);
        LeaveRoom();

on the update thread would invert execution order due to the first being
unscheduled but the second being scheduled.
2020-12-26 12:04:10 +01:00
Bartłomiej Dach
dae27fefe4 Run user list copy inline if possible
`getRoomUsers()` was not safe to call from the update thread, as
evidenced by the test failures. This was due to the fact that the added
reset event could never actually be set from within the method, as the
wait was blocking the scheduled set from ever proceeding.

Resolve by allowing the scheduled copy & set to run inline if on the
update thread already.
2020-12-26 12:03:03 +01:00
Neuheit
e7339d6959 fix(osu.Game): Ensure Category property is copied in Room. 2020-12-25 21:07:33 -05:00
Dean Herbert
f9900720d5 Rename OnRoomChanged to OnRoomUpdated to avoid confusion 2020-12-26 10:49:02 +09:00
Dean Herbert
5ce5b6cec0 Fix non-safe thread access to room users on room join 2020-12-26 10:25:16 +09:00
Dean Herbert
e0198c36ae Fix user population happening in single file 2020-12-26 09:48:13 +09:00
Bartłomiej Dach
0bd9f68cbd Refactor update stream colour mapping code 2020-12-25 21:06:03 +01:00
Bartłomiej Dach
83fb7c7a1a Re-namespace all files in OnlinePlay directory 2020-12-25 16:50:09 +01:00
Dean Herbert
2d7f9bf290 Revert RoomCategory naming change to avoid json deserialization failures 2020-12-25 23:34:29 +09:00
Dean Herbert
e49dce2c86 Fix some missed renames 2020-12-25 15:34:13 +09:00
Dean Herbert
5d4b73baa5 RealtimeMultiplayer -> Multiplayer 2020-12-25 14:10:59 +09:00
Dean Herbert
a1384942b1 Timeshift -> Playlists at a code level 2020-12-25 13:11:21 +09:00
Dean Herbert
3d28a0ccef
Merge pull request #11271 from peppy/dev-server
Prefer connecting to dev server when running in DEBUG
2020-12-24 23:01:19 +09:00
Bartłomiej Dach
d5c348b568 Remove explicit public access modifier from interface 2020-12-24 13:44:46 +01:00
Dean Herbert
66a23c22e5 Fix various tests failing due to dependence on specific online data 2020-12-24 21:28:24 +09:00
Bartłomiej Dach
4fb2610c82
Merge branch 'master' into frame-bundle-accuracy 2020-12-24 11:20:06 +01:00
Dean Herbert
323da82477 Add website root URL and update most links to use it
For what it's worth, I intentionally didn't include news / changelog /
supporter, because these should never change.
2020-12-24 18:11:42 +09:00
Dean Herbert
eb795a2127 Move all endpoint information to a configuration class 2020-12-24 17:58:38 +09:00
Dean Herbert
1f80f01b53 Add accuracy to frame bundle header 2020-12-24 14:46:52 +09:00
Dean Herbert
43370d7021
Merge pull request #11273 from bdach/duplicate-user-in-mp-room
Improve reliability of handling user joined messages
2020-12-24 14:31:44 +09:00
Dean Herbert
b29a5e2073
Merge pull request #11270 from bdach/better-error-handling
Improve error handling at realtime room settings screen
2020-12-24 13:23:49 +09:00
Bartłomiej Dach
a71496bc4e Sanity check received user joined messages
While test failures fixed in 9843da5 were a shortcoming of the test,
they exposed a potential vulnerable point of the multiplayer client
logic. In case of unreliable message delivery it is not unreasonable
that duplicate messages might arrive, in which case the same scenario
that failed in the tests could crash the game.

To ensure that is not the case, explicitly screen each new joined user
against the room user list, to ensure that duplicates do not show up.
`UserLeft` is already tolerant in that respect (if a user is requested
to be removed twice by the server, the second removal just won't do
anything).
2020-12-23 21:00:49 +01:00
Dean Herbert
e89583d732 Prefer connecting to dev server when running in DEBUG 2020-12-24 01:33:19 +09:00
Bartłomiej Dach
3b0bf11366 Fix JoinRoom failing to return canceled token
As it turns out, `Task.FromCanceled` expects to receive an already
cancelled `CancellationToken`, which `CancellationToken.None` is not.
2020-12-23 17:01:01 +01:00
Dean Herbert
4296f61d6c Tidy up event flow of change settings call 2020-12-23 22:39:14 +09:00
Bartłomiej Dach
94e4928c4b Bring back accidentally-removed license header 2020-12-23 11:27:15 +01:00
Dean Herbert
0ddcab574f Rename method to avoid weird code analysis rule 2020-12-23 17:14:58 +09:00
Dean Herbert
7cc38f03d1 Use extension method in all call sites of fire-and-forget async usage 2020-12-23 17:10:34 +09:00
Dean Herbert
569c4092ef Move notification to stateful client so it is only shown to the user from one location 2020-12-23 16:35:39 +09:00
Dean Herbert
00d50150de Ensure the current room is left at a mutliplayer client level on client disconnection 2020-12-23 16:35:39 +09:00
Bartłomiej Dach
08d87ccb1e
Merge branch 'master' into present-recommended 2020-12-22 23:36:13 +01:00
Dean Herbert
12876d7fb6 Add very basic error handling on ChangeSettings calls 2020-12-22 16:50:30 +09:00
Dean Herbert
3f966386ed Fix compile time failure due to potentially null connection 2020-12-22 15:15:32 +09:00
Dean Herbert
d229fbba6e
Merge branch 'master' into present-recommended 2020-12-22 13:52:29 +09:00
smoogipoo
c07b2d89e6 Merge branch 'master' into realtime-multiplayer-2 2020-12-21 18:44:03 +09:00
Dean Herbert
3e3d5b2e37
Merge pull request #11235 from smoogipoo/fix-apibeatmapset-deserialisation
Fix metadata lost in beatmapset deserialisation
2020-12-21 18:03:30 +09:00
Dean Herbert
44af32dc47
Merge pull request #11234 from smoogipoo/fix-category-serialisation
Fix room category being serialised as int
2020-12-21 18:03:10 +09:00
Dean Herbert
5ec64c0348
Merge pull request #11232 from smoogipoo/participant-count-serialisation
Make participant count non-nullable
2020-12-21 17:34:01 +09:00
smoogipoo
93cac000e5 Merge branch 'fix-apibeatmapset-deserialisation' into realtime-multiplayer-2 2020-12-21 17:16:28 +09:00
smoogipoo
eb46c9ce9b Fix metadata lost in beatmapset deserialisation 2020-12-21 17:11:30 +09:00
smoogipoo
04af072da7 Merge branch 'fix-category-serialisation' into realtime-multiplayer-2 2020-12-21 16:57:22 +09:00
smoogipoo
e23d81bfc6 Use enum property 2020-12-21 16:56:45 +09:00
smoogipoo
a021aaf546 Fix room category being serialised as ints 2020-12-21 16:42:21 +09:00
smoogipoo
5d73359bd7 Make participant count non-nullable 2020-12-21 16:35:19 +09:00
smoogipoo
64a32723f3 One more case 2020-12-21 16:23:42 +09:00
smoogipoo
14ea49a14d Merge branch 'nullable-endsat' into realtime-multiplayer-2 2020-12-21 16:22:16 +09:00
smoogipoo
a59124dd93 Make room duration/endsat nullable 2020-12-21 16:18:39 +09:00
Angela Zhang
74bd2f41e6 Style fixes 2020-12-20 13:51:39 -06:00
Angela Zhang
7d326c7f24 Review changes + added tests 2020-12-20 13:18:00 -06:00
Bartłomiej Dach
bcd140b8df
Merge branch 'master' into realtime-ready-button 2020-12-20 18:20:57 +01:00
smoogipoo
b31f4e9e85 Merge branch 'stateful-multiplayer-client' into realtime-multiplayer-2 2020-12-21 00:41:42 +09:00
smoogipoo
a893360c0e Reword comment 2020-12-21 00:41:14 +09:00
smoogipoo
536df074a9 Don't attempt to re-map existing beatmap/ruleset (for testing) 2020-12-21 00:02:49 +09:00
smoogipoo
1d7d8bd6fc Hook up a realtime multiplayer client 2020-12-20 23:26:31 +09:00
smoogipoo
fdfe3c2b36 Merge branch 'realtime-ready-button' into realtime-multiplayer-2 2020-12-20 23:11:06 +09:00
smoogipoo
4ada0e17c0 Merge branch 'abstract-room-manager' into stateful-multiplayer-client 2020-12-20 23:10:05 +09:00
smoogipoo
9d13a5b06a Fix potential cross-thread list access 2020-12-20 22:53:07 +09:00
smoogipoo
f876a329b1 Fire-and-forget leave-room request 2020-12-20 22:51:33 +09:00
smoogipoo
45107280a0 Make TimeBetweenPolls into a bindable 2020-12-20 18:34:54 +09:00
smoogipoo
0cf078562d Split method up and remove nested scheduling 2020-12-20 18:30:00 +09:00
smoogipoo
508f73d949 Fix up comment 2020-12-20 18:25:54 +09:00
smoogipoo
8b1f5ff492 Only instantiate ruleset once 2020-12-20 18:25:23 +09:00
smoogipoo
724e4b83fe Fix nullability and remove early check 2020-12-20 18:21:03 +09:00
Bartłomiej Dach
d392e0f27e Extract shared rank-formatting helper 2020-12-19 15:04:22 +01:00
smoogipoo
2fc5561b7e Add handling for GetRoomRequest() 2020-12-19 01:22:52 +09:00
smoogipoo
c6555c53cc Add a testable realtime room manager 2020-12-19 01:17:24 +09:00
smoogipoo
9ceb090f04 Fix ambiguous reference 2020-12-19 00:53:06 +09:00
smoogipoo
ab9158c306 Add a stateful multiplayer client 2020-12-19 00:53:06 +09:00
Dean Herbert
9618f512d7
Merge pull request #11190 from frenzibyte/api-friends-list
Add global friends list to API providers
2020-12-18 16:44:29 +09:00
Dean Herbert
a749dca20b Remove left over using statement 2020-12-18 15:43:15 +09:00
Dean Herbert
99b670627a Remove unused placeholder friend in DummyAPI implementation 2020-12-18 15:25:12 +09:00
Dean Herbert
57c5d45c02 Standardise and extract common connection failure handling logic 2020-12-18 15:19:38 +09:00
Dean Herbert
d36169f697 Move friend request to a more understandable place in connection flow 2020-12-18 15:16:48 +09:00
Dean Herbert
206bf3713e Make IAPIProvider read-only bindables into IBindables 2020-12-18 15:16:36 +09:00
Angela Zhang
45482e8709 Whitespace fixes 2020-12-17 18:43:39 -06:00
Salman Ahmed
8a01e567a1 Fix API potentially getting stuck in connecting state 2020-12-18 03:06:28 +03:00
Angela Zhang
454c7538c0 CI Style Fixes 2020-12-17 17:59:36 -06:00
Angela Zhang
d8864473b2 Merge branch 'keyboard_shortcuts' into jcramos/ctrl_shift_t 2020-12-17 16:56:44 -06:00
Angela Zhang
71a082110a Making style changes + supports reopening PM chats 2020-12-17 16:56:34 -06:00
Bartłomiej Dach
569caa9500
Merge branch 'master' into add-bundle-header 2020-12-17 20:55:24 +01:00
Dean Herbert
bb586f3175
Merge pull request #11193 from smoogipoo/add-multiplayer-beatmap-checksum
Add beatmap checksum to MultiplayerRoomSettings
2020-12-17 23:55:38 +09:00
smoogipoo
c15bb6b928 Add beatmap hash to MultiplayerRoomSettings 2020-12-17 22:04:24 +09:00
Salman Ahmed
5d180753fa Complete connection once friends list is succesfully fetched 2020-12-17 13:44:30 +03:00
Salman Ahmed
78ce6f1cd2 Add friends list to API providers 2020-12-17 13:30:55 +03:00
Dean Herbert
fe76a00621 Merge branch 'master' into add-bundle-header 2020-12-17 16:13:40 +09:00
Joseph-Ramos-CMU
b37a983fbf Formatting fixes
Fixed some formatting issues to comply with InspectCode.
2020-12-16 12:56:36 -05:00
Joseph-Ramos-CMU
2f8a085adf Reworked reopening last tab to no longer use recursion
A reviewer of the pull request was concerned about recursion. I changed
the code to be iterative.
2020-12-16 12:04:07 -05:00
Joseph-Ramos-CMU
7b169c4f62 Changed internal closedChannel list to store channels names instead of channel objects
This is for efficiency purposes; it's more efficient to just store
the names than store the whole object.
2020-12-16 10:13:50 -05:00
smoogipoo
9571157841 Use ints for userid parameters 2020-12-16 20:04:36 +09:00
Dean Herbert
72d296f412 Add received timestamp and basic xmldoc for header class 2020-12-16 16:19:53 +09:00
Dean Herbert
84a0770789 Change frame header to use dictionary for compatibility 2020-12-16 15:35:46 +09:00
Dean Herbert
88b3bf06e8 Merge branch 'master' into add-bundle-header 2020-12-16 13:40:15 +09:00
Dean Herbert
ef57ae6f40
Merge pull request #11127 from peppy/realtime-multiplayer
Add client-side models and interfaces required for multiplayer
2020-12-16 13:22:01 +09:00
smoogipoo
31fe28b8b3 Remove IStatefulMultiplayerClient 2020-12-16 12:32:53 +09:00
smoogipoo
4cd290af11 Split server interfaces 2020-12-16 12:31:11 +09:00
Angela Zhang
456c0751fd
Merge pull request #8 from angelaz1/jcramos/ctrl_shift_t
Ctrl+Shift+t Chat Shortcut
2020-12-15 16:54:11 -06:00
Joseph-Ramos-CMU
bd2765ecc4 Fixed style concerns 2020-12-14 13:23:43 -05:00
Dean Herbert
0d9c1cb5d3 Fix issues with data serialisation 2020-12-14 18:41:24 +09:00
Dean Herbert
64a2526678 Add header class and basic flow for propagating data updates 2020-12-14 17:33:23 +09:00
Joseph-Ramos-CMU
3301f532ee Additional formatting
Ran the dotnet format as well as the .\InspectCode.ps1 tools, and
fixed the style issues they found.
2020-12-13 23:27:48 -05:00
Joseph-Ramos-CMU
08a2cdaf8d Minor formatting changes 2020-12-13 21:02:35 -05:00
Joseph-Ramos-CMU
2863187b16 Changing behvaior for channels that have already been reopened
Ctrl+Shift+t will now skip trying to reopen any channels that are
already open, and will instead attempt to open the next still-closed channel.
2020-12-13 20:46:02 -05:00
Joseph-Ramos-CMU
5481ba43c7 Fixed a bug where Ctrl+Shift+t shortcut was using the wrong list
The JoinLastClosedChannel code was using the joinedChannels list instead
of the closedChannels list. Fixing this bug made the Ctrl+Shift+t
shortuct work as expected.
2020-12-13 14:14:57 -05:00
Joseph-Ramos-CMU
2d98da0d61 Untested Ctrl+Shift+T shortcut prototype
Added a list to the ChannelManager class that tracks
which tabs I closed. Works like a stack, where it adds to the end
every time I close a tab. Then added a function that uses
this list to open the last closed channel, and added a shortcut inside of ChatOverlay,
similar to how jmeng implemented shortcuts.

Code is currently untested.
2020-12-13 13:21:50 -05:00
Dean Herbert
aedb18b9f2 Make RulesetID non-nullable 2020-12-11 18:14:33 +09:00
Dean Herbert
d3b2e2b36e Change locking method to better allow cross-thread locking 2020-12-11 14:43:39 +09:00
Dean Herbert
719b08b22f Make room setting's BeatmapID non-nullable 2020-12-11 14:11:42 +09:00
Dean Herbert
c1c0b9a9db Add realtime to room categories 2020-12-11 14:10:45 +09:00
Dean Herbert
3fb41a20b5 Add room name to settings 2020-12-11 13:27:52 +09:00
Dean Herbert
c8e3c7e77b Add stateful client interface 2020-12-09 17:45:07 +09:00
Dean Herbert
bb97eae8b1 Update outdated exception references in xmldoc 2020-12-09 16:02:37 +09:00
Dean Herbert
1e08b298b8 Remove unnecessary exception type 2020-12-09 16:01:09 +09:00
Dean Herbert
578e5cb92e Also make InvalidStateException serializable 2020-12-09 15:59:13 +09:00
Dean Herbert
ab00a15555 Add JsonConstructor specs to allow for correct deserialization of readonly fields 2020-12-09 15:05:57 +09:00
Dean Herbert
bef52af1da Move client state class to server implementation
Never used by client.
2020-12-09 15:05:33 +09:00
Dean Herbert
e09715d71e Add ToString implementation to MultiplayerRoom for easier debug 2020-12-09 14:47:26 +09:00
Dean Herbert
c92c2cbfc0 Change exceptions which should be returned to the user to HubException type
See
https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.signalr.hubexception?view=aspnetcore-5.0.
2020-12-09 14:46:44 +09:00
Dean Herbert
48129c52d6 Change get-only property for now 2020-12-09 12:38:24 +09:00
Dean Herbert
427d41bab5 Add missing licence headers 2020-12-09 12:17:37 +09:00
Dean Herbert
0eb5b16454 Remove Empty() implementation for RoomSettings until otherwise necessary 2020-12-09 12:12:03 +09:00
Dean Herbert
1013749a83 Change user id type to int 2020-12-09 12:10:47 +09:00
Dean Herbert
fd4fa963ac Standardise exception naming 2020-12-09 12:07:19 +09:00
Dean Herbert
2046cbe2d9 Add missing exceptions to server xmldoc 2020-12-09 12:05:50 +09:00
Dean Herbert
ff5150a14d Fix typo in IMultiplayerClient xmldoc 2020-12-09 12:03:52 +09:00
Dean Herbert
02f5fda330 Add missing final newline in file 2020-12-08 21:15:10 +09:00
Dean Herbert
aa68ae4ff2 Change locking mechanism for multiplayer rooms to use using-disposal pattern
Was required to lock over `await` calls server-side.
2020-12-08 20:43:18 +09:00
Dean Herbert
d76fabedf9 Add note about LoadRequested only being sent to a subset of room users 2020-12-08 20:43:18 +09:00
Dean Herbert
021a116093 Add extra xmldoc covering the fact that MatchStarted is received by all users 2020-12-08 20:43:18 +09:00
Dean Herbert
df908f90b2 Add exception to be thrown when an operation is requested requiring host when not host 2020-12-08 20:43:18 +09:00
Dean Herbert
2433838d58 Add methods covering match start / end 2020-12-08 20:43:18 +09:00
Dean Herbert
2aedd82e27 Document room states and remove unnecessary WaitingForResults state 2020-12-08 20:43:18 +09:00
Dean Herbert
147db0abe2 Fix client naming and xmldoc 2020-12-08 20:43:18 +09:00
Dean Herbert
60550b73f7 Add missing states and xmldoc for all states' purposes 2020-12-08 20:43:18 +09:00
Dean Herbert
8eccfa476c Add loading states 2020-12-08 20:43:18 +09:00
Dean Herbert
345352be67 Mark PerformUpdate as an instant handle method (doesn't really help with anything) 2020-12-08 20:43:18 +09:00
Dean Herbert
11a7057289 Add notification flow for user state changes in room 2020-12-08 20:43:18 +09:00
Dean Herbert
dbe048cdc6 Add client method for notifying about host changes 2020-12-08 20:43:18 +09:00
Dean Herbert
a4ca8d2998 Ensure multiplayer rooms are instantiated with a room ID 2020-12-08 20:43:18 +09:00
Dean Herbert
71de7ce0a3 Add missing methods to server interface 2020-12-08 20:43:18 +09:00
Dean Herbert
5f5c0d5533 Return room model when joining 2020-12-08 20:43:18 +09:00
Dean Herbert
5d2ca7fc39 Make remaining model classes nullable and serializable 2020-12-08 20:43:18 +09:00
Dean Herbert
2365d65610 Move business logic out of MultiplayerRoom 2020-12-08 20:43:18 +09:00
Dean Herbert
42b1e9d6a4 Add xmldoc coverage of MultiplayerRoom 2020-12-08 20:43:18 +09:00
Dean Herbert
4f449ba821 Rename idle state 2020-12-08 20:43:18 +09:00
Dean Herbert
5a231cef15 Add thread safety for external operations on MultiplayerRoom 2020-12-08 20:43:18 +09:00
Dean Herbert
327799c263 Rename multiplayer server file to match class 2020-12-08 20:43:18 +09:00
Dean Herbert
b3bdaaa7b5 Move exceptions to common code 2020-12-08 20:43:18 +09:00
Dean Herbert
e193f8214d Remove unnecessary room id from leave room request 2020-12-08 20:43:18 +09:00
Dean Herbert
882ace6efe Make MultiplayerRoomUser equatable 2020-12-08 20:43:18 +09:00
Dean Herbert
baf16cfbc3 Add room settings related model and event flow 2020-12-08 20:43:18 +09:00
Dean Herbert
6e5846d91b Fix serialization failure due to missing set 2020-12-08 20:43:18 +09:00
Dean Herbert
ff52a5ddc6 Add callbacks for join/leave events to notify other room occupants 2020-12-08 20:43:18 +09:00
Dean Herbert
ca86524c92 Add locking on join/leave operations 2020-12-08 20:43:18 +09:00
Dean Herbert
fdf025942b Ensure room is locked when mutating users 2020-12-08 20:43:18 +09:00
Dean Herbert
8ebdb5723b Add models for users and rooms 2020-12-08 20:43:18 +09:00
Dean Herbert
f4ccbbd092 Add basic server implementation 2020-12-08 20:43:18 +09:00
Dean Herbert
daed27460c Add simple user state class 2020-12-08 20:43:18 +09:00
Dean Herbert
be4a668e0b Add basic structure for multiplayer state and model components 2020-12-08 20:43:18 +09:00
smoogipoo
f599427080 Implement TimeshiftFilterControl 2020-12-07 22:04:35 +09:00
Endrik Tombak
cbbcf36eaa Merge branch 'master' of https://github.com/ppy/osu into present-recommended 2020-12-03 19:38:32 +02:00
Dean Herbert
37d550f42a
Merge pull request #11035 from smoogipoo/add-playlist-length 2020-12-03 18:39:54 +09:00
Dean Herbert
3550e5b30f Add length display to room screen as well 2020-12-03 16:42:06 +09:00
smoogipoo
d5dccbc3d7 Fix spectator not being thread-safe 2020-12-02 19:13:09 +09:00
Endrik Tombak
944f3480c2 Merge branch 'master' of https://github.com/ppy/osu into present-recommended
 Conflicts:
	osu.Game/OsuGameBase.cs
	osu.Game/Screens/Select/DifficultyRecommender.cs
	osu.Game/Screens/Select/SongSelect.cs
2020-11-21 14:01:01 +02:00
Bartłomiej Dach
610ed99ae3 Add null checks to unguarded resolved-as-null fields 2020-11-14 14:52:58 +01:00
Dean Herbert
cfb42037cf Refactor request string logic to avoid linq usage 2020-11-09 12:23:29 +09:00
Dean Herbert
893979b3de Add exception if attempting to exceed the maximum supported lookup size for one request 2020-11-06 17:00:29 +09:00
Dean Herbert
db039da668 Add and consume multi-lookup API endpoint 2020-11-06 17:00:29 +09:00
Dean Herbert
aa252d562a Rename top user request to make way for new type 2020-11-06 17:00:29 +09:00
Dean Herbert
1e1569eb53 Use int instead of long for user_id fields for now 2020-11-06 12:59:46 +09:00
Dean Herbert
a3c67aabe2 Merge branch 'master' into spectator-listing 2020-11-03 19:56:25 +09:00
Dean Herbert
ed30756c19 Add test coverage for new display (and remove live version for now) 2020-11-02 20:41:14 +09:00
Dean Herbert
a89aeaf1ce Add very basic connection status logging for spectator streaming client 2020-11-02 17:32:10 +09:00
Bartłomiej Dach
23d9fa4dfa Merge branch 'master' into spectator-replay-watcher 2020-11-01 15:53:37 +01:00
Bartłomiej Dach
5903c3be90 Fix inaccurate xmldoc 2020-11-01 14:39:10 +01:00
Dean Herbert
1db8dfd03e
Merge branch 'master' into seasonal-backgrounds 2020-10-30 22:53:51 +09:00
Max Hübner
f27ce7521d Make "Sometimes" setting depend on season end date, rather than chance 2020-10-30 10:27:43 +01:00
Dean Herbert
87be7d162b
Merge branch 'master' into spectator-replay-watcher 2020-10-30 00:25:17 +09:00
Bartłomiej Dach
fa53549ed2 Mark request fields as possibly-null 2020-10-28 22:57:03 +01:00
Andrei Zavatski
5c2c5f2000 Use existing ScoreRank for rank filter 2020-10-28 23:35:08 +03:00
Andrei Zavatski
6fd3686c4d Use IReadOnlyCollection instead of List in SearchBeatmapSetsRequest 2020-10-28 02:36:35 +03:00
Andrei Zavatski
c4efceceb2 Use char instead of sting for request parameter creation 2020-10-27 23:57:11 +03:00
Andrei Zavatski
008d1d697c Implement filtering by rank achieved 2020-10-27 23:14:48 +03:00
Andrei Zavatski
1710b396e7 Implement BeatmapSearchMultipleSelectionFilterRow 2020-10-27 22:27:29 +03:00
Andrei Zavatski
1b40b56d41 Add ability to search by play criteria 2020-10-27 21:30:53 +03:00
Andrei Zavatski
742a96484b Add ability to set extra parameters to SearchBeatmapSetsRequest 2020-10-27 20:13:18 +03:00
Dean Herbert
c1e7cd6e47 Stop replay playback when frames are starved 2020-10-27 18:58:37 +09:00
Dean Herbert
154ccf1b49 Expose events from streaming client 2020-10-27 18:58:37 +09:00
Dean Herbert
68719bb23d Rename other variables to match 2020-10-27 10:59:24 +09:00
Bartłomiej Dach
7392876b5f Fix mania crashing due to spectator client handling frames with unconverted beatmap 2020-10-27 00:35:25 +01:00
Dean Herbert
dfe07271de Add very basic latency handling to spectator test 2020-10-26 16:31:39 +09:00
Dean Herbert
b86347dc81 Merge branch 'master' into spectator 2020-10-26 13:39:07 +09:00
Dean Herbert
9caa7ff64d Remove debug endpoint 2020-10-26 13:38:05 +09:00
Dean Herbert
e20a986401 Add ruleset to state 2020-10-23 17:24:19 +09:00
Dean Herbert
e99cf369fa Don't worry about EndPlaying being invoked when not playing 2020-10-23 13:33:23 +09:00
Dean Herbert
f11bcfcb8f
Remove unnecessary public specification in interface
Co-authored-by: Bartłomiej Dach <dach.bartlomiej@gmail.com>
2020-10-23 10:03:33 +09:00
Max Hübner
09d49aa0f7 Add GetSeasonalBackgroundsRequest 2020-10-22 18:25:01 +02:00
Dean Herbert
54d666604b Fix incorrect order of flag settings 2020-10-22 22:56:23 +09:00
Dean Herbert
9f2f8d8cc7 Fix missing licence headers 2020-10-22 19:41:10 +09:00
Dean Herbert
147d502da1 Fix initial play state not being kept locally if not connected 2020-10-22 19:30:07 +09:00
Dean Herbert
ee2513bf4b Add batch sending 2020-10-22 19:17:19 +09:00
Dean Herbert
34e889e66e Don't watch every user in normal gameplay (but allow so in test) 2020-10-22 18:38:03 +09:00
Dean Herbert
1ab6f41b3b Add basic send and receive test 2020-10-22 18:10:27 +09:00
Dean Herbert
c834aa6051 Use APIMod for mod serialization 2020-10-22 17:48:15 +09:00
Dean Herbert
0611b30258 Drop webpack 2020-10-22 17:48:15 +09:00
Dean Herbert
05697dfe68 Add spectator state object support 2020-10-22 17:48:15 +09:00
Dean Herbert
2021945a8c Add retry/error handling logic 2020-10-22 17:48:15 +09:00
Dean Herbert
4788b4a643 Expose oauth access token via api interface 2020-10-22 17:48:15 +09:00
Dean Herbert
175fd512b0 Send frames to streaming client from replay recorder 2020-10-22 17:48:15 +09:00
Dean Herbert
93db75bd41 Begin shaping the spectator streaming component 2020-10-22 17:48:15 +09:00
Dean Herbert
c6db832efa Add xmldoc notes about thread safety of api bindables 2020-10-22 14:56:20 +09:00
Dean Herbert
db4dd3182b Add xmldoc to spectator interfaces 2020-10-22 14:46:21 +09:00
Dean Herbert
b39a4da6bc Add initial classes for spectator support 2020-10-22 14:46:21 +09:00
Dean Herbert
da573c7487 Remove unused usings 2020-10-22 14:44:10 +09:00
Dean Herbert
3fe6f77444 Fix cases of multiple bdl methods 2020-10-22 14:30:49 +09:00
Dean Herbert
9753dab93b Remove IOnlineComponent and change existing components to use bindable flow 2020-10-22 14:19:12 +09:00
Dean Herbert
002ade51fc
Merge pull request #9816 from voidedWarranties/duplicate-multi-room 2020-10-19 19:02:03 +09:00
Dean Herbert
6d22f0e196 Use existing copy method and update xmldoc 2020-10-19 17:15:13 +09:00
Dean Herbert
61a43770bd Merge branch 'master' into duplicate-multi-room 2020-10-19 16:58:45 +09:00
Dean Herbert
d6efa3069a Merge branch 'master' into fix-login-placeholder-inheritance 2020-10-19 16:25:44 +09:00
Berkan Diler
fe3a23750c Use char overloads for string methods 2020-10-16 11:52:29 +02:00
Dan Balasescu
73edb87363
Merge pull request #10303 from peppy/more-textbox-entry
Add textbox entry for speed multiplier and volume
2020-10-01 20:42:14 +09:00
Dean Herbert
61e62929ee Apply changes in line with framework event logic update 2020-10-01 13:06:01 +09:00
smoogipoo
297168ecc4 Fix scores sometimes not being re-standardised correctly 2020-09-29 19:06:09 +09:00
Dean Herbert
ef44c7d063
Merge branch 'master' into score-recalc 2020-09-10 18:30:41 +09:00
smoogipoo
bbef7ff720 Fix leaderboard loading spinner disappearing too early 2020-09-09 20:19:07 +09:00
smoogipoo
37a659b2af Refactor/add xmldocs 2020-09-09 17:36:47 +09:00
smoogipoo
117c7ec6b2 Merge branch 'master' into score-recalc 2020-09-09 14:38:36 +09:00
smoogipoo
bff652a26f Persist nulls to the top score bindable 2020-09-02 14:29:46 +09:00
smoogipoo
9e3b809cab Rename to user_score to match API 2020-09-01 15:42:47 +09:00
smoogipoo
d22de26afb Add whitespace 2020-08-31 20:08:36 +09:00
smoogipoo
6ed191786f Add support for position 2020-08-31 20:01:59 +09:00
smoogipoo
77698ec31e Add support for showing own top score in timeshift 2020-08-31 19:54:57 +09:00
smoogipoo
d1ceb81797 Rename request 2020-08-31 19:54:41 +09:00
smoogipoo
ed74c39b55 Move UserTopScoreContainer into base leaderboard 2020-08-31 19:54:22 +09:00
smoogipoo
d7bbb362bf Separate bindables 2020-08-28 22:51:19 +09:00
smoogipoo
1e5e5cae0c Add support for standardised -> classic changes 2020-08-28 21:34:34 +09:00
smoogipoo
4d15f0fe52 Implement basic score recalculation 2020-08-28 19:16:46 +09:00
Poliwrath
97637bc747 remove new.ppy.sh from MessageFormatter 2020-08-26 02:50:02 -04:00
Joseph Madamba
4d6b52a0d6
Simply condition
Co-authored-by: Dean Herbert <pe@ppy.sh>
2020-08-17 23:08:51 -07:00
Joehu
e0383f6100 Change format of rank tooltip 2020-08-17 22:07:04 -07:00
Joehu
848f3bbf51 Show tooltip of leaderboard score rank when 1000 or higher 2020-08-17 21:09:55 -07:00
voidedWarranties
9e4b9188e1 Cache LoungeSubScreen, separate method, rename option 2020-08-15 13:06:16 -07:00
voidedWarranties
3a97ee4712 Context menu for duplicating multi rooms 2020-08-09 16:16:01 -07:00
Dean Herbert
4189e918a3
Merge branch 'master' into news 2020-08-03 14:16:45 +09:00
Dan Balasescu
d63f040477
Merge branch 'master' into multi-position 2020-07-31 23:10:25 +09:00
Dean Herbert
909b38a019
Merge branch 'master' into multi-pagination 2020-07-31 22:41:24 +09:00
smoogipoo
b361761d86 Add position display in contracted score panels 2020-07-31 22:02:25 +09:00
smoogipoo
f1e721e396 Rewrite test scene and add more tests 2020-07-31 21:39:50 +09:00
smoogipoo
2b77f99f56 Initialise some response parameters 2020-07-31 20:55:44 +09:00
smoogipoo
8e8a11bb72 Add APIRequest.TriggerFailure() for testing 2020-07-31 20:55:26 +09:00
smoogipoo
eadef53e68 Add more annotations 2020-07-31 17:43:40 +09:00
smoogipoo
88e179d8aa Split out index-only response 2020-07-31 17:40:58 +09:00
Dean Herbert
9e6d562872 Send in initial score request instead 2020-07-29 13:18:40 +09:00
smoogipoo
ccc377ae6a Remove unused enum 2020-07-28 21:45:12 +09:00
smoogipoo
db91d1de50 Use response params in next page request 2020-07-28 21:45:12 +09:00
Andrei Zavatski
b821d619b5 Merge remote-tracking branch 'refs/remotes/ppy/master' into news 2020-07-25 09:13:12 +03:00
smoogipoo
b7790de66f Fix incorrect sort param 2020-07-22 20:24:48 +09:00
smoogipoo
568fb51ce2 Remove RoomPlaylistScores intermediate class 2020-07-22 20:24:42 +09:00
smoogipoo
f8401a76a2 Use show/index requests in results screen 2020-07-22 19:40:00 +09:00
smoogipoo
334fb7d475 Add additional params to index request 2020-07-22 18:54:41 +09:00
smoogipoo
c75955e381 Add responses to MultiplayerScore 2020-07-22 18:52:25 +09:00
smoogipoo
634efe31f8 Inherit ResponseWithCursor 2020-07-22 18:51:54 +09:00
smoogipoo
ec33a6ea87 Add additional responses 2020-07-22 18:47:40 +09:00
smoogipoo
d9633fee64 Rename request 2020-07-22 18:47:09 +09:00
smoogipoo
e423630b7c Rename RoomScore -> MultiplayerScore 2020-07-22 18:37:00 +09:00
smoogipoo
0957c5f74c Re-namespace multiplayer requests/responses 2020-07-22 18:34:04 +09:00
Andrei Zavatski
17c598568d Merge remote-tracking branch 'refs/remotes/ppy/master' into news 2020-07-16 14:38:50 +03:00
Andrei Zavatski
3d9e174ae8 Make sort changes affect request result 2020-07-14 18:09:09 +03:00
Dean Herbert
7fe69bb199 Fix some web requests retrieving the user too early 2020-07-14 13:07:17 +09:00
Joehu
db6a9c9717 Move null check to menu item addition 2020-07-12 22:06:17 -07:00
Joehu
ac7252e152 Fix context menu not masking outside of leaderboard area 2020-07-12 22:04:00 -07:00
Joehu
9c039848bc Simplify and add null check 2020-07-12 12:04:53 -07:00
Andrei Zavatski
3601a2d93f Merge remote-tracking branch 'refs/remotes/ppy/master' into news 2020-07-12 14:45:48 +03:00
Joehu
25d2d9ba5c Convert getMods reference to method group 2020-07-11 16:24:57 -07:00
Joehu
0d26ad9ddb Fix user top score not having a context menu 2020-07-11 16:22:01 -07:00
Joehu
9b4bed2ab2 Add ability to select mods from a specific score 2020-07-11 16:02:47 -07:00
smoogipoo
fe585611e7 Fix + simplify web request 2020-07-10 19:54:09 +09:00
Dean Herbert
64e8dce1ad Highlight spotlight rooms with a different colour 2020-07-10 19:38:33 +09:00
smoogipoo
926279e39b Implement category dropdown for multiplayer 2020-07-10 17:26:42 +09:00
smoogipoo
1bcd673a55 Fix crash when switching rooms quickly 2020-07-10 12:09:34 +09:00
Andrei Zavatski
de4c22c709 Implement news api request 2020-07-08 17:58:09 +03:00
Andrei Zavatski
857a027a73 Parse HTML entities during APINewsPost deserialisation 2020-07-07 00:11:35 +03:00
Andrei Zavatski
68d9f9de46 Use DateTimeOffset 2020-07-06 23:55:20 +03:00
Andrei Zavatski
9dde101f12 Remove string prefixes 2020-07-06 23:53:27 +03:00
Andrei Zavatski
fdb7727e95 Rename NewsPost to APINewsPost 2020-07-06 07:28:44 +03:00
Andrei Zavatski
7550097eb6 Implement NewsCard 2020-07-06 07:27:53 +03:00
Andrei Zavatski
c18ca19c9d Add NewsPost api response 2020-07-06 05:31:34 +03:00
smoogipoo
afa5b995f2 Merge branch 'fix-test-nullref' into timeshift-results-2 2020-06-11 14:05:05 +09:00
smoogipoo
ab10732a78 Remove usages of null-forgiving operator 2020-06-09 22:13:48 +09:00
smoogipoo
88aed1d504 Merge branch 'master' into update-inspectcode-version 2020-06-09 20:12:39 +09:00
smoogipoo
44dd7d65be Fix duplicate scores showing 2020-06-09 18:21:37 +09:00
smoogipoo
7f05c16c9f Merge branch 'master' into timeshift-results-2 2020-06-09 15:59:13 +09:00
Dan Balasescu
7f72f59307
Merge branch 'master' into fetch-private-chat-history 2020-06-09 14:42:29 +09:00
Dean Herbert
712fd6a944 Fetch existing private message channels on re-joining 2020-06-08 17:54:26 +09:00
smoogipoo
caf94df0d0 Merge branch 'master' into multiplayer-beatmap-checksum 2020-06-05 19:16:05 +09:00
Dean Herbert
f6d9f0597b Add implicit join logic for multiplayer rooms 2020-06-03 21:28:29 +09:00
Dean Herbert
1ba3f0ac14 Fix chat history not being loaded for multiplayer matches 2020-06-03 17:31:55 +09:00
smoogipoo
8aa8d2c880 Resolve NREs 2020-06-03 16:59:37 +09:00
smoogipoo
f3b5149648 Move some suggestions to warnings, resolve issues 2020-06-03 16:48:44 +09:00
smoogipoo
13622eff1f Fix response value 2020-06-03 12:54:07 +09:00
Dean Herbert
93572fc17d
Merge branch 'master' into present-recommended 2020-06-03 12:31:23 +09:00
smoogipoo
1ccdfd7364 Pull playlist beatmap checksum from api 2020-06-02 14:03:13 +09:00
Andrei Zavatski
11057cd6a8 CI fix 2020-05-29 21:43:31 +03:00
Andrei Zavatski
affad47248 Fix genre/language search doesn't work 2020-05-29 19:44:53 +03:00
smoogipoo
0e28ded80f Forward statistics 2020-05-28 22:09:11 +09:00
smoogipoo
d88bfa2080 Cache ruleset + fix possible nullrefs 2020-05-28 22:09:11 +09:00
smoogipoo
7ac08620b8 Add a user object for now 2020-05-28 22:09:11 +09:00
smoogipoo
f9c64d7be3 Implement creation of mods 2020-05-28 22:09:11 +09:00
smoogipoo
38502ba88c Remove some unnecessary members 2020-05-28 22:09:11 +09:00
smoogipoo
ee59182989 Implement initial structure for room scores 2020-05-28 22:09:11 +09:00
Dean Herbert
f989f1aa00 Change event flow to avoid firing store delete events on update 2020-05-27 16:08:47 +09:00
Dean Herbert
052ad79fc6 Convert dangerous events to IBindables 2020-05-19 16:44:22 +09:00
Dean Herbert
facde2c8e1 Remove unnecessary generic specification on cursor 2020-05-14 16:01:07 +09:00
「空白」
43450b5485 Resolve remaining InspectCode issues
> CI should now pass build test
2020-05-14 01:57:03 +09:00
「空白」
5962dedd35 Reimplement cursor as part of WebRequest extensions
> Added WebRequestExtensions
> Moved Cursor request logic from SearchBeatmapSetsRequest
2020-05-13 05:04:39 +09:00
「空白」
cabf3a89b1 More robust cursor parsing solution
> Change cursor request to return last response's entire cursor structure
2020-05-13 03:44:57 +09:00
「空白」
e321494f15 Fix sort-by handling
> Add other cursor fields for paging different sortings
> Sorted as they show in GUI code-wise for more readability for now
2020-05-13 02:15:24 +09:00
「空白」
82190a07b8 Remove temporary comments
> Removes unnecessary xmldoc comments
2020-05-13 02:01:38 +09:00
「空白」
35e7cee458 Squash commits from private fork
Temporary comments left to-remove later
2020-05-12 03:18:47 +09:00
alex
0e2ccac33b Add spaces to comments 2020-05-04 18:36:24 -07:00