| @@ -199,14 +199,14 @@ namespace Discord | |||||
| } | } | ||||
| internal CachedGuild RemoveCachedGuild(ulong id, DataStore dataStore = null) | internal CachedGuild RemoveCachedGuild(ulong id, DataStore dataStore = null) | ||||
| { | { | ||||
| var guild = DataStore.RemoveGuild(id) as CachedGuild; | |||||
| var guild = (dataStore ?? 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) as CachedGuild; | |||||
| internal CachedGuild GetCachedGuild(ulong id) => DataStore.GetGuild(id); | |||||
| public override Task<IChannel> GetChannel(ulong id) | public override Task<IChannel> GetChannel(ulong id) | ||||
| { | { | ||||
| @@ -214,29 +214,43 @@ namespace Discord | |||||
| } | } | ||||
| internal ICachedChannel AddCachedChannel(API.Channel model, DataStore dataStore = null) | internal ICachedChannel AddCachedChannel(API.Channel model, DataStore dataStore = null) | ||||
| { | { | ||||
| ICachedChannel channel; | |||||
| if (model.IsPrivate) | if (model.IsPrivate) | ||||
| { | { | ||||
| var recipient = AddCachedUser(model.Recipient); | var recipient = AddCachedUser(model.Recipient); | ||||
| return recipient.SetDMChannel(model); | |||||
| channel = recipient.SetDMChannel(model); | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| var guild = GetCachedGuild(model.GuildId.Value); | var guild = GetCachedGuild(model.GuildId.Value); | ||||
| return guild.AddCachedChannel(model); | |||||
| channel = guild.AddCachedChannel(model); | |||||
| } | } | ||||
| (dataStore ?? DataStore).AddChannel(channel); | |||||
| return channel; | |||||
| } | } | ||||
| internal ICachedChannel RemoveCachedChannel(ulong id, DataStore dataStore = null) | internal ICachedChannel RemoveCachedChannel(ulong id, DataStore dataStore = null) | ||||
| { | { | ||||
| //TODO: C#7 | |||||
| var channel = DataStore.RemoveChannel(id) as ICachedChannel; | var channel = DataStore.RemoveChannel(id) as ICachedChannel; | ||||
| var guildChannel = channel as ICachedGuildChannel; | |||||
| if (guildChannel != null) | |||||
| { | |||||
| guildChannel.Guild.RemoveCachedChannel(guildChannel.Id); | |||||
| return channel; | |||||
| } | |||||
| var dmChannel = channel as CachedDMChannel; | var dmChannel = channel as CachedDMChannel; | ||||
| if (dmChannel != null) | if (dmChannel != null) | ||||
| { | { | ||||
| var recipient = dmChannel.Recipient; | var recipient = dmChannel.Recipient; | ||||
| recipient.RemoveDMChannel(id); | recipient.RemoveDMChannel(id); | ||||
| return channel; | |||||
| } | } | ||||
| return channel; | |||||
| return null; | |||||
| } | } | ||||
| internal ICachedChannel GetCachedChannel(ulong id) => DataStore.GetChannel(id) as ICachedChannel; | |||||
| internal ICachedChannel GetCachedChannel(ulong id) => DataStore.GetChannel(id); | |||||
| public override Task<IUser> GetUser(ulong id) | public override Task<IUser> GetUser(ulong id) | ||||
| { | { | ||||
| @@ -248,13 +262,13 @@ namespace Discord | |||||
| } | } | ||||
| internal CachedPublicUser AddCachedUser(API.User model, DataStore dataStore = null) | internal CachedPublicUser AddCachedUser(API.User model, DataStore dataStore = null) | ||||
| { | { | ||||
| var user = DataStore.GetOrAddUser(model.Id, _ => new CachedPublicUser(this, model)) as CachedPublicUser; | |||||
| var user = (dataStore ?? 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.GetUser(id) as CachedPublicUser; | |||||
| var user = (dataStore ?? DataStore).GetUser(id) as CachedPublicUser; | |||||
| user.RemoveRef(); | user.RemoveRef(); | ||||
| return user; | return user; | ||||
| } | } | ||||