Fix cache errors on server delete

This commit is contained in:
RogueException
2015-10-15 16:18:27 -03:00
parent edffc914a1
commit 1ca4bd50d4
4 changed files with 34 additions and 13 deletions

View File

@@ -28,16 +28,23 @@ namespace Discord.Collections
protected override void OnRemoved(Channel item) protected override void OnRemoved(Channel item)
{ {
if (!item.IsPrivate) if (!item.IsPrivate)
{
var server = item.Server;
if (server != null)
item.Server.RemoveChannel(item.Id); item.Server.RemoveChannel(item.Id);
}
if (item.RecipientId != null) if (item.RecipientId != null)
{ {
var user = item.Recipient; var user = item.Recipient;
if (user != null)
{
if (user.PrivateChannelId != item.Id) if (user.PrivateChannelId != item.Id)
throw new Exception("User has a different private channel."); throw new Exception("User has a different private channel.");
user.PrivateChannelId = null; user.PrivateChannelId = null;
user.RemoveRef(); user.RemoveRef();
} }
} }
}
internal Channel this[string id] => Get(id); internal Channel this[string id] => Get(id);

View File

@@ -24,11 +24,19 @@ namespace Discord.Collections
} }
protected override void OnRemoved(Member item) protected override void OnRemoved(Member item)
{ {
item.Server.RemoveMember(item); var server = item.Server;
item.User.RemoveServer(item.ServerId); if (server != null)
item.User.RemoveRef(); {
server.RemoveMember(item);
if (item.UserId == _client.CurrentUserId) if (item.UserId == _client.CurrentUserId)
item.Server.CurrentMember = null; server.CurrentMember = null;
}
var user = item.User;
if (user != null)
{
user.RemoveServer(item.ServerId);
user.RemoveRef();
}
} }
internal Member this[string userId, string serverId] internal Member this[string userId, string serverId]

View File

@@ -22,8 +22,12 @@ namespace Discord.Collections
} }
protected override void OnRemoved(Message item) protected override void OnRemoved(Message item)
{ {
item.Channel.RemoveMessage(item.Id); var channel = item.Channel;
item.User.RemoveRef(); if (channel != null)
channel.RemoveMessage(item.Id);
var user = item.User;
if (user != null)
user.RemoveRef();
} }
internal Message this[string id] => Get(id); internal Message this[string id] => Get(id);

View File

@@ -18,6 +18,8 @@ namespace Discord.Collections
} }
protected override void OnRemoved(Role item) protected override void OnRemoved(Role item)
{ {
var server = item.Server;
if (server != null)
item.Server.RemoveRole(item.Id); item.Server.RemoveRole(item.Id);
} }