refactor: high-level loops
This commit is contained in:
parent
c248de0d04
commit
08043c06f4
|
|
@ -121,10 +121,7 @@ class SSSS {
|
|||
static Uint8List decodeRecoveryKey(String recoveryKey) {
|
||||
final result = base58.decode(recoveryKey.replaceAll(' ', ''));
|
||||
|
||||
var parity = 0;
|
||||
for (final b in result) {
|
||||
parity ^= b;
|
||||
}
|
||||
final parity = result.fold(0, (a, b) => a ^ b);
|
||||
if (parity != 0) {
|
||||
throw Exception('Incorrect parity');
|
||||
}
|
||||
|
|
@ -144,15 +141,8 @@ class SSSS {
|
|||
}
|
||||
|
||||
static String encodeRecoveryKey(Uint8List recoveryKey) {
|
||||
final keyToEncode = <int>[];
|
||||
for (final b in olmRecoveryKeyPrefix) {
|
||||
keyToEncode.add(b);
|
||||
}
|
||||
keyToEncode.addAll(recoveryKey);
|
||||
var parity = 0;
|
||||
for (final b in keyToEncode) {
|
||||
parity ^= b;
|
||||
}
|
||||
final keyToEncode = <int>[...olmRecoveryKeyPrefix, ...recoveryKey];
|
||||
final parity = keyToEncode.fold(0, (a, b) => a ^ b);
|
||||
keyToEncode.add(parity);
|
||||
// base58-encode and add a space every four chars
|
||||
return base58
|
||||
|
|
@ -233,10 +223,12 @@ class SSSS {
|
|||
const keyidByteLength = 24;
|
||||
|
||||
// make sure we generate a unique key id
|
||||
var keyId = base64.encode(SecureRandom(keyidByteLength).bytes);
|
||||
while (getKey(keyId) != null) {
|
||||
keyId = base64.encode(SecureRandom(keyidByteLength).bytes);
|
||||
}
|
||||
final keyId = () sync* {
|
||||
for (;;) {
|
||||
yield base64.encode(SecureRandom(keyidByteLength).bytes);
|
||||
}
|
||||
}()
|
||||
.firstWhere((keyId) => getKey(keyId) == null);
|
||||
|
||||
final accountDataType = EventTypes.secretStorageKey(keyId);
|
||||
// noooow we set the account data
|
||||
|
|
@ -553,11 +545,7 @@ class SSSS {
|
|||
return null;
|
||||
}
|
||||
if (data.content['encrypted'] is Map) {
|
||||
final Set keys = <String>{};
|
||||
for (final key in data.content['encrypted'].keys) {
|
||||
keys.add(key);
|
||||
}
|
||||
return keys;
|
||||
return data.content['encrypted'].keys.toSet();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -227,15 +227,15 @@ class Client extends MatrixApi {
|
|||
}
|
||||
|
||||
Room getRoomByAlias(String alias) {
|
||||
for (var i = 0; i < rooms.length; i++) {
|
||||
if (rooms[i].canonicalAlias == alias) return rooms[i];
|
||||
for (final room in rooms) {
|
||||
if (room.canonicalAlias == alias) return room;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
Room getRoomById(String id) {
|
||||
for (var j = 0; j < rooms.length; j++) {
|
||||
if (rooms[j].id == id) return rooms[j];
|
||||
for (final room in rooms) {
|
||||
if (room.id == id) return room;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
@ -269,15 +269,12 @@ class Client extends MatrixApi {
|
|||
.id;
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < rooms.length; i++) {
|
||||
if (rooms[i].membership == Membership.invite &&
|
||||
rooms[i].getState(EventTypes.RoomMember, userID)?.senderId ==
|
||||
userId &&
|
||||
rooms[i]
|
||||
.getState(EventTypes.RoomMember, userID)
|
||||
.content['is_direct'] ==
|
||||
for (final room in rooms) {
|
||||
if (room.membership == Membership.invite &&
|
||||
room.getState(EventTypes.RoomMember, userID)?.senderId == userId &&
|
||||
room.getState(EventTypes.RoomMember, userID).content['is_direct'] ==
|
||||
true) {
|
||||
return rooms[i].id;
|
||||
return room.id;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
|
@ -1216,23 +1213,23 @@ class Client extends MatrixApi {
|
|||
}
|
||||
|
||||
Future<void> _handleEphemerals(String id, List<dynamic> events) async {
|
||||
for (num i = 0; i < events.length; i++) {
|
||||
await _handleEvent(events[i], id, EventUpdateType.ephemeral);
|
||||
for (final event in events) {
|
||||
await _handleEvent(event, id, EventUpdateType.ephemeral);
|
||||
|
||||
// Receipt events are deltas between two states. We will create a
|
||||
// fake room account data event for this and store the difference
|
||||
// there.
|
||||
if (events[i]['type'] == 'm.receipt') {
|
||||
if (event['type'] == 'm.receipt') {
|
||||
var room = getRoomById(id);
|
||||
room ??= Room(id: id);
|
||||
|
||||
var receiptStateContent =
|
||||
room.roomAccountData['m.receipt']?.content ?? {};
|
||||
for (var eventEntry in events[i]['content'].entries) {
|
||||
for (var eventEntry in event['content'].entries) {
|
||||
final String eventID = eventEntry.key;
|
||||
if (events[i]['content'][eventID]['m.read'] != null) {
|
||||
if (event['content'][eventID]['m.read'] != null) {
|
||||
final Map<String, dynamic> userTimestampMap =
|
||||
events[i]['content'][eventID]['m.read'];
|
||||
event['content'][eventID]['m.read'];
|
||||
for (var userTimestampMapEntry in userTimestampMap.entries) {
|
||||
final mxid = userTimestampMapEntry.key;
|
||||
|
||||
|
|
@ -1253,8 +1250,8 @@ class Client extends MatrixApi {
|
|||
}
|
||||
}
|
||||
}
|
||||
events[i]['content'] = receiptStateContent;
|
||||
await _handleEvent(events[i], id, EventUpdateType.accountData);
|
||||
event['content'] = receiptStateContent;
|
||||
await _handleEvent(event, id, EventUpdateType.accountData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1262,8 +1259,8 @@ class Client extends MatrixApi {
|
|||
Future<void> _handleRoomEvents(
|
||||
String chat_id, List<dynamic> events, EventUpdateType type,
|
||||
{bool sortAtTheEnd = false}) async {
|
||||
for (num i = 0; i < events.length; i++) {
|
||||
await _handleEvent(events[i], chat_id, type, sortAtTheEnd: sortAtTheEnd);
|
||||
for (final event in events) {
|
||||
await _handleEvent(event, chat_id, type, sortAtTheEnd: sortAtTheEnd);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1490,10 +1487,10 @@ sort order of ${prevState.sortOrder}. This should never happen...''');
|
|||
|
||||
Future<Set<String>> _getUserIdsInEncryptedRooms() async {
|
||||
var userIds = <String>{};
|
||||
for (var i = 0; i < rooms.length; i++) {
|
||||
if (rooms[i].encrypted) {
|
||||
for (final room in rooms) {
|
||||
if (room.encrypted) {
|
||||
try {
|
||||
var userList = await rooms[i].requestParticipants();
|
||||
var userList = await room.requestParticipants();
|
||||
for (var user in userList) {
|
||||
if ([Membership.join, Membership.invite]
|
||||
.contains(user.membership)) {
|
||||
|
|
@ -1872,9 +1869,9 @@ sort order of ${prevState.sortOrder}. This should never happen...''');
|
|||
if (globalPushRules == null) return false;
|
||||
|
||||
if (globalPushRules['override'] is List) {
|
||||
for (var i = 0; i < globalPushRules['override'].length; i++) {
|
||||
if (globalPushRules['override'][i]['rule_id'] == '.m.rule.master') {
|
||||
return globalPushRules['override'][i]['enabled'];
|
||||
for (final pushRule in globalPushRules['override']) {
|
||||
if (pushRule['rule_id'] == '.m.rule.master') {
|
||||
return pushRule['enabled'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -679,20 +679,12 @@ class Database extends _$Database {
|
|||
|
||||
Future<List<sdk.User>> getUsers(int clientId, sdk.Room room) async {
|
||||
final res = await dbGetUsers(clientId, room.id).get();
|
||||
final ret = <sdk.User>[];
|
||||
for (final r in res) {
|
||||
ret.add(sdk.Event.fromDb(r, room).asUser);
|
||||
}
|
||||
return ret;
|
||||
return res.map((r) => sdk.Event.fromDb(r, room).asUser).toList();
|
||||
}
|
||||
|
||||
Future<List<sdk.Event>> getEventList(int clientId, sdk.Room room) async {
|
||||
final res = await dbGetEventList(clientId, room.id).get();
|
||||
final eventList = <sdk.Event>[];
|
||||
for (final r in res) {
|
||||
eventList.add(sdk.Event.fromDb(r, room));
|
||||
}
|
||||
return eventList;
|
||||
return res.map((r) => sdk.Event.fromDb(r, room)).toList();
|
||||
}
|
||||
|
||||
Future<Uint8List> getFile(String mxcUri) async {
|
||||
|
|
|
|||
|
|
@ -274,13 +274,7 @@ class Event extends MatrixEvent {
|
|||
default:
|
||||
break;
|
||||
}
|
||||
var toRemoveList = <String>[];
|
||||
for (var entry in content.entries) {
|
||||
if (!contentKeyWhiteList.contains(entry.key)) {
|
||||
toRemoveList.add(entry.key);
|
||||
}
|
||||
}
|
||||
toRemoveList.forEach((s) => content.remove(s));
|
||||
content.removeWhere((k, v) => !contentKeyWhiteList.contains(k));
|
||||
}
|
||||
|
||||
/// Returns the body of this event if it has a body.
|
||||
|
|
|
|||
|
|
@ -262,13 +262,8 @@ class Room {
|
|||
}
|
||||
if (client.directChats is Map<String, dynamic>) {
|
||||
client.directChats.forEach((String userId, dynamic roomIds) {
|
||||
if (roomIds is List<dynamic>) {
|
||||
for (var i = 0; i < roomIds.length; i++) {
|
||||
if (roomIds[i] == id) {
|
||||
returnUserId = userId;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (roomIds is List<dynamic> && roomIds.contains(id)) {
|
||||
returnUserId = userId;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -323,11 +318,7 @@ class Room {
|
|||
List<User> get typingUsers {
|
||||
if (!ephemerals.containsKey('m.typing')) return [];
|
||||
List<dynamic> typingMxid = ephemerals['m.typing'].content['user_ids'];
|
||||
var typingUsers = <User>[];
|
||||
for (var i = 0; i < typingMxid.length; i++) {
|
||||
typingUsers.add(getUserByMXIDSync(typingMxid[i]));
|
||||
}
|
||||
return typingUsers;
|
||||
return typingMxid.cast<String>().map(getUserByMXIDSync).toList();
|
||||
}
|
||||
|
||||
/// Your current client instance.
|
||||
|
|
@ -384,9 +375,9 @@ class Room {
|
|||
}
|
||||
if (heroes.isNotEmpty) {
|
||||
var displayname = '';
|
||||
for (var i = 0; i < heroes.length; i++) {
|
||||
if (heroes[i].isEmpty) continue;
|
||||
displayname += getUserByMXIDSync(heroes[i]).calcDisplayname() + ', ';
|
||||
for (final hero in heroes) {
|
||||
if (hero.isEmpty) continue;
|
||||
displayname += getUserByMXIDSync(hero).calcDisplayname() + ', ';
|
||||
}
|
||||
return displayname.substring(0, displayname.length - 2);
|
||||
}
|
||||
|
|
@ -781,11 +772,7 @@ class Room {
|
|||
|
||||
if (inReplyTo != null) {
|
||||
var replyText = '<${inReplyTo.senderId}> ' + inReplyTo.body;
|
||||
var replyTextLines = replyText.split('\n');
|
||||
for (var i = 0; i < replyTextLines.length; i++) {
|
||||
replyTextLines[i] = '> ' + replyTextLines[i];
|
||||
}
|
||||
replyText = replyTextLines.join('\n');
|
||||
replyText = replyText.split('\n').map((line) => '> $line').join('\n');
|
||||
content['format'] = 'org.matrix.custom.html';
|
||||
// be sure that we strip any previous reply fallbacks
|
||||
final replyHtml = (inReplyTo.formattedText.isNotEmpty
|
||||
|
|
@ -1465,11 +1452,9 @@ class Room {
|
|||
if (globalPushRules == null) return PushRuleState.notify;
|
||||
|
||||
if (globalPushRules['override'] is List) {
|
||||
for (var i = 0; i < globalPushRules['override'].length; i++) {
|
||||
if (globalPushRules['override'][i]['rule_id'] == id) {
|
||||
if (globalPushRules['override'][i]['actions']
|
||||
.indexOf('dont_notify') !=
|
||||
-1) {
|
||||
for (final pushRule in globalPushRules['override']) {
|
||||
if (pushRule['rule_id'] == id) {
|
||||
if (pushRule['actions'].indexOf('dont_notify') != -1) {
|
||||
return PushRuleState.dontNotify;
|
||||
}
|
||||
break;
|
||||
|
|
@ -1478,10 +1463,9 @@ class Room {
|
|||
}
|
||||
|
||||
if (globalPushRules['room'] is List) {
|
||||
for (var i = 0; i < globalPushRules['room'].length; i++) {
|
||||
if (globalPushRules['room'][i]['rule_id'] == id) {
|
||||
if (globalPushRules['room'][i]['actions'].indexOf('dont_notify') !=
|
||||
-1) {
|
||||
for (final pushRule in globalPushRules['room']) {
|
||||
if (pushRule['rule_id'] == id) {
|
||||
if (pushRule['actions'].indexOf('dont_notify') != -1) {
|
||||
return PushRuleState.mentionsOnly;
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -51,8 +51,8 @@ class Timeline {
|
|||
/// found, requests from the server. Requested events
|
||||
/// are cached.
|
||||
Future<Event> getEventById(String id) async {
|
||||
for (var i = 0; i < events.length; i++) {
|
||||
if (events[i].eventId == id) return events[i];
|
||||
for (final event in events) {
|
||||
if (event.eventId == id) return event;
|
||||
}
|
||||
if (_eventCache.containsKey(id)) return _eventCache[id];
|
||||
final requestedEvent = await room.getEventById(id);
|
||||
|
|
|
|||
Loading…
Reference in New Issue