encryptToDeviceMessage method
Future<Map<String, Map<String, Map<String, dynamic> > > >
encryptToDeviceMessage(
- List<
DeviceKeys> deviceKeys, - String type,
- Map<
String, dynamic> payload
Implementation
Future<Map<String, Map<String, Map<String, dynamic>>>> encryptToDeviceMessage(
List<DeviceKeys> deviceKeys,
String type,
Map<String, dynamic> payload) async {
final data = <String, Map<String, Map<String, dynamic>>>{};
// first check if any of our sessions we want to encrypt for are in the database
if (encryption.olmDatabase != null) {
await getOlmSessionsForDevicesFromDatabase(
deviceKeys.map((d) => d.curve25519Key!).toList());
}
final deviceKeysWithoutSession = List<DeviceKeys>.from(deviceKeys);
deviceKeysWithoutSession.removeWhere((DeviceKeys deviceKeys) =>
olmSessions[deviceKeys.curve25519Key]?.isNotEmpty ?? false);
if (deviceKeysWithoutSession.isNotEmpty) {
await startOutgoingOlmSessions(deviceKeysWithoutSession);
}
for (final device in deviceKeys) {
final userData = data[device.userId] ??= {};
try {
userData[device.deviceId!] = await encryptToDeviceMessagePayload(
device, type, payload,
getFromDb: false);
} on NoOlmSessionFoundException catch (e) {
Logs().d('[LibOlm] Error encrypting to-device event', e);
continue;
} catch (e, s) {
Logs().wtf('[LibOlm] Error encrypting to-device event', e, s);
continue;
}
}
return data;
}