diff --git a/lib/encryption/key_manager.dart b/lib/encryption/key_manager.dart index 5c3df9c1..1ae677d9 100644 --- a/lib/encryption/key_manager.dart +++ b/lib/encryption/key_manager.dart @@ -348,6 +348,10 @@ class KeyManager { sess.outboundGroupSession!.session_id(), ); if (inboundSess == null) { + Logs().e( + 'No inbound session found for outbound group session!', + sess.outboundGroupSession?.session_id(), + ); wipe = true; } @@ -601,6 +605,27 @@ class KeyManager { ); await storeOutboundGroupSession(roomId, sess); _outboundGroupSessions[roomId] = sess; + final devices = deviceKeys.map((keys) => keys.deviceId).toList(); + final users = deviceKeys.fold( + {}, + (users, keys) => users..add(keys.userId), + ).toList(); + client.onTimelineEvent.add( + Event( + eventId: 'fake_event_${rawSession['session_id']}', + content: { + 'body': + '🔒 Verschlüsselte Unterhaltung von ${users.length} Benutzern mit ${devices.length} Geräten', + 'devices': devices, + 'members': users, + }, + type: 'sdk.dart.matrix.new_megolm_session', + senderId: client.userID!, + originServerTs: DateTime.now(), + room: room, + stateKey: '', + ), + ); } catch (e, s) { Logs().e( '[LibOlm] Unable to send the session key to the participating devices', diff --git a/lib/src/utils/event_localizations.dart b/lib/src/utils/event_localizations.dart index 1ae3b98a..0506ce2b 100644 --- a/lib/src/utils/event_localizations.dart +++ b/lib/src/utils/event_localizations.dart @@ -119,6 +119,7 @@ abstract class EventLocalizations { EventTypes.Sticker: (event, i18n, body) => i18n.sentASticker( event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n), ), + 'sdk.dart.matrix.new_megolm_session': (event, i18n, body) => body, EventTypes.Redaction: (event, i18n, body) => i18n.redactedAnEvent(event), EventTypes.RoomAliases: (event, i18n, body) => i18n.changedTheRoomAliases( event.senderFromMemoryOrFallback.calcDisplayname(i18n: i18n),