diff --git a/lib/src/model/events/room_encrypted_content.dart b/lib/src/model/events/room_encrypted_content.dart index e062f77f..e124d3ca 100644 --- a/lib/src/model/events/room_encrypted_content.dart +++ b/lib/src/model/events/room_encrypted_content.dart @@ -31,6 +31,14 @@ extension RoomEncryptedContentBasicEventExtension on BasicEvent { RoomEncryptedContent.fromJson(content); } +/// Convert Nullable iterable of MapEntries to Map +extension ToMap on Iterable>? { + Map? toMap() { + final that = this; + return that != null ? Map.fromEntries(that) : null; + } +} + class RoomEncryptedContent { String algorithm; String senderKey; @@ -45,9 +53,19 @@ class RoomEncryptedContent { deviceId = json.tryGet('device_id'), sessionId = json.tryGet('session_id'), ciphertextMegolm = json.tryGet('ciphertext'), + // filter out invalid/incomplete CiphertextInfos ciphertextOlm = json .tryGet>('ciphertext') - ?.map((k, v) => MapEntry(k, CiphertextInfo.fromJson(v))); + ?.entries + .map((e) { + try { + return MapEntry(e.key, CiphertextInfo.fromJson(e.value)); + } catch (_) { + return null; + } + }) + .whereType>() + .toMap(); Map toJson() { final data = {};