Merge pull request #9557 from peppy/fix-user-request-population

Fix some web requests retrieving the user too early
This commit is contained in:
Dan Balasescu 2020-07-14 17:56:31 +09:00 committed by GitHub
commit 0e31982b4e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 22 additions and 28 deletions

View File

@ -8,7 +8,6 @@ using osu.Game.Online.API.Requests;
using osu.Game.Online.API.Requests.Responses; using osu.Game.Online.API.Requests.Responses;
using osu.Game.Online.Chat; using osu.Game.Online.Chat;
using osu.Game.Tests.Visual; using osu.Game.Tests.Visual;
using osu.Game.Users;
namespace osu.Game.Tests.Online namespace osu.Game.Tests.Online
{ {
@ -55,7 +54,7 @@ namespace osu.Game.Tests.Online
AddStep("fire request", () => AddStep("fire request", () =>
{ {
gotResponse = false; gotResponse = false;
request = new LeaveChannelRequest(new Channel(), new User()); request = new LeaveChannelRequest(new Channel());
request.Success += () => gotResponse = true; request.Success += () => gotResponse = true;
API.Queue(request); API.Queue(request);
}); });
@ -74,7 +73,7 @@ namespace osu.Game.Tests.Online
AddStep("fire request", () => AddStep("fire request", () =>
{ {
gotResponse = false; gotResponse = false;
request = new LeaveChannelRequest(new Channel(), new User()); request = new LeaveChannelRequest(new Channel());
request.Success += () => gotResponse = true; request.Success += () => gotResponse = true;
API.Perform(request); API.Perform(request);
}); });
@ -93,7 +92,7 @@ namespace osu.Game.Tests.Online
AddStep("fire request", () => AddStep("fire request", () =>
{ {
gotResponse = false; gotResponse = false;
request = new LeaveChannelRequest(new Channel(), new User()); request = new LeaveChannelRequest(new Channel());
request.Success += () => gotResponse = true; request.Success += () => gotResponse = true;
API.PerformAsync(request); API.PerformAsync(request);
}); });

View File

@ -5,6 +5,7 @@ using System;
using Newtonsoft.Json; using Newtonsoft.Json;
using osu.Framework.IO.Network; using osu.Framework.IO.Network;
using osu.Framework.Logging; using osu.Framework.Logging;
using osu.Game.Users;
namespace osu.Game.Online.API namespace osu.Game.Online.API
{ {
@ -61,6 +62,11 @@ namespace osu.Game.Online.API
protected APIAccess API; protected APIAccess API;
protected WebRequest WebRequest; protected WebRequest WebRequest;
/// <summary>
/// The currently logged in user. Note that this will only be populated during <see cref="Perform"/>.
/// </summary>
protected User User { get; private set; }
/// <summary> /// <summary>
/// Invoked on successful completion of an API request. /// Invoked on successful completion of an API request.
/// This will be scheduled to the API's internal scheduler (run on update thread automatically). /// This will be scheduled to the API's internal scheduler (run on update thread automatically).
@ -86,6 +92,7 @@ namespace osu.Game.Online.API
} }
API = apiAccess; API = apiAccess;
User = apiAccess.LocalUser.Value;
if (checkAndScheduleFailure()) if (checkAndScheduleFailure())
return; return;

View File

@ -4,19 +4,16 @@
using System.Net.Http; using System.Net.Http;
using osu.Framework.IO.Network; using osu.Framework.IO.Network;
using osu.Game.Online.Chat; using osu.Game.Online.Chat;
using osu.Game.Users;
namespace osu.Game.Online.API.Requests namespace osu.Game.Online.API.Requests
{ {
public class JoinChannelRequest : APIRequest public class JoinChannelRequest : APIRequest
{ {
private readonly Channel channel; private readonly Channel channel;
private readonly User user;
public JoinChannelRequest(Channel channel, User user) public JoinChannelRequest(Channel channel)
{ {
this.channel = channel; this.channel = channel;
this.user = user;
} }
protected override WebRequest CreateWebRequest() protected override WebRequest CreateWebRequest()
@ -26,6 +23,6 @@ namespace osu.Game.Online.API.Requests
return req; return req;
} }
protected override string Target => $@"chat/channels/{channel.Id}/users/{user.Id}"; protected override string Target => $@"chat/channels/{channel.Id}/users/{User.Id}";
} }
} }

View File

