feat(sdk): Expose the list of tracked users publicly
This commit is contained in:
parent
1bcc74738e
commit
c6100404e5
5 changed files with 35 additions and 2 deletions
|
@ -14,7 +14,10 @@
|
|||
// limitations under the License.
|
||||
|
||||
#[cfg(feature = "encryption")]
|
||||
use std::io::{Cursor, Write};
|
||||
use std::{
|
||||
collections::HashSet,
|
||||
io::{Cursor, Write},
|
||||
};
|
||||
#[cfg(all(feature = "encryption", not(target_arch = "wasm32")))]
|
||||
use std::path::PathBuf;
|
||||
use std::{
|
||||
|
@ -716,6 +719,16 @@ impl Client {
|
|||
self.base_client.olm_machine().await.map(|o| o.identity_keys().ed25519().to_owned())
|
||||
}
|
||||
|
||||
/// Get all the tracked users we know about
|
||||
///
|
||||
/// Tracked users are users for which we keep the device list of E2EE
|
||||
/// capable devices up to date.
|
||||
#[cfg(feature = "encryption")]
|
||||
#[cfg_attr(feature = "docs", doc(cfg(encryption)))]
|
||||
pub async fn tracked_users(&self) -> HashSet<UserId> {
|
||||
self.base_client.olm_machine().await.map(|o| o.tracked_users()).unwrap_or_default()
|
||||
}
|
||||
|
||||
/// Fetches the display name of the owner of the client.
|
||||
///
|
||||
/// # Example
|
||||
|
|
|
@ -14,7 +14,11 @@
|
|||
|
||||
#[cfg(feature = "sled_cryptostore")]
|
||||
use std::path::Path;
|
||||
use std::{collections::BTreeMap, mem, sync::Arc};
|
||||
use std::{
|
||||
collections::{BTreeMap, HashSet},
|
||||
mem,
|
||||
sync::Arc,
|
||||
};
|
||||
|
||||
use dashmap::DashMap;
|
||||
use matrix_sdk_common::{
|
||||
|
@ -293,6 +297,11 @@ impl OlmMachine {
|
|||
self.store.device_display_name().await
|
||||
}
|
||||
|
||||
/// Get all the tracked users we know about
|
||||
pub fn tracked_users(&self) -> HashSet<UserId> {
|
||||
self.store.tracked_users()
|
||||
}
|
||||
|
||||
/// Get the outgoing requests that need to be sent out.
|
||||
///
|
||||
/// This returns a list of `OutGoingRequest`, those requests need to be sent
|
||||
|
|
|
@ -183,6 +183,10 @@ impl CryptoStore for MemoryStore {
|
|||
self.users_for_key_query.iter().map(|u| u.clone()).collect()
|
||||
}
|
||||
|
||||
fn tracked_users(&self) -> HashSet<UserId> {
|
||||
self.tracked_users.iter().map(|u| u.to_owned()).collect()
|
||||
}
|
||||
|
||||
async fn update_tracked_user(&self, user: &UserId, dirty: bool) -> Result<bool> {
|
||||
// TODO to prevent a race between the sync and a key query in flight we
|
||||
// need to have an additional state to mention that the user changed.
|
||||
|
|
|
@ -584,6 +584,9 @@ pub trait CryptoStore: AsyncTraitDeps {
|
|||
/// the tracked users.
|
||||
fn users_for_key_query(&self) -> HashSet<UserId>;
|
||||
|
||||
/// Get all tracked users we know about.
|
||||
fn tracked_users(&self) -> HashSet<UserId>;
|
||||
|
||||
/// Add an user for tracking.
|
||||
///
|
||||
/// Returns true if the user wasn't already tracked, false otherwise.
|
||||
|
|
|
@ -673,6 +673,10 @@ impl CryptoStore for SledStore {
|
|||
!self.users_for_key_query_cache.is_empty()
|
||||
}
|
||||
|
||||
fn tracked_users(&self) -> HashSet<UserId> {
|
||||
self.tracked_users_cache.to_owned().iter().map(|u| u.clone()).collect()
|
||||
}
|
||||
|
||||
fn users_for_key_query(&self) -> HashSet<UserId> {
|
||||
#[allow(clippy::map_clone)]
|
||||
self.users_for_key_query_cache.iter().map(|u| u.clone()).collect()
|
||||
|
|
Loading…
Reference in a new issue