diff --git a/lib/encryption/key_manager.dart b/lib/encryption/key_manager.dart index 57923b08..7e51cf57 100644 --- a/lib/encryption/key_manager.dart +++ b/lib/encryption/key_manager.dart @@ -384,7 +384,21 @@ class KeyManager { sess.sentMessages); } + final Map> + _pendingNewOutboundGroupSessions = {}; + Future createOutboundGroupSession(String roomId) async { + if (_pendingNewOutboundGroupSessions.containsKey(roomId)) { + return _pendingNewOutboundGroupSessions[roomId]; + } + _pendingNewOutboundGroupSessions[roomId] = + _createOutboundGroupSession(roomId); + await _pendingNewOutboundGroupSessions[roomId]; + return _pendingNewOutboundGroupSessions.remove(roomId); + } + + Future _createOutboundGroupSession( + String roomId) async { await clearOrUseOutboundGroupSession(roomId, wipe: true); final room = client.getRoomById(roomId); if (room == null) {