@@ -55,6 +55,7 @@ pub struct MemoryStore {
55
55
sessions : SessionStore ,
56
56
inbound_group_sessions : GroupSessionStore ,
57
57
outbound_group_sessions : StdRwLock < Vec < 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 ( ) ,
@@ -318,10 +320,13 @@ impl CryptoStore for MemoryStore {
318
320
}
319
321
320
322
async fn load_tracked_users ( & self ) -> Result < Vec < TrackedUser > > {
321
- Ok ( Vec :: new ( ) )
323
+ Ok ( self . tracked_users . read ( ) . unwrap ( ) . clone ( ) )
322
324
}
323
325
324
- async fn save_tracked_users ( & self , _: & [ ( & UserId , bool ) ] ) -> Result < ( ) > {
326
+ async fn save_tracked_users ( & self , tracked_users : & [ ( & UserId , bool ) ] ) -> Result < ( ) > {
327
+ self . tracked_users . write ( ) . unwrap ( ) . extend ( tracked_users. iter ( ) . map ( |( user_id, dirty) | {
328
+ TrackedUser { user_id : user_id. to_owned ( ) . into ( ) , dirty : * dirty }
329
+ } ) ) ;
325
330
Ok ( ( ) )
326
331
}
327
332
@@ -475,7 +480,7 @@ impl CryptoStore for MemoryStore {
475
480
#[ cfg( test) ]
476
481
mod tests {
477
482
use matrix_sdk_test:: async_test;
478
- use ruma:: room_id;
483
+ use ruma:: { room_id, user_id } ;
479
484
use vodozemac:: { Curve25519PublicKey , Ed25519PublicKey } ;
480
485
481
486
use crate :: {
@@ -529,7 +534,7 @@ mod tests {
529
534
530
535
#[ async_test]
531
536
async fn test_outbound_group_session_store ( ) {
532
- // Given an outbound sessions
537
+ // Given an outbound session
533
538
let ( account, _) = get_account_and_session_test_helper ( ) ;
534
539
let room_id = room_id ! ( "!test:localhost" ) ;
535
540
let ( outbound, _) = account. create_group_session_pair_with_defaults ( room_id) . await ;
@@ -546,6 +551,26 @@ mod tests {
546
551
) ;
547
552
}
548
553
554
+ #[ async_test]
555
+ async fn test_tracked_users_store ( ) {
556
+ // Given some tracked users
557
+ let tracked_users =
558
+ & [ ( user_id ! ( "@dirty_user:s" ) , true ) , ( user_id ! ( "@clean_user:t" ) , false ) ] ;
559
+
560
+ // When we save them to the store
561
+ let store = MemoryStore :: new ( ) ;
562
+ store. save_tracked_users ( tracked_users) . await . unwrap ( ) ;
563
+
564
+ // Then we can get them out again
565
+ let loaded_tracked_users =
566
+ store. load_tracked_users ( ) . await . expect ( "failed to load tracked users" ) ;
567
+ assert_eq ! ( loaded_tracked_users[ 0 ] . user_id, user_id!( "@dirty_user:s" ) ) ;
568
+ assert_eq ! ( loaded_tracked_users[ 0 ] . dirty, true ) ;
569
+ assert_eq ! ( loaded_tracked_users[ 1 ] . user_id, user_id!( "@clean_user:t" ) ) ;
570
+ assert_eq ! ( loaded_tracked_users[ 1 ] . dirty, false ) ;
571
+ assert_eq ! ( loaded_tracked_users. len( ) , 2 ) ;
572
+ }
573
+
549
574
#[ async_test]
550
575
async fn test_device_store ( ) {
551
576
let device = get_device ( ) ;
0 commit comments