Skip to content

Commit 9e4eda3

Browse files
committed
crypto: Store TrackedUsers in MemoryStore
1 parent bcf31a6 commit 9e4eda3

File tree

2 files changed

+30
-5
lines changed

2 files changed

+30
-5
lines changed

crates/matrix-sdk-crypto/src/store/memorystore.rs

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ pub struct MemoryStore {
5555
sessions: SessionStore,
5656
inbound_group_sessions: GroupSessionStore,
5757
outbound_group_sessions: StdRwLock<Vec<OutboundGroupSession>>,
58+
tracked_users: StdRwLock<Vec<TrackedUser>>,
5859
olm_hashes: StdRwLock<HashMap<String, HashSet<String>>>,
5960
devices: DeviceStore,
6061
identities: StdRwLock<HashMap<OwnedUserId, ReadOnlyUserIdentities>>,
@@ -76,6 +77,7 @@ impl Default for MemoryStore {
7677
sessions: SessionStore::new(),
7778
inbound_group_sessions: GroupSessionStore::new(),
7879
outbound_group_sessions: Default::default(),
80+
tracked_users: Default::default(),
7981
olm_hashes: Default::default(),
8082
devices: DeviceStore::new(),
8183
identities: Default::default(),
@@ -318,10 +320,13 @@ impl CryptoStore for MemoryStore {
318320
}
319321

320322
async fn load_tracked_users(&self) -> Result<Vec<TrackedUser>> {
321-
Ok(Vec::new())
323+
Ok(self.tracked_users.read().unwrap().clone())
322324
}
323325

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+
}));
325330
Ok(())
326331
}
327332

@@ -475,7 +480,7 @@ impl CryptoStore for MemoryStore {
475480
#[cfg(test)]
476481
mod tests {
477482
use matrix_sdk_test::async_test;
478-
use ruma::room_id;
483+
use ruma::{room_id, user_id};
479484
use vodozemac::{Curve25519PublicKey, Ed25519PublicKey};
480485

481486
use crate::{
@@ -529,7 +534,7 @@ mod tests {
529534

530535
#[async_test]
531536
async fn test_outbound_group_session_store() {
532-
// Given an outbound sessions
537+
// Given an outbound session
533538
let (account, _) = get_account_and_session_test_helper();
534539
let room_id = room_id!("!test:localhost");
535540
let (outbound, _) = account.create_group_session_pair_with_defaults(room_id).await;
@@ -546,6 +551,26 @@ mod tests {
546551
);
547552
}
548553

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+
549574
#[async_test]
550575
async fn test_device_store() {
551576
let device = get_device();

crates/matrix-sdk-crypto/src/store/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -526,7 +526,7 @@ pub struct Changes {
526526
}
527527

528528
/// A user for which we are tracking the list of devices.
529-
#[derive(Debug, Serialize, Deserialize)]
529+
#[derive(Clone, Debug, Serialize, Deserialize)]
530530
pub struct TrackedUser {
531531
/// The user ID of the user.
532532
pub user_id: OwnedUserId,

0 commit comments

Comments
 (0)