Browse Source

Added better permissions cache invalidation

tags/docs-0.9
RogueException 9 years ago
parent
commit
1b874a3475
3 changed files with 27 additions and 8 deletions
  1. +24
    -5
      src/Discord.Net/Models/Channel.cs
  2. +1
    -1
      src/Discord.Net/Models/Member.cs
  3. +2
    -2
      src/Discord.Net/Models/Server.cs

+ 24
- 5
src/Discord.Net/Models/Channel.cs View File

@@ -27,7 +27,7 @@ namespace Discord

private readonly DiscordClient _client;
private readonly ConcurrentDictionary<string, bool> _messages;
internal bool _areMembersStale;
private bool _areMembersStale;

/// <summary> Returns the unique identifier for this channel. </summary>
public string Id { get; }
@@ -85,7 +85,7 @@ namespace Discord

/// <summary> Returns a collection of all custom permissions used for this channel. </summary>
private static readonly PermissionOverwrite[] _initialPermissionsOverwrites = new PermissionOverwrite[0];
private PermissionOverwrite[] _permissionOverwrites;
internal PermissionOverwrite[] _permissionOverwrites;
public IEnumerable<PermissionOverwrite> PermissionOverwrites => _permissionOverwrites;

internal Channel(DiscordClient client, string id, string serverId, string recipientId)
@@ -95,9 +95,9 @@ namespace Discord
ServerId = serverId;
RecipientId = recipientId;
_messages = new ConcurrentDictionary<string, bool>();
_areMembersStale = true;
_permissionOverwrites = _initialPermissionsOverwrites;
}
_areMembersStale = true;
}

internal void Update(API.ChannelReference model)
{
@@ -120,7 +120,8 @@ namespace Discord
_permissionOverwrites = model.PermissionOverwrites
.Select(x => new PermissionOverwrite(x.Type, x.Id, x.Allow, x.Deny))
.ToArray();
}
InvalidatePermissionsCache();
}
}

public override string ToString() => Name;
@@ -134,5 +135,23 @@ namespace Discord
bool ignored;
return _messages.TryRemove(messageId, out ignored);
}

internal void InvalidMembersCache()
{
_areMembersStale = true;
}
internal void InvalidatePermissionsCache()
{
_areMembersStale = true;
foreach (var member in Members)
member.UpdatePermissions(Id);
}
internal void InvalidatePermissionsCache(string userId)
{
_areMembersStale = true;
var member = _client.Members[userId, ServerId];
if (member != null)
member.UpdatePermissions(Id);
}
}
}

+ 1
- 1
src/Discord.Net/Models/Member.cs View File

@@ -202,7 +202,7 @@ namespace Discord
if (permissions.RawValue != newPermissions)
{
permissions.SetRawValue(newPermissions);
channel._areMembersStale = true;
channel.InvalidMembersCache();
}
}
//TODO: Add GetServerPermissions


+ 2
- 2
src/Discord.Net/Models/Server.cs View File

@@ -200,7 +200,7 @@ namespace Discord
foreach (var channel in Channels)
{
member.AddChannel(channel.Id);
channel._areMembersStale = true;
channel.InvalidatePermissionsCache(member.UserId);
}
}
internal bool RemoveMember(Member member)
@@ -209,7 +209,7 @@ namespace Discord
foreach (var channel in Channels)
{
member.RemoveChannel(channel.Id);
channel._areMembersStale = true;
channel.InvalidatePermissionsCache(member.UserId);
}
return _members.TryRemove(member.UserId, out ignored);
}


Loading…
Cancel
Save