getUserDeviceKeys method
Implementation
@override
Future<Map<String, DeviceKeysList>> getUserDeviceKeys(Client client) =>
runBenchmarked<Map<String, DeviceKeysList>>(
'Get all user device keys from store', () async {
final deviceKeysOutdated =
await _userDeviceKeysOutdatedBox.getAllValues();
if (deviceKeysOutdated.isEmpty) {
return {};
}
final res = <String, DeviceKeysList>{};
final userDeviceKeys = await _userDeviceKeysBox.getAllValues();
final userCrossSigningKeys =
await _userCrossSigningKeysBox.getAllValues();
for (final userId in deviceKeysOutdated.keys) {
final deviceKeysBoxKeys = userDeviceKeys.keys.where((tuple) {
final tupleKey = TupleKey.fromString(tuple);
return tupleKey.parts.first == userId;
});
final crossSigningKeysBoxKeys =
userCrossSigningKeys.keys.where((tuple) {
final tupleKey = TupleKey.fromString(tuple);
return tupleKey.parts.first == userId;
});
final childEntries = deviceKeysBoxKeys.map(
(key) {
final userDeviceKey = userDeviceKeys[key];
if (userDeviceKey == null) return null;
return copyMap(userDeviceKey);
},
);
final crossSigningEntries = crossSigningKeysBoxKeys.map(
(key) {
final crossSigningKey = userCrossSigningKeys[key];
if (crossSigningKey == null) return null;
return copyMap(crossSigningKey);
},
);
res[userId] = DeviceKeysList.fromDbJson(
{
'client_id': client.id,
'user_id': userId,
'outdated': deviceKeysOutdated[userId],
},
childEntries
.where((c) => c != null)
.toList()
.cast<Map<String, dynamic>>(),
crossSigningEntries
.where((c) => c != null)
.toList()
.cast<Map<String, dynamic>>(),
client);
}
return res;
});