Browse Source

Fixed DownloadAllUsersAsync

tags/1.0-rc
RogueException 9 years ago
parent
commit
8ec0733e2f
2 changed files with 13 additions and 13 deletions
  1. +7
    -6
      src/Discord.Net/WebSocket/DiscordSocketClient.cs
  2. +6
    -7
      src/Discord.Net/WebSocket/Entities/Guilds/SocketGuild.cs

+ 7
- 6
src/Discord.Net/WebSocket/DiscordSocketClient.cs View File

@@ -362,9 +362,9 @@ namespace Discord.WebSocket
if (guild != null) if (guild != null)
{ {
foreach (var channel in guild.Channels) foreach (var channel in guild.Channels)
guild.RemoveChannel(channel.Id);
DataStore.RemoveChannel(id);
foreach (var user in guild.Members) foreach (var user in guild.Members)
guild.RemoveUser(user.Id);
user.User.RemoveRef(this);
} }
return guild; return guild;
} }
@@ -451,6 +451,7 @@ namespace Discord.WebSocket
var cachedGuilds = guilds.ToArray(); var cachedGuilds = guilds.ToArray();
if (cachedGuilds.Length == 0) return; if (cachedGuilds.Length == 0) return;


//Wait for unsynced guilds to sync first.
var unsyncedGuilds = guilds.Select(x => x.SyncPromise).Where(x => !x.IsCompleted).ToArray(); var unsyncedGuilds = guilds.Select(x => x.SyncPromise).Where(x => !x.IsCompleted).ToArray();
if (unsyncedGuilds.Length > 0) if (unsyncedGuilds.Length > 0)
await Task.WhenAll(unsyncedGuilds); await Task.WhenAll(unsyncedGuilds);
@@ -767,8 +768,6 @@ namespace Discord.WebSocket
var guild = RemoveGuild(data.Id); var guild = RemoveGuild(data.Id);
if (guild != null) if (guild != null)
{ {
foreach (var member in guild.Members)
member.User.RemoveRef(this);
await _guildUnavailableEvent.InvokeAsync(guild).ConfigureAwait(false); await _guildUnavailableEvent.InvokeAsync(guild).ConfigureAwait(false);
await _leftGuildEvent.InvokeAsync(guild).ConfigureAwait(false); await _leftGuildEvent.InvokeAsync(guild).ConfigureAwait(false);
} }
@@ -887,7 +886,8 @@ namespace Discord.WebSocket
var guild = DataStore.GetGuild(data.GuildId); var guild = DataStore.GetGuild(data.GuildId);
if (guild != null) if (guild != null)
{ {
var user = guild.AddUser(data, DataStore);
var user = guild.AddOrUpdateUser(data, DataStore);
guild.MemberCount++;


if (!guild.IsSynced) if (!guild.IsSynced)
{ {
@@ -954,6 +954,7 @@ namespace Discord.WebSocket
if (guild != null) if (guild != null)
{ {
var user = guild.RemoveUser(data.User.Id); var user = guild.RemoveUser(data.User.Id);
guild.MemberCount--;


if (!guild.IsSynced) if (!guild.IsSynced)
{ {
@@ -994,7 +995,7 @@ namespace Discord.WebSocket
if (guild != null) if (guild != null)
{ {
foreach (var memberModel in data.Members) foreach (var memberModel in data.Members)
guild.AddUser(memberModel, DataStore);
guild.AddOrUpdateUser(memberModel, DataStore);


if (guild.DownloadedMemberCount >= guild.MemberCount) //Finished downloading for there if (guild.DownloadedMemberCount >= guild.MemberCount) //Finished downloading for there
{ {


+ 6
- 7
src/Discord.Net/WebSocket/Entities/Guilds/SocketGuild.cs View File

@@ -32,7 +32,7 @@ namespace Discord.WebSocket
internal bool _available; internal bool _available;


public bool Available => _available && Discord.ConnectionState == ConnectionState.Connected; public bool Available => _available && Discord.ConnectionState == ConnectionState.Connected;
public int MemberCount { get; private set; }
public int MemberCount { get; set; }
public int DownloadedMemberCount { get; private set; } public int DownloadedMemberCount { get; private set; }
public AudioClient AudioClient { get; private set; } public AudioClient AudioClient { get; private set; }


@@ -91,12 +91,12 @@ namespace Discord.WebSocket
AddChannel(model.Channels[i], dataStore, channels); AddChannel(model.Channels[i], dataStore, channels);
} }
_channels = channels; _channels = channels;
var members = new ConcurrentDictionary<ulong, SocketGuildUser>(1, (int)(model.Presences.Length * 1.05)); var members = new ConcurrentDictionary<ulong, SocketGuildUser>(1, (int)(model.Presences.Length * 1.05));
{ {
DownloadedMemberCount = 0; DownloadedMemberCount = 0;
for (int i = 0; i < model.Members.Length; i++) for (int i = 0; i < model.Members.Length; i++)
AddUser(model.Members[i], dataStore, members);
AddOrUpdateUser(model.Members[i], dataStore, members);
if (Discord.ApiClient.AuthTokenType != TokenType.User) if (Discord.ApiClient.AuthTokenType != TokenType.User)
{ {
var _ = _syncPromise.TrySetResultAsync(true); var _ = _syncPromise.TrySetResultAsync(true);
@@ -125,7 +125,7 @@ namespace Discord.WebSocket
{ {
DownloadedMemberCount = 0; DownloadedMemberCount = 0;
for (int i = 0; i < model.Members.Length; i++) for (int i = 0; i < model.Members.Length; i++)
AddUser(model.Members[i], dataStore, members);
AddOrUpdateUser(model.Members[i], dataStore, members);
var _ = _syncPromise.TrySetResultAsync(true); var _ = _syncPromise.TrySetResultAsync(true);
if (!model.Large) if (!model.Large)
_ = _downloaderPromise.TrySetResultAsync(true); _ = _downloaderPromise.TrySetResultAsync(true);
@@ -183,9 +183,8 @@ namespace Discord.WebSocket
=> Task.FromResult<IGuildUser>(CurrentUser); => Task.FromResult<IGuildUser>(CurrentUser);
public override Task<IReadOnlyCollection<IGuildUser>> GetUsersAsync() public override Task<IReadOnlyCollection<IGuildUser>> GetUsersAsync()
=> Task.FromResult<IReadOnlyCollection<IGuildUser>>(Members); => Task.FromResult<IReadOnlyCollection<IGuildUser>>(Members);
public SocketGuildUser AddUser(MemberModel model, DataStore dataStore, ConcurrentDictionary<ulong, SocketGuildUser> members = null)
public SocketGuildUser AddOrUpdateUser(MemberModel model, DataStore dataStore, ConcurrentDictionary<ulong, SocketGuildUser> members = null)
{ {
MemberCount++;
members = members ?? _members; members = members ?? _members;


SocketGuildUser member; SocketGuildUser member;
@@ -225,13 +224,13 @@ namespace Discord.WebSocket
} }
public SocketGuildUser RemoveUser(ulong id) public SocketGuildUser RemoveUser(ulong id)
{ {
MemberCount--;
SocketGuildUser member; SocketGuildUser member;
if (_members.TryRemove(id, out member)) if (_members.TryRemove(id, out member))
{ {
DownloadedMemberCount--; DownloadedMemberCount--;
return member; return member;
} }
member.User.RemoveRef(Discord);
return null; return null;
} }
public override async Task DownloadUsersAsync() public override async Task DownloadUsersAsync()


Loading…
Cancel
Save