Browse Source

Changes HasValue in Cachable to constructor argument

tags/1.0-rc
Sindre G. Langhus 8 years ago
parent
commit
ab60f63511
2 changed files with 16 additions and 9 deletions
  1. +3
    -2
      src/Discord.Net.Core/Utils/Cacheable.cs
  2. +13
    -7
      src/Discord.Net.WebSocket/DiscordSocketClient.cs

+ 3
- 2
src/Discord.Net.Core/Utils/Cacheable.cs View File

@@ -16,7 +16,7 @@ namespace Discord
/// <summary> /// <summary>
/// Is this entity cached? /// Is this entity cached?
/// </summary> /// </summary>
public bool HasValue => !EqualityComparer<TEntity>.Default.Equals(Value, default(TEntity));
public bool HasValue { get; }
/// <summary> /// <summary>
/// The ID of this entity. /// The ID of this entity.
/// </summary> /// </summary>
@@ -30,10 +30,11 @@ namespace Discord
public TEntity Value { get; } public TEntity Value { get; }
private Func<Task<TEntity>> DownloadFunc { get; } private Func<Task<TEntity>> DownloadFunc { get; }


internal Cacheable(TEntity value, TId id, Func<Task<TEntity>> downloadFunc)
internal Cacheable(TEntity value, TId id, bool hasValue , Func<Task<TEntity>> downloadFunc)
{ {
Value = value; Value = value;
Id = id; Id = id;
HasValue = hasValue;
DownloadFunc = downloadFunc; DownloadFunc = downloadFunc;
} }




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

@@ -1273,7 +1273,8 @@ namespace Discord.WebSocket


SocketMessage before = null, after = null; SocketMessage before = null, after = null;
SocketMessage cachedMsg = channel.GetCachedMessage(data.Id); SocketMessage cachedMsg = channel.GetCachedMessage(data.Id);
if (cachedMsg != null)
bool isCached = cachedMsg != null;
if (isCached)
{ {
before = cachedMsg.Clone(); before = cachedMsg.Clone();
cachedMsg.Update(State, data); cachedMsg.Update(State, data);
@@ -1292,7 +1293,7 @@ namespace Discord.WebSocket


after = SocketMessage.Create(this, State, author, channel, data); after = SocketMessage.Create(this, State, author, channel, data);
} }
var cacheableBefore = new Cacheable<IMessage, ulong>(before, data.Id, async () => await channel.GetMessageAsync(data.Id));
var cacheableBefore = new Cacheable<IMessage, ulong>(before, data.Id, isCached , async () => await channel.GetMessageAsync(data.Id));


await _messageUpdatedEvent.InvokeAsync(cacheableBefore, after, channel).ConfigureAwait(false); await _messageUpdatedEvent.InvokeAsync(cacheableBefore, after, channel).ConfigureAwait(false);
} }
@@ -1318,7 +1319,8 @@ namespace Discord.WebSocket
} }


var msg = SocketChannelHelper.RemoveMessage(channel, this, data.Id); var msg = SocketChannelHelper.RemoveMessage(channel, this, data.Id);
var cacheable = new Cacheable<IMessage, ulong>(msg, data.Id, async () => await channel.GetMessageAsync(data.Id));
bool isCached = msg != null;
var cacheable = new Cacheable<IMessage, ulong>(msg, data.Id, isCached, async () => await channel.GetMessageAsync(data.Id));