@ -4,19 +4,16 @@
using System.Net.Http; using System.Net.Http;
using osu.Framework.IO.Network; using osu.Framework.IO.Network;
using osu.Game.Online.Multiplayer; using osu.Game.Online.Multiplayer;
using osu.Game.Users;
namespace osu.Game.Online.API.Requests namespace osu.Game.Online.API.Requests
{ {
public class JoinRoomRequest : APIRequest public class JoinRoomRequest : APIRequest
{ {
private readonly Room room; private readonly Room room;
private readonly User user;
public JoinRoomRequest(Room room, User user) public JoinRoomRequest(Room room)
{ {
this.room = room; this.room = room;
this.user = user;
} }
protected override WebRequest CreateWebRequest() protected override WebRequest CreateWebRequest()
@ -26,6 +23,6 @@ namespace osu.Game.Online.API.Requests
return req; return req;
} }
protected override string Target => $"rooms/{room.RoomID.Value}/users/{user.Id}"; protected override string Target => $"rooms/{room.RoomID.Value}/users/{User.Id}";
} }
} }

View File

@ -4,19 +4,16 @@
using System.Net.Http; using System.Net.Http;
using osu.Framework.IO.Network; using osu.Framework.IO.Network;
using osu.Game.Online.Chat; using osu.Game.Online.Chat;
using osu.Game.Users;
namespace osu.Game.Online.API.Requests namespace osu.Game.Online.API.Requests
{ {
public class LeaveChannelRequest : APIRequest public class LeaveChannelRequest : APIRequest
{ {
private readonly Channel channel; private readonly Channel channel;
private readonly User user;
public LeaveChannelRequest(Channel channel, User user) public LeaveChannelRequest(Channel channel)
{ {
this.channel = channel; this.channel = channel;
this.user = user;
} }
protected override WebRequest CreateWebRequest() protected override WebRequest CreateWebRequest()
@ -26,6 +23,6 @@ namespace osu.Game.Online.API.Requests
return req; return req;
} }
protected override string Target => $@"chat/channels/{channel.Id}/users/{user.Id}"; protected override string Target => $@"chat/channels/{channel.Id}/users/{User.Id}";
} }
} }

View File

@ -4,19 +4,16 @@
using System.Net.Http; using System.Net.Http;
using osu.Framework.IO.Network; using osu.Framework.IO.Network;
using osu.Game.Online.Multiplayer; using osu.Game.Online.Multiplayer;
using osu.Game.Users;
namespace osu.Game.Online.API.Requests namespace osu.Game.Online.API.Requests
{ {
public class PartRoomRequest : APIRequest public class PartRoomRequest : APIRequest
{ {
private readonly Room room; private readonly Room room;
private readonly User user;
public PartRoomRequest(Room room, User user) public PartRoomRequest(Room room)
{ {
this.room = room; this.room = room;
this.user = user;
} }
protected override WebRequest CreateWebRequest() protected override WebRequest CreateWebRequest()
@ -26,6 +23,6 @@ namespace osu.Game.Online.API.Requests
return req; return req;
} }
protected override string Target => $"rooms/{room.RoomID.Value}/users/{user.Id}"; protected override string Target => $"rooms/{room.RoomID.Value}/users/{User.Id}";
} }
} }

View File

@ -381,7 +381,7 @@ namespace osu.Game.Online.Chat
break; break;
default: default:
var req = new JoinChannelRequest(channel, api.LocalUser.Value); var req = new JoinChannelRequest(channel);
req.Success += () => joinChannel(channel, fetchInitialMessages); req.Success += () => joinChannel(channel, fetchInitialMessages);
req.Failure += ex => LeaveChannel(channel); req.Failure += ex => LeaveChannel(channel);
api.Queue(req); api.Queue(req);
@ -410,7 +410,7 @@ namespace osu.Game.Online.Chat
if (channel.Joined.Value) if (channel.Joined.Value)
{ {
api.Queue(new LeaveChannelRequest(channel, api.LocalUser.Value)); api.Queue(new LeaveChannelRequest(channel));
channel.Joined.Value = false; channel.Joined.Value = false;
} }
} }

View File

@ -114,7 +114,7 @@ namespace osu.Game.Screens.Multi
public void JoinRoom(Room room, Action<Room> onSuccess = null, Action<string> onError = null) public void JoinRoom(Room room, Action<Room> onSuccess = null, Action<string> onError = null)
{ {
currentJoinRoomRequest?.Cancel(); currentJoinRoomRequest?.Cancel();
currentJoinRoomRequest = new JoinRoomRequest(room, api.LocalUser.Value); currentJoinRoomRequest = new JoinRoomRequest(room);
currentJoinRoomRequest.Success += () => currentJoinRoomRequest.Success += () =>
{ {
@ -139,7 +139,7 @@ namespace osu.Game.Screens.Multi
if (joinedRoom == null) if (joinedRoom == null)
return; return;
api.Queue(new PartRoomRequest(joinedRoom, api.LocalUser.Value)); api.Queue(new PartRoomRequest(joinedRoom));
joinedRoom = null; joinedRoom = null;
} }