From 4a968b3d6f60eab553c65a20a9a0d9b01619dd14 Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Fri, 5 Feb 2021 14:55:19 +0100 Subject: [PATCH] Get more accurate info --- src/api_data/friend_api.rs | 2 +- src/controllers/user_ws_controller.rs | 6 ++++++ src/data/friend.rs | 14 ++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/api_data/friend_api.rs b/src/api_data/friend_api.rs index 181caa2..b3d41e5 100644 --- a/src/api_data/friend_api.rs +++ b/src/api_data/friend_api.rs @@ -22,7 +22,7 @@ impl FriendAPI { FriendAPI { ID_friend: f.friend_id.id(), accepted: LegacyBool(f.accepted), - time_last_activity: f.last_activity_time, + time_last_activity: f.computed_last_activity_time(), following: LegacyBool(f.following), canPostTexts: f.can_post_texts, } diff --git a/src/controllers/user_ws_controller.rs b/src/controllers/user_ws_controller.rs index 31ca3ef..a6c6cd3 100644 --- a/src/controllers/user_ws_controller.rs +++ b/src/controllers/user_ws_controller.rs @@ -482,6 +482,12 @@ pub fn is_user_connected(user_id: &UserID) -> bool { get_ws_connections_list().lock().unwrap().iter().any(|c| &c.user_id == user_id) } +/// Check out whether user is connected or not and has at list one not incognito connection +pub fn is_user_connected_not_incognito(user_id: &UserID) -> bool { + get_ws_connections_list().lock().unwrap().iter().any(|c| &c.user_id == user_id && !c.incognito) +} + + /// Disconnect a user from all the WebSockets of a given client pub fn disconnect_user_from_client(user_id: &UserID, client: &APIClient) -> Res { let connections = get_ws_connections_list() diff --git a/src/data/friend.rs b/src/data/friend.rs index 590e31e..ee1e1af 100644 --- a/src/data/friend.rs +++ b/src/data/friend.rs @@ -2,7 +2,9 @@ //! //! @author Pierre Hubert +use crate::controllers::user_ws_controller; use crate::data::user::UserID; +use crate::utils::date_utils::time; #[derive(PartialEq, Eq)] pub struct Friend { @@ -11,4 +13,16 @@ pub struct Friend { pub following: bool, pub last_activity_time: u64, pub can_post_texts: bool, +} + +impl Friend { + /// Get the last activity of this friend. If this friend is both connected and not incognito, + /// current time will be returned instead of time stored in database + pub fn computed_last_activity_time(&self) -> u64 { + if user_ws_controller::is_user_connected_not_incognito(&self.friend_id) { + time() + } else { + self.last_activity_time + } + } } \ No newline at end of file