From bad334d441191805a7a5725633193990cd77fa59 Mon Sep 17 00:00:00 2001 From: Lukas Lihotzki Date: Mon, 19 Jul 2021 19:43:20 +0200 Subject: [PATCH] refactor: FilterMap extension --- .../model/events/room_encrypted_content.dart | 17 ++--------------- lib/src/utils/filter_map_extension.dart | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 15 deletions(-) create mode 100644 lib/src/utils/filter_map_extension.dart diff --git a/lib/src/model/events/room_encrypted_content.dart b/lib/src/model/events/room_encrypted_content.dart index 4f689566..4e348704 100644 --- a/lib/src/model/events/room_encrypted_content.dart +++ b/lib/src/model/events/room_encrypted_content.dart @@ -23,6 +23,7 @@ import 'package:matrix_api_lite/src/utils/logs.dart'; +import '../../utils/filter_map_extension.dart'; import '../../utils/try_get_map_extension.dart'; import '../basic_event.dart'; @@ -31,11 +32,6 @@ extension RoomEncryptedContentBasicEventExtension on BasicEvent { RoomEncryptedContent.fromJson(content); } -/// Convert Nullable iterable of MapEntries to Map -extension ToMap on Iterable> { - Map toMap() => Map.fromEntries(this); -} - class RoomEncryptedContent { String algorithm; String senderKey; @@ -53,16 +49,7 @@ class RoomEncryptedContent { // filter out invalid/incomplete CiphertextInfos ciphertextOlm = json .tryGet>('ciphertext', TryGet.silent) - ?.entries - .map((e) { - try { - return MapEntry(e.key, CiphertextInfo.fromJson(e.value)); - } catch (_) { - return null; - } - }) - .whereType>() - .toMap(); + ?.catchMap((k, v) => MapEntry(k, CiphertextInfo.fromJson(v))); Map toJson() { final data = {}; diff --git a/lib/src/utils/filter_map_extension.dart b/lib/src/utils/filter_map_extension.dart new file mode 100644 index 00000000..11621e76 --- /dev/null +++ b/lib/src/utils/filter_map_extension.dart @@ -0,0 +1,14 @@ +extension FilterMap on Map { + Map filterMap(MapEntry? Function(K, V) f) => + Map.fromEntries( + entries.map((e) => f(e.key, e.value)).whereType>()); + + Map catchMap(MapEntry Function(K, V) f) => + filterMap((k, v) { + try { + return f(k, v); + } catch (_) { + return null; + } + }); +}