Caching improvments
This commit is contained in:
@@ -14,7 +14,7 @@ namespace Discord.Collections
|
||||
|
||||
protected override void OnCreated(Channel item)
|
||||
{
|
||||
if (item.ServerId != null)
|
||||
if (!item.IsPrivate)
|
||||
item.Server.AddChannel(item.Id);
|
||||
if (item.RecipientId != null)
|
||||
{
|
||||
@@ -27,7 +27,7 @@ namespace Discord.Collections
|
||||
}
|
||||
protected override void OnRemoved(Channel item)
|
||||
{
|
||||
if (item.ServerId != null)
|
||||
if (!item.IsPrivate)
|
||||
item.Server.RemoveChannel(item.Id);
|
||||
if (item.RecipientId != null)
|
||||
{
|
||||
|
||||
@@ -320,8 +320,9 @@ namespace Discord
|
||||
text = text.Substring(0, DiscordAPIClient.MaxMessageSize);
|
||||
|
||||
var model = await _api.EditMessage(channelId, messageId, text, mentions).ConfigureAwait(false);
|
||||
var msg = _messages.GetOrAdd(messageId, channelId, model.Author.Id);
|
||||
msg.Update(model);
|
||||
var msg = _messages[messageId];
|
||||
if (msg != null)
|
||||
msg.Update(model);
|
||||
}
|
||||
|
||||
/// <summary> Deletes the provided message. </summary>
|
||||
@@ -384,10 +385,10 @@ namespace Discord
|
||||
}
|
||||
|
||||
/// <summary> Downloads last count messages from the server, starting at beforeMessageId if it's provided. </summary>
|
||||
public Task<Message[]> DownloadMessages(Channel channel, int count, string beforeMessageId = null)
|
||||
=> DownloadMessages(channel.Id, count);
|
||||
public Task<Message[]> DownloadMessages(Channel channel, int count, string beforeMessageId = null, bool cache = true)
|
||||
=> DownloadMessages(channel.Id, count, beforeMessageId, cache);
|
||||
/// <summary> Downloads last count messages from the server, starting at beforeMessageId if it's provided. </summary>
|
||||
public async Task<Message[]> DownloadMessages(string channelId, int count, string beforeMessageId = null)
|
||||
public async Task<Message[]> DownloadMessages(string channelId, int count, string beforeMessageId = null, bool cache = true)
|
||||
{
|
||||
CheckReady();
|
||||
if (channelId == null) throw new NullReferenceException(nameof(channelId));
|
||||
@@ -402,11 +403,16 @@ namespace Discord
|
||||
var msgs = await _api.GetMessages(channel.Id, count).ConfigureAwait(false);
|
||||
return msgs.Select(x =>
|
||||
{
|
||||
var msg = _messages.GetOrAdd(x.Id, x.ChannelId, x.Author.Id);
|
||||
msg.Update(x);
|
||||
Message msg;
|
||||
if (cache)
|
||||
msg = _messages.GetOrAdd(x.Id, x.ChannelId, x.Author.Id);
|
||||
else
|
||||
msg = _messages[x.Id] ?? new Message(this, x.Id, x.ChannelId, x.Author.Id);
|
||||
if (msg != null)
|
||||
msg.Update(x);
|
||||
if (_config.TrackActivity)
|
||||
{
|
||||
var user = msg.User;
|
||||
var user = _users[x.Author.Id];
|
||||
if (user != null)
|
||||
user.UpdateActivity(x.Timestamp);
|
||||
}
|
||||
|
||||
@@ -225,9 +225,12 @@ namespace Discord
|
||||
case "GUILD_UPDATE":
|
||||
{
|
||||
var model = e.Payload.ToObject<Events.GuildUpdate>(_serializer);
|
||||
var server = _servers.GetOrAdd(model.Id);
|
||||
server.Update(model);
|
||||
RaiseEvent(nameof(ServerUpdated), () => RaiseServerUpdated(server));
|
||||
var server = _servers[model.Id];
|
||||
if (server != null)
|
||||
{
|
||||
server.Update(model);
|
||||
RaiseEvent(nameof(ServerUpdated), () => RaiseServerUpdated(server));
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "GUILD_DELETE":
|
||||
@@ -251,9 +254,12 @@ namespace Discord
|
||||
case "CHANNEL_UPDATE":
|
||||
{
|
||||
var data = e.Payload.ToObject<Events.ChannelUpdate>(_serializer);
|
||||
var channel = _channels.GetOrAdd(data.Id, data.GuildId, data.Recipient?.Id);
|
||||
channel.Update(data);
|
||||
RaiseEvent(nameof(ChannelUpdated), () => RaiseChannelUpdated(channel));
|
||||
var channel = _channels[data.Id];
|
||||
if (channel != null)
|
||||
{
|
||||
channel.Update(data);
|
||||
RaiseEvent(nameof(ChannelUpdated), () => RaiseChannelUpdated(channel));
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "CHANNEL_DELETE":
|
||||
@@ -269,7 +275,7 @@ namespace Discord
|
||||
case "GUILD_MEMBER_ADD":
|
||||
{
|
||||
var data = e.Payload.ToObject<Events.GuildMemberAdd>(_serializer);
|
||||
var member = _members.GetOrAdd(data.UserId, data.GuildId);
|
||||
var member = _members.GetOrAdd(data.User.Id, data.GuildId);
|
||||
member.Update(data);
|
||||
RaiseEvent(nameof(MemberAdded), () => RaiseMemberAdded(member));
|
||||
}
|
||||
@@ -277,9 +283,12 @@ namespace Discord
|
||||
case "GUILD_MEMBER_UPDATE":
|
||||
{
|
||||
var data = e.Payload.ToObject<Events.GuildMemberUpdate>(_serializer);
|
||||
var member = _members.GetOrAdd(data.UserId, data.GuildId);
|
||||
member.Update(data);
|
||||
RaiseEvent(nameof(MemberUpdated), () => RaiseMemberUpdated(member));
|
||||
var member = _members[data.User.Id, data.GuildId];
|
||||
if (member != null)
|
||||
{
|
||||
member.Update(data);
|
||||
RaiseEvent(nameof(MemberUpdated), () => RaiseMemberUpdated(member));
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "GUILD_MEMBER_REMOVE":
|
||||
@@ -303,8 +312,9 @@ namespace Discord
|
||||
case "GUILD_ROLE_UPDATE":
|
||||
{
|
||||
var data = e.Payload.ToObject<Events.GuildRoleUpdate>(_serializer);
|
||||
var role = _roles.GetOrAdd(data.Data.Id, data.GuildId);
|
||||
role.Update(data.Data);
|
||||
var role = _roles[data.Data.Id];
|
||||
if (role != null)
|
||||
role.Update(data.Data);
|
||||
RaiseEvent(nameof(RoleUpdated), () => RaiseRoleUpdated(role));
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -136,13 +136,15 @@ namespace Discord
|
||||
}
|
||||
foreach (var subModel in model.VoiceStates)
|
||||
{
|
||||
var member = members.GetOrAdd(subModel.UserId, Id);
|
||||
member.Update(subModel);
|
||||
var member = members[subModel.UserId, Id];
|
||||
if (member != null)
|
||||
member.Update(subModel);
|
||||
}
|
||||
foreach (var subModel in model.Presences)
|
||||
{
|
||||
var member = members.GetOrAdd(subModel.User.Id, Id);
|
||||
member.Update(subModel);
|
||||
var member = members[subModel.User.Id, Id];
|
||||
if (member != null)
|
||||
member.Update(subModel);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user