Browse Source

Fix cache errors on server delete

tags/docs-0.9
RogueException 9 years ago
parent
commit
1ca4bd50d4
4 changed files with 34 additions and 13 deletions
  1. +12
    -5
      src/Discord.Net/Collections/Channels.cs
  2. +13
    -5
      src/Discord.Net/Collections/Members.cs
  3. +6
    -2
      src/Discord.Net/Collections/Messages.cs
  4. +3
    -1
      src/Discord.Net/Collections/Roles.cs

+ 12
- 5
src/Discord.Net/Collections/Channels.cs View File

@@ -28,14 +28,21 @@ namespace Discord.Collections
protected override void OnRemoved(Channel item)
{
if (!item.IsPrivate)
item.Server.RemoveChannel(item.Id);
{
var server = item.Server;
if (server != null)
item.Server.RemoveChannel(item.Id);
}
if (item.RecipientId != null)
{
var user = item.Recipient;
if (user.PrivateChannelId != item.Id)
throw new Exception("User has a different private channel.");
user.PrivateChannelId = null;
user.RemoveRef();
if (user != null)
{
if (user.PrivateChannelId != item.Id)
throw new Exception("User has a different private channel.");
user.PrivateChannelId = null;
user.RemoveRef();
}
}
}



+ 13
- 5
src/Discord.Net/Collections/Members.cs View File

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


+ 6
- 2
src/Discord.Net/Collections/Messages.cs View File

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

internal Message this[string id] => Get(id);


+ 3
- 1
src/Discord.Net/Collections/Roles.cs View File

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

internal Role this[string id] => Get(id);


Loading…
Cancel
Save