Struct matrix_sdk::encryption::backups::Backups
source · pub struct Backups { /* private fields */ }
e2e-encryption
only.Expand description
The backups manager for the Client
.
Implementations§
source§impl Backups
impl Backups
sourcepub async fn create(&self) -> Result<(), Error>
pub async fn create(&self) -> Result<(), Error>
Create a new backup version, encrypted with a new backup recovery key.
The backup recovery key will be persisted locally and shared with
trusted devices as m.secret.send
to-device messages.
After the backup has been created, all room keys will be uploaded to the homeserver.
Warning: This will overwrite any existing backup.
§Examples
let backups = client.encryption().backups();
backups.create().await?;
assert_eq!(backups.state(), BackupState::Enabled);
sourcepub async fn disable(&self) -> Result<(), Error>
pub async fn disable(&self) -> Result<(), Error>
Disable and delete the currently active backup.
§Examples
let backups = client.encryption().backups();
backups.disable().await?;
assert_eq!(backups.state(), BackupState::Unknown);
sourcepub fn wait_for_steady_state(&self) -> WaitForSteadyState<'_>
pub fn wait_for_steady_state(&self) -> WaitForSteadyState<'_>
Returns a future to wait for room keys to be uploaded.
Awaiting the future will wake up a task to upload room keys which have not yet been uploaded to the homeserver. It will then wait for the task to finish uploading.
§Examples
use futures_util::StreamExt;
let backups = client.encryption().backups();
let wait_for_steady_state = backups.wait_for_steady_state();
let mut progress_stream = wait_for_steady_state.subscribe_to_progress();
tokio::spawn(async move {
while let Some(update) = progress_stream.next().await {
let Ok(update) = update else { break };
match update {
UploadState::Uploading(counts) => {
println!(
"Uploaded {} out of {} room keys.",
counts.backed_up, counts.total
);
}
UploadState::Error => break,
UploadState::Done => break,
_ => (),
}
}
});
wait_for_steady_state.await?;
sourcepub fn state_stream(
&self
) -> impl Stream<Item = Result<BackupState, BroadcastStreamRecvError>>
pub fn state_stream( &self ) -> impl Stream<Item = Result<BackupState, BroadcastStreamRecvError>>
Get a stream of updates to the BackupState
.
This method will send out the current state as the first update.
§Examples
use futures_util::StreamExt;
let backups = client.encryption().backups();
let mut state_stream = backups.state_stream();
while let Some(update) = state_stream.next().await {
let Ok(update) = update else { break };
match update {
BackupState::Enabled => {
println!("Backups have been enabled");
}
_ => (),
}
}
sourcepub fn state(&self) -> BackupState
pub fn state(&self) -> BackupState
Get the current BackupState
for this Client
.
sourcepub async fn are_enabled(&self) -> bool
pub async fn are_enabled(&self) -> bool
Are backups enabled for the current Client
?
This method will check if we locally have an active backup key and backup version and are ready to upload room keys to a backup.
sourcepub async fn exists_on_server(&self) -> Result<bool, Error>
pub async fn exists_on_server(&self) -> Result<bool, Error>
Does a backup exist on the server?
This method will request info about the current backup from the
homeserver and if a backup exits return true
, otherwise false
.
sourcepub fn room_keys_for_room_stream(
&self,
room_id: &RoomId
) -> impl Stream<Item = Result<BTreeMap<String, BTreeSet<String>>, BroadcastStreamRecvError>>
pub fn room_keys_for_room_stream( &self, room_id: &RoomId ) -> impl Stream<Item = Result<BTreeMap<String, BTreeSet<String>>, BroadcastStreamRecvError>>
Subscribe to a stream that notifies when a room key for the specified room is downloaded from the key backup.