await _messageDeletedEvent.InvokeAsync(cacheable, channel).ConfigureAwait(false); await _messageDeletedEvent.InvokeAsync(cacheable, channel).ConfigureAwait(false);
} }
@@ -1338,9 +1340,10 @@ namespace Discord.WebSocket
if (channel != null) if (channel != null)
{ {
SocketUserMessage cachedMsg = channel.GetCachedMessage(data.MessageId) as SocketUserMessage; SocketUserMessage cachedMsg = channel.GetCachedMessage(data.MessageId) as SocketUserMessage;
bool isCached = cachedMsg != null;
var user = await channel.GetUserAsync(data.UserId, CacheMode.CacheOnly); var user = await channel.GetUserAsync(data.UserId, CacheMode.CacheOnly);
SocketReaction reaction = SocketReaction.Create(data, channel, cachedMsg, Optional.Create(user)); SocketReaction reaction = SocketReaction.Create(data, channel, cachedMsg, Optional.Create(user));
var cacheable = new Cacheable<IUserMessage, ulong>(cachedMsg, data.MessageId, async () => await channel.GetMessageAsync(data.MessageId) as IUserMessage);
var cacheable = new Cacheable<IUserMessage, ulong>(cachedMsg, data.MessageId, isCached, async () => await channel.GetMessageAsync(data.MessageId) as IUserMessage);


cachedMsg?.AddReaction(reaction); cachedMsg?.AddReaction(reaction);


@@ -1362,9 +1365,10 @@ namespace Discord.WebSocket
if (channel != null) if (channel != null)
{ {
SocketUserMessage cachedMsg = channel.GetCachedMessage(data.MessageId) as SocketUserMessage; SocketUserMessage cachedMsg = channel.GetCachedMessage(data.MessageId) as SocketUserMessage;
bool isCached = cachedMsg != null;
var user = await channel.GetUserAsync(data.UserId, CacheMode.CacheOnly); var user = await channel.GetUserAsync(data.UserId, CacheMode.CacheOnly);
SocketReaction reaction = SocketReaction.Create(data, channel, cachedMsg, Optional.Create(user)); SocketReaction reaction = SocketReaction.Create(data, channel, cachedMsg, Optional.Create(user));
var cacheable = new Cacheable<IUserMessage, ulong>(cachedMsg, data.MessageId, async () => await channel.GetMessageAsync(data.MessageId) as IUserMessage);
var cacheable = new Cacheable<IUserMessage, ulong>(cachedMsg, data.MessageId, isCached, async () => await channel.GetMessageAsync(data.MessageId) as IUserMessage);


cachedMsg?.RemoveReaction(reaction); cachedMsg?.RemoveReaction(reaction);


@@ -1386,7 +1390,8 @@ namespace Discord.WebSocket
if (channel != null) if (channel != null)
{ {
SocketUserMessage cachedMsg = channel.GetCachedMessage(data.MessageId) as SocketUserMessage; SocketUserMessage cachedMsg = channel.GetCachedMessage(data.MessageId) as SocketUserMessage;
var cacheable = new Cacheable<IUserMessage, ulong>(cachedMsg, data.MessageId, async () => await channel.GetMessageAsync(data.MessageId) as IUserMessage);
bool isCached = cachedMsg != null;
var cacheable = new Cacheable<IUserMessage, ulong>(cachedMsg, data.MessageId, isCached, async () => await channel.GetMessageAsync(data.MessageId) as IUserMessage);


cachedMsg?.ClearReactions(); cachedMsg?.ClearReactions();


@@ -1416,7 +1421,8 @@ namespace Discord.WebSocket
foreach (var id in data.Ids) foreach (var id in data.Ids)
{ {
var msg = SocketChannelHelper.RemoveMessage(channel, this, id); var msg = SocketChannelHelper.RemoveMessage(channel, this, id);
var cacheable = new Cacheable<IMessage, ulong>(msg, id, async () => await channel.GetMessageAsync(id));
bool isCached = msg != null;
var cacheable = new Cacheable<IMessage, ulong>(msg, id, isCached, async () => await channel.GetMessageAsync(id));
await _messageDeletedEvent.InvokeAsync(cacheable, channel).ConfigureAwait(false); await _messageDeletedEvent.InvokeAsync(cacheable, channel).ConfigureAwait(false);
} }
} }


Loading…
Cancel
Save