aboutsummaryrefslogtreecommitdiff
path: root/src/client
diff options
context:
space:
mode:
authorAustin Hellyer <[email protected]>2016-12-28 11:14:32 -0800
committerAustin Hellyer <[email protected]>2016-12-28 11:14:32 -0800
commit5b275fc425d4ef1c1a9eaa9d915db1f873f9c11d (patch)
tree74a6a43e2963738b77136f12ed0f0297abc6d5e9 /src/client
parentSupport webp/gif avatars (diff)
downloadserenity-5b275fc425d4ef1c1a9eaa9d915db1f873f9c11d.tar.xz
serenity-5b275fc425d4ef1c1a9eaa9d915db1f873f9c11d.zip
Update current user presence in cache on set
Update the presence of the current user in the cache - if enabled - when the current user updates their presence through a Shard. Additionally, instead of sending an idle "since" of 0, use the current time.
Diffstat (limited to 'src/client')
-rw-r--r--src/client/gateway/shard.rs21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/client/gateway/shard.rs b/src/client/gateway/shard.rs
index 6b70dd5..0e4d46b 100644
--- a/src/client/gateway/shard.rs
+++ b/src/client/gateway/shard.rs
@@ -8,6 +8,7 @@ use std::mem;
use super::super::login_type::LoginType;
use super::super::rest;
use super::{GatewayError, GatewayStatus, prep};
+use time;
use websocket::client::{Client as WsClient, Sender, Receiver};
use websocket::message::Message as WsMessage;
use websocket::result::WebSocketError;
@@ -19,6 +20,8 @@ use ::internal::ws_impl::{ReceiverExt, SenderExt};
use ::model::event::{Event, GatewayEvent, ReadyEvent};
use ::model::{ChannelId, Game, GuildId, OnlineStatus};
+#[cfg(feature="cache")]
+use ::client::CACHE;
#[cfg(feature="voice")]
use ::ext::voice::Manager as VoiceManager;
@@ -508,12 +511,13 @@ impl Shard {
fn update_presence(&self) {
let (ref game, status, afk) = self.current_presence;
+ let now = time::get_time().sec as u64;
let msg = ObjectBuilder::new()
.insert("op", OpCode::StatusUpdate.num())
.insert_object("d", move |mut object| {
object = object.insert("afk", afk)
- .insert("since", 0)
+ .insert("since", now)
.insert("status", status.name());
match game.as_ref() {
@@ -527,5 +531,20 @@ impl Shard {
.build();
let _ = self.keepalive_channel.send(GatewayStatus::SendMessage(msg));
+
+ #[cfg(feature="cache")]
+ {
+ let mut cache = CACHE.write().unwrap();
+ let current_user_id = cache.user.id;
+
+ for (user_id, presence) in &mut cache.presences {
+ if *user_id != current_user_id {
+ continue;
+ }
+
+ presence.game = game.clone();
+ presence.last_modified = Some(now);
+ }
+ }
}
}