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