@@ -991,7 +991,7 @@ impl OlmMachine {
991
991
) -> Result < KeysImportResult , KeyImportError > {
992
992
let keys = Cursor :: new ( keys) ;
993
993
let keys = decrypt_room_key_export ( keys, & passphrase) ?;
994
- self . import_room_keys_helper ( keys, false , progress_listener)
994
+ self . import_room_keys_helper ( keys, None , progress_listener)
995
995
}
996
996
997
997
/// Import room keys from the given serialized unencrypted key export.
@@ -1001,6 +1001,9 @@ impl OlmMachine {
1001
1001
/// should be used if the room keys are coming from the server-side backup,
1002
1002
/// the method will mark all imported room keys as backed up.
1003
1003
///
1004
+ /// **Note**: This has been deprecated. Use
1005
+ /// [`OlmMachine::import_room_keys_from_backup`] instead.
1006
+ ///
1004
1007
/// # Arguments
1005
1008
///
1006
1009
/// * `keys` - The serialized version of the unencrypted key export.
@@ -1012,11 +1015,38 @@ impl OlmMachine {
1012
1015
keys : String ,
1013
1016
progress_listener : Box < dyn ProgressListener > ,
1014
1017
) -> Result < KeysImportResult , KeyImportError > {
1018
+ // Assume that the keys came from the current backup version.
1019
+ let backup_version = self . runtime . block_on ( self . inner . backup_machine ( ) . backup_version ( ) ) ;
1015
1020
let keys: Vec < Value > = serde_json:: from_str ( & keys) ?;
1016
-
1017
1021
let keys = keys. into_iter ( ) . map ( serde_json:: from_value) . filter_map ( |k| k. ok ( ) ) . collect ( ) ;
1022
+ self . import_room_keys_helper ( keys, backup_version. as_deref ( ) , progress_listener)
1023
+ }
1018
1024
1019
- self . import_room_keys_helper ( keys, true , progress_listener)
1025
+ /// Import room keys from the given serialized unencrypted key export.
1026
+ ///
1027
+ /// This method is the same as [`OlmMachine::import_room_keys`] but the
1028
+ /// decryption step is skipped and should be performed by the caller. This
1029
+ /// should be used if the room keys are coming from the server-side backup.
1030
+ /// The method will mark all imported room keys as backed up.
1031
+ ///
1032
+ /// # Arguments
1033
+ ///
1034
+ /// * `keys` - The serialized version of the unencrypted key export.
1035
+ ///
1036
+ /// * `backup_version` - The version of the backup that these keys came
1037
+ /// from.
1038
+ ///
1039
+ /// * `progress_listener` - A callback that can be used to introspect the
1040
+ /// progress of the key import.
1041
+ pub fn import_room_keys_from_backup (
1042
+ & self ,
1043
+ keys : String ,
1044
+ backup_version : String ,
1045
+ progress_listener : Box < dyn ProgressListener > ,
1046
+ ) -> Result < KeysImportResult , KeyImportError > {
1047
+ let keys: Vec < Value > = serde_json:: from_str ( & keys) ?;
1048
+ let keys = keys. into_iter ( ) . map ( serde_json:: from_value) . filter_map ( |k| k. ok ( ) ) . collect ( ) ;
1049
+ self . import_room_keys_helper ( keys, Some ( & backup_version) , progress_listener)
1020
1050
}
1021
1051
1022
1052
/// Discard the currently active room key for the given room if there is
@@ -1506,16 +1536,18 @@ impl OlmMachine {
1506
1536
fn import_room_keys_helper (
1507
1537
& self ,
1508
1538
keys : Vec < ExportedRoomKey > ,
1509
- from_backup : bool ,
1539
+ from_backup_version : Option < & str > ,
1510
1540
progress_listener : Box < dyn ProgressListener > ,
1511
1541
) -> Result < KeysImportResult , KeyImportError > {
1512
1542
let listener = |progress : usize , total : usize | {
1513
1543
progress_listener. on_progress ( progress as i32 , total as i32 )
1514
1544
} ;
1515
1545
1516
- #[ allow( deprecated) ]
1517
- let result =
1518
- self . runtime . block_on ( self . inner . import_room_keys ( keys, from_backup, listener) ) ?;
1546
+ let result = self . runtime . block_on ( self . inner . store ( ) . import_room_keys (
1547
+ keys,
1548
+ from_backup_version,
1549
+ listener,
1550
+ ) ) ?;
1519
1551
1520
1552
Ok ( KeysImportResult {
1521
1553
imported : result. imported_count as i64 ,
0 commit comments