doNostrRequestWithRelaySet method

Future<void> doNostrRequestWithRelaySet(
  1. RequestState state, {
  2. bool splitRequestsByPubKeyMappings = true,
})

Implementation

Future<void> doNostrRequestWithRelaySet(RequestState state,
    {bool splitRequestsByPubKeyMappings = true}) async {
  if (state.unresolvedFilters.isEmpty || state.request.relaySet == null) {
    return;
  }
  // TODO support more than 1 filter
  RelaySet relaySet = state.request.relaySet!;
  Filter filter = state.unresolvedFilters.first;
  if (splitRequestsByPubKeyMappings) {
    relaySet.splitIntoRequests(filter, state);
    print(
        "request for ${filter.authors != null ? filter.authors!.length : 0} authors with kinds: ${filter.kinds} made requests to ${state.requests.length} relays");

    if (state.requests.isEmpty && relaySet.fallbackToBootstrapRelays) {
      print(
          "making fallback requests to ${_relayManager.bootstrapRelays.length} bootstrap relays for ${filter.authors != null ? filter.authors!.length : 0} authors with kinds: ${filter.kinds}");
      for (var url in _relayManager.bootstrapRelays) {
        state.addRequest(url, RelaySet.sliceFilterAuthors(filter));
      }
    }
  } else {
    for (var url in relaySet.urls) {
      state.addRequest(url, RelaySet.sliceFilterAuthors(filter));
    }
  }
  _globalState.inFlightRequests[state.id] = state;
  for (MapEntry<String, RelayRequestState> entry in state.requests.entries) {
    doRelayRequest(state.id, entry.value);
  }
}