mirror of
https://github.com/ppy/osu.git
synced 2025-02-15 23:42:55 +08:00
Fix loading spinner not disappearing on empty channels
This commit is contained in:
parent
2436ee589d
commit
1fd2782dd4
@ -24,6 +24,9 @@ namespace osu.Game.Online.Chat
|
|||||||
[JsonProperty(@"channel_id")]
|
[JsonProperty(@"channel_id")]
|
||||||
public int Id;
|
public int Id;
|
||||||
|
|
||||||
|
[JsonProperty(@"last_message_id")]
|
||||||
|
public long? LastMessageId;
|
||||||
|
|
||||||
public readonly SortedList<Message> Messages = new SortedList<Message>(Comparer<Message>.Default);
|
public readonly SortedList<Message> Messages = new SortedList<Message>(Comparer<Message>.Default);
|
||||||
|
|
||||||
private readonly List<LocalEchoMessage> pendingMessages = new List<LocalEchoMessage>();
|
private readonly List<LocalEchoMessage> pendingMessages = new List<LocalEchoMessage>();
|
||||||
@ -51,11 +54,18 @@ namespace osu.Game.Online.Chat
|
|||||||
NewMessagesArrived?.Invoke(new[] { message });
|
NewMessagesArrived?.Invoke(new[] { message });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool MessagesLoaded { get; private set; }
|
||||||
|
|
||||||
public void AddNewMessages(params Message[] messages)
|
public void AddNewMessages(params Message[] messages)
|
||||||
{
|
{
|
||||||
messages = messages.Except(Messages).ToArray();
|
messages = messages.Except(Messages).ToArray();
|
||||||
|
|
||||||
Messages.AddRange(messages);
|
Messages.AddRange(messages);
|
||||||
|
MessagesLoaded = true;
|
||||||
|
|
||||||
|
var maxMessageId = messages.Max(m => m.Id);
|
||||||
|
if (maxMessageId > LastMessageId)
|
||||||
|
LastMessageId = maxMessageId;
|
||||||
|
|
||||||
purgeOldMessages();
|
purgeOldMessages();
|
||||||
|
|
||||||
|
@ -362,7 +362,7 @@ namespace osu.Game.Overlays
|
|||||||
loadedChannels.Add(loaded);
|
loadedChannels.Add(loaded);
|
||||||
LoadComponentAsync(loaded, l =>
|
LoadComponentAsync(loaded, l =>
|
||||||
{
|
{
|
||||||
if (currentChannel.Messages.Any())
|
if (currentChannel.MessagesLoaded)
|
||||||
loading.Hide();
|
loading.Hide();
|
||||||
|
|
||||||
currentChannelContainer.Clear(false);
|
currentChannelContainer.Clear(false);
|
||||||
@ -398,7 +398,7 @@ namespace osu.Game.Overlays
|
|||||||
if (channel.Type == ChannelType.Public && !channel.Joined)
|
if (channel.Type == ChannelType.Public && !channel.Joined)
|
||||||
{
|
{
|
||||||
var req = new JoinChannelRequest(channel, api.LocalUser);
|
var req = new JoinChannelRequest(channel, api.LocalUser);
|
||||||
req.Success += addChannel;
|
req.Success += () => addChannel(channel);
|
||||||
req.Failure += ex => removeChannel(channel);
|
req.Failure += ex => removeChannel(channel);
|
||||||
api.Queue(req);
|
api.Queue(req);
|
||||||
return;
|
return;
|
||||||
@ -431,16 +431,13 @@ namespace osu.Game.Overlays
|
|||||||
private void fetchInitialMessages(Channel channel)
|
private void fetchInitialMessages(Channel channel)
|
||||||
{
|
{
|
||||||
var req = new GetMessagesRequest(channel);
|
var req = new GetMessagesRequest(channel);
|
||||||
|
|
||||||
req.Success += messages =>
|
req.Success += messages =>
|
||||||
{
|
{
|
||||||
loading.Hide();
|
|
||||||
channel.AddNewMessages(messages.ToArray());
|
channel.AddNewMessages(messages.ToArray());
|
||||||
Debug.Write("success!");
|
if (channel == currentChannel)
|
||||||
|
loading.Hide();
|
||||||
};
|
};
|
||||||
|
|
||||||
req.Failure += exception => Debug.Write("failure!");
|
|
||||||
|
|
||||||
api.Queue(req);
|
api.Queue(req);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user