Split GetGuildsAsync into GetGuildsAsync and GetGuildSummariesAsync

This commit is contained in:
RogueException
2016-07-13 11:10:22 -03:00
parent 0eb869211c
commit 753813f040
4 changed files with 40 additions and 6 deletions

View File

@@ -918,17 +918,28 @@ namespace Discord.API
//Was this an empty batch?
if (models.Length == 0) break;
//We can't assume these messages to be sorted by id (fails in rare cases), lets search for the highest/lowest id ourselves
switch (args.RelativeDirection)
{
case Direction.Before:
case Direction.Around:
default:
result[i] = models;
relativeId = models[models.Length - 1].Id;
relativeId = ulong.MaxValue;
for (int j = 0; j < models.Length; j++)
{
if (models[j].Id < relativeId.Value)
relativeId = models[j].Id;
}
break;
case Direction.After:
result[runs - i - 1] = models;
relativeId = models[0].Id;
relativeId = ulong.MinValue;
for (int j = 0; j < models.Length; j++)
{
if (models[j].Id > relativeId.Value)
relativeId = models[j].Id;
}
break;
}

View File

@@ -194,11 +194,23 @@ namespace Discord
return null;
}
/// <inheritdoc />
public virtual async Task<IReadOnlyCollection<IUserGuild>> GetGuildsAsync()
public virtual async Task<IReadOnlyCollection<IUserGuild>> GetGuildSummariesAsync()
{
var models = await ApiClient.GetMyGuildsAsync().ConfigureAwait(false);
return models.Select(x => new UserGuild(this, x)).ToImmutableArray();
}
/// <inheritdoc />
public virtual async Task<IReadOnlyCollection<IGuild>> GetGuildsAsync()
{
var summaryModels = await ApiClient.GetMyGuildsAsync().ConfigureAwait(false);
var guilds = ImmutableArray.CreateBuilder<IGuild>(summaryModels.Count);
foreach (var summaryModel in summaryModels)
{
var guildModel = await ApiClient.GetGuildAsync(summaryModel.Id).ConfigureAwait(false);
if (guildModel != null)
guilds.Add(new Guild(this, guildModel));
}
return guilds.ToImmutable();
}
/// <inheritdoc />
public virtual async Task<IGuild> CreateGuildAsync(string name, IVoiceRegion region, Stream jpegIcon = null)

View File

@@ -190,24 +190,29 @@ namespace Discord
ConnectionState = ConnectionState.Disconnecting;
await _gatewayLogger.InfoAsync("Disconnecting").ConfigureAwait(false);
await _gatewayLogger.DebugAsync("Disconnecting - CancelToken").ConfigureAwait(false);
//Signal tasks to complete
try { _cancelToken.Cancel(); } catch { }
await _gatewayLogger.DebugAsync("Disconnecting - ApiClient").ConfigureAwait(false);
//Disconnect from server
await ApiClient.DisconnectAsync().ConfigureAwait(false);
//Wait for tasks to complete
await _gatewayLogger.DebugAsync("Disconnecting - Heartbeat").ConfigureAwait(false);
var heartbeatTask = _heartbeatTask;
if (heartbeatTask != null)
await heartbeatTask.ConfigureAwait(false);
_heartbeatTask = null;
await _gatewayLogger.DebugAsync("Disconnecting - Guild Downloader").ConfigureAwait(false);
var guildDownloadTask = _guildDownloadTask;
if (guildDownloadTask != null)
await guildDownloadTask.ConfigureAwait(false);
_guildDownloadTask = null;
//Clear large guild queue
await _gatewayLogger.DebugAsync("Disconnecting - Clean Large Guilds").ConfigureAwait(false);
while (_largeGuilds.TryDequeue(out guildId)) { }
ConnectionState = ConnectionState.Disconnected;
@@ -293,10 +298,14 @@ namespace Discord
else
return Task.FromResult<GuildEmbed?>(null);
}
public override Task<IReadOnlyCollection<IUserGuild>> GetGuildsAsync()
public override Task<IReadOnlyCollection<IUserGuild>> GetGuildSummariesAsync()
{
return Task.FromResult<IReadOnlyCollection<IUserGuild>>(Guilds);
}
public override Task<IReadOnlyCollection<IGuild>> GetGuildsAsync()
{
return Task.FromResult<IReadOnlyCollection<IGuild>>(Guilds);
}
internal CachedGuild AddGuild(ExtendedGuild model, DataStore dataStore)
{
var guild = new CachedGuild(this, model, dataStore);

View File

@@ -8,6 +8,7 @@ using System.Threading.Tasks;
namespace Discord
{
//TODO: Add docstrings
//TODO: Docstrings should explain when REST requests are sent and how many
public interface IDiscordClient : IDisposable
{
LoginState LoginState { get; }
@@ -28,7 +29,8 @@ namespace Discord
Task<IReadOnlyCollection<IConnection>> GetConnectionsAsync();
Task<IGuild> GetGuildAsync(ulong id);
Task<IReadOnlyCollection<IUserGuild>> GetGuildsAsync();
Task<IReadOnlyCollection<IGuild>> GetGuildsAsync();
Task<IReadOnlyCollection<IUserGuild>> GetGuildSummariesAsync();
Task<IGuild> CreateGuildAsync(string name, IVoiceRegion region, Stream jpegIcon = null);
Task<IInvite> GetInviteAsync(string inviteIdOrXkcd);