diff --git a/lib/encryption/key_manager.dart b/lib/encryption/key_manager.dart index 088a9253..1cade6e3 100644 --- a/lib/encryption/key_manager.dart +++ b/lib/encryption/key_manager.dart @@ -226,7 +226,13 @@ class KeyManager { } /// Attempt auto-request for a key - void maybeAutoRequest(String roomId, String sessionId, String senderKey) { + void maybeAutoRequest( + String roomId, + String sessionId, + String senderKey, { + bool tryOnlineBackup = true, + bool onlineKeyBackupOnly = true, + }) { final room = client.getRoomById(roomId); final requestIdent = '$roomId|$sessionId|$senderKey'; if (room != null && @@ -234,8 +240,13 @@ class KeyManager { !client.isUnknownSession) { // do e2ee recovery _requestedSessionIds.add(requestIdent); - runInRoot( - () => request(room, sessionId, senderKey, onlineKeyBackupOnly: true)); + runInRoot(() => request( + room, + sessionId, + senderKey, + tryOnlineBackup: tryOnlineBackup, + onlineKeyBackupOnly: onlineKeyBackupOnly, + )); } } diff --git a/lib/src/timeline.dart b/lib/src/timeline.dart index c230b8d4..781ce8a7 100644 --- a/lib/src/timeline.dart +++ b/lib/src/timeline.dart @@ -333,14 +333,22 @@ class Timeline { } /// Request the keys for undecryptable events of this timeline - void requestKeys() { + void requestKeys({ + bool tryOnlineBackup = true, + bool onlineKeyBackupOnly = true, + }) { for (final event in events) { if (event.type == EventTypes.Encrypted && event.messageType == MessageTypes.BadEncrypted && event.content['can_request_session'] == true) { try { - room.client.encryption?.keyManager.maybeAutoRequest(room.id, - event.content['session_id'], event.content['sender_key']); + room.client.encryption?.keyManager.maybeAutoRequest( + room.id, + event.content['session_id'], + event.content['sender_key'], + tryOnlineBackup: tryOnlineBackup, + onlineKeyBackupOnly: onlineKeyBackupOnly, + ); } catch (_) { // dispose }