@@ -34,7 +34,7 @@ use matrix_sdk_base::{
34
34
} ;
35
35
use matrix_sdk_common:: {
36
36
instant:: { Duration , Instant } ,
37
- locks:: { Mutex , RwLock } ,
37
+ locks:: { Mutex , RwLock , RwLockReadGuard } ,
38
38
} ;
39
39
use mime:: { self , Mime } ;
40
40
use ruma:: {
@@ -125,9 +125,9 @@ pub struct Client {
125
125
pub ( crate ) members_request_locks : Arc < DashMap < RoomId , Arc < Mutex < ( ) > > > > ,
126
126
pub ( crate ) typing_notice_times : Arc < DashMap < RoomId , Instant > > ,
127
127
/// Event handlers. See `register_event_handler`.
128
- pub ( crate ) event_handlers : Arc < RwLock < EventHandlerMap > > ,
128
+ event_handlers : Arc < RwLock < EventHandlerMap > > ,
129
129
/// Custom event handler context. See `register_event_handler_context`.
130
- pub ( crate ) event_handler_data : Arc < StdRwLock < AnyMap > > ,
130
+ event_handler_data : Arc < StdRwLock < AnyMap > > ,
131
131
/// Notification handlers. See `register_notification_handler`.
132
132
notification_handlers : Arc < RwLock < Vec < NotificationHandlerFn > > > ,
133
133
/// Whether the client should operate in application service style mode.
@@ -637,6 +637,10 @@ impl Client {
637
637
self
638
638
}
639
639
640
+ pub ( crate ) async fn event_handlers ( & self ) -> RwLockReadGuard < ' _ , EventHandlerMap > {
641
+ self . event_handlers . read ( ) . await
642
+ }
643
+
640
644
/// Add an arbitrary value for use as event handler context.
641
645
///
642
646
/// The value can be obtained in an event handler by adding an argument of
@@ -682,6 +686,14 @@ impl Client {
682
686
self
683
687
}
684
688
689
+ pub ( crate ) fn event_handler_context < T > ( & self ) -> Option < T >
690
+ where
691
+ T : Clone + Send + Sync + ' static ,
692
+ {
693
+ let map = self . event_handler_data . read ( ) . unwrap ( ) ;
694
+ map. get :: < T > ( ) . cloned ( )
695
+ }
696
+
685
697
/// Register a handler for a notification.
686
698
///
687
699
/// Similar to [`Client::register_event_handler`], but only allows functions
0 commit comments