|
@@ -186,27 +186,30 @@ namespace Discord |
|
|
} |
|
|
} |
|
|
internal CachedGuild AddCachedGuild(API.Gateway.ExtendedGuild model, DataStore dataStore = null) |
|
|
internal CachedGuild AddCachedGuild(API.Gateway.ExtendedGuild model, DataStore dataStore = null) |
|
|
{ |
|
|
{ |
|
|
|
|
|
dataStore = dataStore ?? DataStore; |
|
|
|
|
|
|
|
|
var guild = new CachedGuild(this, model); |
|
|
var guild = new CachedGuild(this, model); |
|
|
if (model.Unavailable != true) |
|
|
if (model.Unavailable != true) |
|
|
{ |
|
|
{ |
|
|
for (int i = 0; i < model.Channels.Length; i++) |
|
|
for (int i = 0; i < model.Channels.Length; i++) |
|
|
AddCachedChannel(model.Channels[i], dataStore); |
|
|
AddCachedChannel(model.Channels[i], dataStore); |
|
|
} |
|
|
} |
|
|
(dataStore ?? DataStore).AddGuild(guild); |
|
|
|
|
|
|
|
|
dataStore.AddGuild(guild); |
|
|
if (model.Large) |
|
|
if (model.Large) |
|
|
_largeGuilds.Enqueue(model.Id); |
|
|
_largeGuilds.Enqueue(model.Id); |
|
|
return guild; |
|
|
return guild; |
|
|
} |
|
|
} |
|
|
internal CachedGuild RemoveCachedGuild(ulong id, DataStore dataStore = null) |
|
|
internal CachedGuild RemoveCachedGuild(ulong id, DataStore dataStore = null) |
|
|
{ |
|
|
{ |
|
|
var guild = (dataStore ?? DataStore).RemoveGuild(id) as CachedGuild; |
|
|
|
|
|
|
|
|
dataStore = dataStore ?? DataStore; |
|
|
|
|
|
|
|
|
|
|
|
var guild = dataStore.RemoveGuild(id) as CachedGuild; |
|
|
foreach (var channel in guild.Channels) |
|
|
foreach (var channel in guild.Channels) |
|
|
guild.RemoveCachedChannel(channel.Id); |
|
|
guild.RemoveCachedChannel(channel.Id); |
|
|
foreach (var user in guild.Members) |
|
|
foreach (var user in guild.Members) |
|
|
guild.RemoveCachedUser(user.Id); |
|
|
guild.RemoveCachedUser(user.Id); |
|
|
return guild; |
|
|
return guild; |
|
|
} |
|
|
} |
|
|
internal CachedGuild GetCachedGuild(ulong id) => DataStore.GetGuild(id); |
|
|
|
|
|
|
|
|
|
|
|
public override Task<IChannel> GetChannel(ulong id) |
|
|
public override Task<IChannel> GetChannel(ulong id) |
|
|
{ |
|
|
{ |
|
@@ -214,22 +217,26 @@ namespace Discord |
|
|
} |
|
|
} |
|
|
internal ICachedChannel AddCachedChannel(API.Channel model, DataStore dataStore = null) |
|
|
internal ICachedChannel AddCachedChannel(API.Channel model, DataStore dataStore = null) |
|
|
{ |
|
|
{ |
|
|
|
|
|
dataStore = dataStore ?? DataStore; |
|
|
|
|
|
|
|
|
ICachedChannel channel; |
|
|
ICachedChannel channel; |
|
|
if (model.IsPrivate) |
|
|
if (model.IsPrivate) |
|
|
{ |
|
|
{ |
|
|
var recipient = AddCachedUser(model.Recipient); |
|
|
|
|
|
|
|
|
var recipient = AddCachedUser(model.Recipient, dataStore); |
|
|
channel = recipient.SetDMChannel(model); |
|
|
channel = recipient.SetDMChannel(model); |
|
|
} |
|
|
} |
|
|
else |
|
|
else |
|
|
{ |
|
|
{ |
|
|
var guild = GetCachedGuild(model.GuildId.Value); |
|
|
|
|
|
|
|
|
var guild = dataStore.GetGuild(model.GuildId.Value); |
|
|
channel = guild.AddCachedChannel(model); |
|
|
channel = guild.AddCachedChannel(model); |
|
|
} |
|
|
} |
|
|
(dataStore ?? DataStore).AddChannel(channel); |
|
|
|
|
|
|
|
|
dataStore.AddChannel(channel); |
|
|
return channel; |
|
|
return channel; |
|
|
} |
|
|
} |
|
|
internal ICachedChannel RemoveCachedChannel(ulong id, DataStore dataStore = null) |
|
|
internal ICachedChannel RemoveCachedChannel(ulong id, DataStore dataStore = null) |
|
|
{ |
|
|
{ |
|
|
|
|
|
dataStore = dataStore ?? DataStore; |
|
|
|
|
|
|
|
|
//TODO: C#7 |
|
|
//TODO: C#7 |
|
|
var channel = DataStore.RemoveChannel(id) as ICachedChannel; |
|
|
var channel = DataStore.RemoveChannel(id) as ICachedChannel; |
|
|
|
|
|
|
|
@@ -250,7 +257,6 @@ namespace Discord |
|
|
|
|
|
|
|
|
return null; |
|
|
return null; |
|
|
} |
|
|
} |
|
|
internal ICachedChannel GetCachedChannel(ulong id) => DataStore.GetChannel(id); |
|
|
|
|
|
|
|
|
|
|
|
public override Task<IUser> GetUser(ulong id) |
|
|
public override Task<IUser> GetUser(ulong id) |
|
|
{ |
|
|
{ |
|
@@ -262,13 +268,17 @@ namespace Discord |
|
|
} |
|
|
} |
|
|
internal CachedPublicUser AddCachedUser(API.User model, DataStore dataStore = null) |
|
|
internal CachedPublicUser AddCachedUser(API.User model, DataStore dataStore = null) |
|
|
{ |
|
|
{ |
|
|
var user = (dataStore ?? DataStore).GetOrAddUser(model.Id, _ => new CachedPublicUser(this, model)) as CachedPublicUser; |
|
|
|
|
|
|
|
|
dataStore = dataStore ?? DataStore; |
|
|
|
|
|
|
|
|
|
|
|
var user = dataStore.GetOrAddUser(model.Id, _ => new CachedPublicUser(this, model)) as CachedPublicUser; |
|
|
user.AddRef(); |
|
|
user.AddRef(); |
|
|
return user; |
|
|
return user; |
|
|
} |
|
|
} |
|
|
internal CachedPublicUser RemoveCachedUser(ulong id, DataStore dataStore = null) |
|
|
internal CachedPublicUser RemoveCachedUser(ulong id, DataStore dataStore = null) |
|
|
{ |
|
|
{ |
|
|
var user = (dataStore ?? DataStore).GetUser(id) as CachedPublicUser; |
|
|
|
|
|
|
|
|
dataStore = dataStore ?? DataStore; |
|
|
|
|
|
|
|
|
|
|
|
var user = dataStore.GetUser(id) as CachedPublicUser; |
|
|
user.RemoveRef(); |
|
|
user.RemoveRef(); |
|
|
return user; |
|
|
return user; |
|
|
} |
|
|
} |
|
@@ -306,7 +316,7 @@ namespace Discord |
|
|
_sessionId = data.SessionId; |
|
|
_sessionId = data.SessionId; |
|
|
DataStore = dataStore; |
|
|
DataStore = dataStore; |
|
|
|
|
|
|
|
|
await Ready().ConfigureAwait(false); |
|
|
|
|
|
|
|
|
await Ready.Raise().ConfigureAwait(false); |
|
|
|
|
|
|
|
|
_connectTask.TrySetResult(true); //Signal the .Connect() call to complete |
|
|
_connectTask.TrySetResult(true); //Signal the .Connect() call to complete |
|
|
} |
|
|
} |
|
|