From b4f755388a687fc484cf03684c71a7157228fd37 Mon Sep 17 00:00:00 2001 From: Lukas Lihotzki Date: Mon, 19 Apr 2021 18:22:50 +0200 Subject: [PATCH] refactor: high-level loops --- lib/encryption/cross_signing.dart | 18 +++++------------- lib/encryption/key_verification_manager.dart | 4 +--- lib/encryption/utils/key_verification.dart | 14 ++------------ lib/src/client.dart | 12 +++++------- lib/src/event.dart | 13 +++++-------- lib/src/room.dart | 15 ++++++--------- 6 files changed, 24 insertions(+), 52 deletions(-) diff --git a/lib/encryption/cross_signing.dart b/lib/encryption/cross_signing.dart index f3949bc6..092d8819 100644 --- a/lib/encryption/cross_signing.dart +++ b/lib/encryption/cross_signing.dart @@ -115,19 +115,11 @@ class CrossSigning { ]); } - bool signable(List keys) { - for (final key in keys) { - if (key is CrossSigningKey && key.usage.contains('master')) { - return true; - } - if (key.userId == client.userID && - (key is DeviceKeys) && - key.identifier != client.deviceID) { - return true; - } - } - return false; - } + bool signable(List keys) => keys.any((key) => + key is CrossSigningKey && key.usage.contains('master') || + key is DeviceKeys && + key.userId == client.userID && + key.identifier != client.deviceID); Future sign(List keys) async { Uint8List selfSigningKey; diff --git a/lib/encryption/key_verification_manager.dart b/lib/encryption/key_verification_manager.dart index be382415..4d1df085 100644 --- a/lib/encryption/key_verification_manager.dart +++ b/lib/encryption/key_verification_manager.dart @@ -42,9 +42,7 @@ class KeyVerificationManager { entriesToDispose.add(entry.key); } } - for (final k in entriesToDispose) { - _requests.remove(k); - } + entriesToDispose.forEach(_requests.remove); } void addRequest(KeyVerification request) { diff --git a/lib/encryption/utils/key_verification.dart b/lib/encryption/utils/key_verification.dart index b563bf36..5082829b 100644 --- a/lib/encryption/utils/key_verification.dart +++ b/lib/encryption/utils/key_verification.dart @@ -74,18 +74,8 @@ enum KeyVerificationState { enum KeyVerificationMethod { emoji, numbers } -List _intersect(List a, List b) { - if (b == null || a == null) { - return []; - } - final res = []; - for (final v in a) { - if (b.contains(v)) { - res.add(v); - } - } - return res; -} +List _intersect(List a, List b) => + (b == null || a == null) ? [] : a.where(b.contains).toList(); List _bytesToInt(Uint8List bytes, int totalBits) { final ret = []; diff --git a/lib/src/client.dart b/lib/src/client.dart index 1b0d475a..db8382b3 100644 --- a/lib/src/client.dart +++ b/lib/src/client.dart @@ -249,13 +249,11 @@ class Client extends MatrixApi { if (accountData['m.direct'] != null && accountData['m.direct'].content[userId] is List && accountData['m.direct'].content[userId].length > 0) { - final potentialRooms = {}; - for (final roomId in accountData['m.direct'].content[userId]) { - final room = getRoomById(roomId); - if (room != null && room.membership == Membership.join) { - potentialRooms.add(room); - } - } + final potentialRooms = accountData['m.direct'] + .content[userId] + .cast() + .map(getRoomById) + .where((room) => room != null && room.membership == Membership.join); if (potentialRooms.isNotEmpty) { return potentialRooms .fold( diff --git a/lib/src/event.dart b/lib/src/event.dart index b1706a52..f9c5484f 100644 --- a/lib/src/event.dart +++ b/lib/src/event.dart @@ -295,14 +295,11 @@ class Event extends MatrixEvent { /// Returns a list of [Receipt] instances for this event. List get receipts { if (!(room.roomAccountData.containsKey('m.receipt'))) return []; - final receiptsList = []; - for (final entry in room.roomAccountData['m.receipt'].content.entries) { - if (entry.value['event_id'] == eventId) { - receiptsList.add(Receipt(room.getUserByMXIDSync(entry.key), - DateTime.fromMillisecondsSinceEpoch(entry.value['ts']))); - } - } - return receiptsList; + return room.roomAccountData['m.receipt'].content.entries + .where((entry) => entry.value['event_id'] == eventId) + .map((entry) => Receipt(room.getUserByMXIDSync(entry.key), + DateTime.fromMillisecondsSinceEpoch(entry.value['ts']))) + .toList(); } /// Removes this event if the status is < 1. This event will just be removed diff --git a/lib/src/room.dart b/lib/src/room.dart index 425fd6e9..870fac3d 100644 --- a/lib/src/room.dart +++ b/lib/src/room.dart @@ -285,9 +285,8 @@ class Room { // perfect, it is only used for the room preview in the room list and sorting // said room list, so it should be good enough. var lastTime = DateTime.fromMillisecondsSinceEpoch(0); - final lastEvents = [ - for (var type in client.roomPreviewLastEvents) getState(type) - ]..removeWhere((e) => e == null); + final lastEvents = + client.roomPreviewLastEvents.map(getState).where((e) => e != null); var lastEvent = lastEvents.isEmpty ? null @@ -375,12 +374,10 @@ class Room { } } if (heroes.isNotEmpty) { - var displayname = ''; - for (final hero in heroes) { - if (hero.isEmpty) continue; - displayname += getUserByMXIDSync(hero).calcDisplayname() + ', '; - } - return displayname.substring(0, displayname.length - 2); + return heroes + .where((hero) => hero.isNotEmpty) + .map((hero) => getUserByMXIDSync(hero).calcDisplayname()) + .join(', '); } if (membership == Membership.invite && getState(EventTypes.RoomMember, client.userID) != null) {