aboutsummaryrefslogtreecommitdiff
path: root/src/cache
diff options
context:
space:
mode:
authoracdenisSK <[email protected]>2017-09-09 10:53:44 +0200
committeracdenisSK <[email protected]>2017-09-09 10:56:29 +0200
commit4be6b9d5008ff8bb3d1fdddff5647a6bb307513c (patch)
tree516b811875ae4cb2b98c308aabb69bc6e7a94fd2 /src/cache
parentChange order to avoid subtraction overflow error (#160) (diff)
downloadserenity-4be6b9d5008ff8bb3d1fdddff5647a6bb307513c.tar.xz
serenity-4be6b9d5008ff8bb3d1fdddff5647a6bb307513c.zip
Implement categories
Diffstat (limited to 'src/cache')
-rw-r--r--src/cache/cache_events_impl.rs10
-rw-r--r--src/cache/mod.rs8
2 files changed, 18 insertions, 0 deletions
diff --git a/src/cache/cache_events_impl.rs b/src/cache/cache_events_impl.rs
index 23fa314..64dbfde 100644
--- a/src/cache/cache_events_impl.rs
+++ b/src/cache/cache_events_impl.rs
@@ -112,6 +112,9 @@ impl CacheEventsImpl for super::Cache {
let ch = self.private_channels.insert(id, channel.clone());
ch.map(Channel::Private)
},
+ Channel::Category(ref category) => {
+ self.categories.insert(category.read().unwrap().id, category.clone()).map(Channel::Category)
+ },
}
}
@@ -123,6 +126,8 @@ impl CacheEventsImpl for super::Cache {
// anymore.
Channel::Private(_) |
Channel::Group(_) => unreachable!(),
+ // TODO: Fix this later.
+ Channel::Category(_) => unreachable!(),
};
let (guild_id, channel_id) = channel.with(|channel| (channel.guild_id, channel.id));
@@ -219,6 +224,11 @@ impl CacheEventsImpl for super::Cache {
.get_mut(&channel.read().unwrap().id)
.map(|private| private.clone_from(channel));
},
+ Channel::Category(ref category) => {
+ self.categories
+ .get_mut(&category.read().unwrap().id)
+ .map(|c| c.clone_from(category));
+ },
}
}
diff --git a/src/cache/mod.rs b/src/cache/mod.rs
index b92e72f..3a53262 100644
--- a/src/cache/mod.rs
+++ b/src/cache/mod.rs
@@ -76,6 +76,8 @@ pub struct Cache {
/// [`Event::GuildUnavailable`]: ../model/event/struct.GuildUnavailableEvent.html
/// [`Guild`]: ../model/struct.Guild.html
pub channels: HashMap<ChannelId, Arc<RwLock<GuildChannel>>>,
+ /// A map of channel categories.
+ pub categories: HashMap<ChannelId, Arc<RwLock<ChannelCategory>>>,
/// A map of the groups that the current user is in.
///
/// For bot users this will always be empty, except for in [special cases].
@@ -593,6 +595,11 @@ impl Cache {
self.users.get(&user_id.into()).cloned()
}
+ #[inline]
+ pub fn categories<C: Into<ChannelId>>(&self, channel_id: C) -> Option<Arc<RwLock<ChannelCategory>>> {
+ self.categories.get(&channel_id.into()).cloned()
+ }
+
fn update_user_entry(&mut self, user: &User) {
match self.users.entry(user.id) {
Entry::Vacant(e) => {
@@ -609,6 +616,7 @@ impl Default for Cache {
fn default() -> Cache {
Cache {
channels: HashMap::default(),
+ categories: HashMap::default(),
groups: HashMap::with_capacity(128),
guilds: HashMap::default(),
notes: HashMap::default(),