@@ -55,6 +55,7 @@ pub struct MemoryStore {
55
55
sessions : SessionStore ,
56
56
inbound_group_sessions : GroupSessionStore ,
57
57
outbound_group_sessions : StdRwLock < BTreeMap < OwnedRoomId , OutboundGroupSession > > ,
58
+ tracked_users : StdRwLock < Vec < TrackedUser > > ,
58
59
olm_hashes : StdRwLock < HashMap < String , HashSet < String > > > ,
59
60
devices : DeviceStore ,
60
61
identities : StdRwLock < HashMap < OwnedUserId , ReadOnlyUserIdentities > > ,
@@ -76,6 +77,7 @@ impl Default for MemoryStore {
76
77
sessions : SessionStore :: new ( ) ,
77
78
inbound_group_sessions : GroupSessionStore :: new ( ) ,
78
79
outbound_group_sessions : Default :: default ( ) ,
80
+ tracked_users : Default :: default ( ) ,
79
81
olm_hashes : Default :: default ( ) ,
80
82
devices : DeviceStore :: new ( ) ,
81
83
identities : Default :: default ( ) ,
@@ -315,10 +317,13 @@ impl CryptoStore for MemoryStore {
315
317
}
316
318
317
319
async fn load_tracked_users ( & self ) -> Result < Vec < TrackedUser > > {
318
- Ok ( Vec :: new ( ) )
320
+ Ok ( self . tracked_users . read ( ) . unwrap ( ) . clone ( ) )
319
321
}
320
322
321
- async fn save_tracked_users ( & self , _: & [ ( & UserId , bool ) ] ) -> Result < ( ) > {
323
+ async fn save_tracked_users ( & self , tracked_users : & [ ( & UserId , bool ) ] ) -> Result < ( ) > {
324
+ self . tracked_users . write ( ) . unwrap ( ) . extend ( tracked_users. iter ( ) . map ( |( user_id, dirty) | {
325
+ TrackedUser { user_id : user_id. to_owned ( ) . into ( ) , dirty : * dirty }
326
+ } ) ) ;
322
327
Ok ( ( ) )
323
328
}
324
329
@@ -472,7 +477,7 @@ impl CryptoStore for MemoryStore {
472
477
#[ cfg( test) ]
473
478
mod tests {
474
479
use matrix_sdk_test:: async_test;
475
- use ruma:: room_id;
480
+ use ruma:: { room_id, user_id } ;
476
481
use vodozemac:: { Curve25519PublicKey , Ed25519PublicKey } ;
477
482
478
483
use crate :: {
@@ -526,7 +531,7 @@ mod tests {
526
531
527
532
#[ async_test]
528
533
async fn test_outbound_group_session_store ( ) {
529
- // Given an outbound sessions
534
+ // Given an outbound session
530
535
let ( account, _) = get_account_and_session_test_helper ( ) ;
531
536
let room_id = room_id ! ( "!test:localhost" ) ;
532
537
let ( outbound, _) = account. create_group_session_pair_with_defaults ( room_id) . await ;
@@ -543,6 +548,26 @@ mod tests {
543
548
) ;
544
549
}
545
550
551
+ #[ async_test]
552
+ async fn test_tracked_users_store ( ) {
553
+ // Given some tracked users
554
+ let tracked_users =
555
+ & [ ( user_id ! ( "@dirty_user:s" ) , true ) , ( user_id ! ( "@clean_user:t" ) , false ) ] ;
556
+
557
+ // When we save them to the store
558
+ let store = MemoryStore :: new ( ) ;
559
+ store. save_tracked_users ( tracked_users) . await . unwrap ( ) ;
560
+
561
+ // Then we can get them out again
562
+ let loaded_tracked_users =
563
+ store. load_tracked_users ( ) . await . expect ( "failed to load tracked users" ) ;
564
+ assert_eq ! ( loaded_tracked_users[ 0 ] . user_id, user_id!( "@dirty_user:s" ) ) ;
565
+ assert ! ( loaded_tracked_users[ 0 ] . dirty) ;
566
+ assert_eq ! ( loaded_tracked_users[ 1 ] . user_id, user_id!( "@clean_user:t" ) ) ;
567
+ assert ! ( !loaded_tracked_users[ 1 ] . dirty) ;
568
+ assert_eq ! ( loaded_tracked_users. len( ) , 2 ) ;
569
+ }
570
+
546
571
#[ async_test]
547
572
async fn test_device_store ( ) {
548
573
let device = get_device ( ) ;
0 commit comments