requestRelays method
Implementation
Future<NostrRequest> requestRelays(Iterable<String> urls, Filter filter,
{int timeout = DEFAULT_STREAM_IDLE_TIMEOUT, bool closeOnEOSE = true, Function()? onTimeout}) async {
String id = Helpers.getRandomString(10);
NostrRequest nostrRequest = closeOnEOSE?
NostrRequest.query(id, eventVerifier: eventVerifier, timeout: timeout, onTimeout: (request) {
closeNostrRequest(request);
if (onTimeout!=null) {
onTimeout();
}
}) :
NostrRequest.subscription(id, eventVerifier: eventVerifier);
for (var url in urls) {
nostrRequest.addRequest(url, RelaySet.sliceFilterAuthors(filter));
}
nostrRequests[nostrRequest.id] = nostrRequest;
List<String> notSent = [];
Map<int?,int> kindsMap = {};
nostrRequests.forEach((key, request) {
int? kind;
if (request.requests.isNotEmpty && request.requests.values.first.filters.first.kinds!=null && request.requests.values.first.filters.first.kinds!.isNotEmpty) {
kind = request.requests.values.first.filters.first.kinds!.first;
}
int? count = kindsMap[kind];
count ??= 0;
count++;
kindsMap[kind] = count;
});
print(
"----------------NOSTR REQUESTS: ${nostrRequests.length} || $kindsMap");
for(MapEntry<String,RelayRequest> entry in nostrRequest.requests.entries) {
if (!doRequest(nostrRequest.id, entry.value)) {
notSent.add(entry.key);
}
}
for (var url in notSent) {
nostrRequest.requests.remove(url);
}
return nostrRequest;
}