Browse Source

More datastore fixes

tags/1.0-rc
RogueException 9 years ago
parent
commit
2f51500d25
1 changed files with 22 additions and 8 deletions
  1. +22
    -8
      src/Discord.Net/DiscordSocketClient.cs

+ 22
- 8
src/Discord.Net/DiscordSocketClient.cs View File

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


Loading…
Cancel
Save