| @@ -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 | ||||
| } | } | ||||