getUserDeviceKeys method

  1. @override
Future<Map<String, DeviceKeysList>> getUserDeviceKeys(
  1. Client client
)
override

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;
    });