Fix loading spinner not disappearing on empty channels

This commit is contained in:
Dean Herbert 2018-09-26 19:15:02 +09:00
parent 2436ee589d
commit 1fd2782dd4
2 changed files with 14 additions and 7 deletions

View File

@ -24,6 +24,9 @@ public class Channel
[JsonProperty(@"channel_id")]
public int Id;
[JsonProperty(@"last_message_id")]
public long? LastMessageId;
public readonly SortedList<Message> Messages = new SortedList<Message>(Comparer<Message>.Default);
private readonly List<LocalEchoMessage> pendingMessages = new List<LocalEchoMessage>();
@ -51,11 +54,18 @@ public void AddLocalEcho(LocalEchoMessage message)
NewMessagesArrived?.Invoke(new[] { message });
}
public bool MessagesLoaded { get; private set; }
public void AddNewMessages(params Message[] messages)
{
messages = messages.Except(Messages).ToArray();
Messages.AddRange(messages);
MessagesLoaded = true;
var maxMessageId = messages.Max(m => m.Id);
if (maxMessageId > LastMessageId)
LastMessageId = maxMessageId;
purgeOldMessages();

View File

@ -362,7 +362,7 @@ protected Channel CurrentChannel
loadedChannels.Add(loaded);
LoadComponentAsync(loaded, l =>
{
if (currentChannel.Messages.Any())
if (currentChannel.MessagesLoaded)
loading.Hide();
currentChannelContainer.Clear(false);
@ -398,7 +398,7 @@ private void addChannel(Channel channel)
if (channel.Type == ChannelType.Public && !channel.Joined)
{
var req = new JoinChannelRequest(channel, api.LocalUser);
req.Success += addChannel;
req.Success += () => addChannel(channel);
req.Failure += ex => removeChannel(channel);
api.Queue(req);
return;
@ -431,16 +431,13 @@ private void removeChannel(Channel channel)
private void fetchInitialMessages(Channel channel)
{
var req = new GetMessagesRequest(channel);
req.Success += messages =>
{
loading.Hide();
channel.AddNewMessages(messages.ToArray());
Debug.Write("success!");
if (channel == currentChannel)
loading.Hide();
};
req.Failure += exception => Debug.Write("failure!");
api.Queue(req);
}