loadRelayDeliveryTargets method

  1. @override
Future<List<RelayDeliveryTarget>> loadRelayDeliveryTargets({
  1. String? eventId,
  2. String? relayUrl,
  3. RelayDeliveryState? state,
  4. bool excludeAcked = false,
  5. int? limit,
})
override

Implementation

@override
Future<List<RelayDeliveryTarget>> loadRelayDeliveryTargets({
  String? eventId,
  String? relayUrl,
  RelayDeliveryState? state,
  bool excludeAcked = false,
  int? limit,
}) async {
  await dbRdy;
  final targets = _loadKeyValuesByPrefix(_relayDeliveryTargetKeyPrefix)
      .map(
        (entry) => RelayDeliveryTarget.fromJson(
          jsonDecode(entry.value!) as Map<String, dynamic>,
        ),
      )
      .toList();
  _relayDeliveryTargets
    ..clear()
    ..addEntries(targets.map((target) => MapEntry(target.key, target)));

  var filtered =
      targets.where((target) {
        if (eventId != null && target.eventId != eventId) {
          return false;
        }
        if (relayUrl != null && target.relayUrl != relayUrl) {
          return false;
        }
        if (state != null && target.state != state) {
          return false;
        }
        if (excludeAcked && target.state == RelayDeliveryState.acked) {
          return false;
        }
        return true;
      }).toList()..sort((a, b) {
        final retryA = a.nextRetryAt ?? 0;
        final retryB = b.nextRetryAt ?? 0;
        if (retryA != retryB) {
          return retryA.compareTo(retryB);
        }
        return a.key.compareTo(b.key);
      });

  if (limit != null && limit < filtered.length) {
    filtered = filtered.take(limit).toList();
  }

  return filtered;
}