From 1e13e06e34c8a37d16b3384cbf1d48daa7637fd8 Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Fri, 19 Nov 2021 20:38:49 +0100 Subject: [PATCH] Make event-handling related Client fields private --- crates/matrix-sdk/src/client.rs | 18 +++++++++++++++--- crates/matrix-sdk/src/event_handler.rs | 6 ++---- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/crates/matrix-sdk/src/client.rs b/crates/matrix-sdk/src/client.rs index 3b4605092..3d5fc1a30 100644 --- a/crates/matrix-sdk/src/client.rs +++ b/crates/matrix-sdk/src/client.rs @@ -34,7 +34,7 @@ use matrix_sdk_base::{ }; use matrix_sdk_common::{ instant::{Duration, Instant}, - locks::{Mutex, RwLock}, + locks::{Mutex, RwLock, RwLockReadGuard}, }; use mime::{self, Mime}; use ruma::{ @@ -125,9 +125,9 @@ pub struct Client { pub(crate) members_request_locks: Arc>>>, pub(crate) typing_notice_times: Arc>, /// Event handlers. See `register_event_handler`. - pub(crate) event_handlers: Arc>, + event_handlers: Arc>, /// Custom event handler context. See `register_event_handler_context`. - pub(crate) event_handler_data: Arc>, + event_handler_data: Arc>, /// Notification handlers. See `register_notification_handler`. notification_handlers: Arc>>, /// Whether the client should operate in application service style mode. @@ -637,6 +637,10 @@ impl Client { self } + pub(crate) async fn event_handlers(&self) -> RwLockReadGuard<'_, EventHandlerMap> { + self.event_handlers.read().await + } + /// Add an arbitrary value for use as event handler context. /// /// The value can be obtained in an event handler by adding an argument of @@ -682,6 +686,14 @@ impl Client { self } + pub(crate) fn event_handler_context(&self) -> Option + where + T: Clone + Send + Sync + 'static, + { + let map = self.event_handler_data.read().unwrap(); + map.get::().cloned() + } + /// Register a handler for a notification. /// /// Similar to [`Client::register_event_handler`], but only allows functions diff --git a/crates/matrix-sdk/src/event_handler.rs b/crates/matrix-sdk/src/event_handler.rs index ee48a053a..97993eed7 100644 --- a/crates/matrix-sdk/src/event_handler.rs +++ b/crates/matrix-sdk/src/event_handler.rs @@ -186,8 +186,7 @@ pub struct Ctx(pub T); impl EventHandlerContext for Ctx { fn from_data(data: &EventHandlerData<'_>) -> Option { - let anymap = data.client.event_handler_data.read().unwrap(); - Some(Ctx(anymap.get::()?.clone())) + data.client.event_handler_context::().map(Ctx) } } @@ -330,8 +329,7 @@ impl Client { // Construct event handler futures let futures: Vec<_> = self - .event_handlers - .read() + .event_handlers() .await .get(&event_handler_id) .into_iter()