doNostrRequest method
Future<NostrRequest>
doNostrRequest(
- NostrRequest nostrRequest,
- Filter filter,
- RelaySet relaySet, {
- bool splitRequestsByPubKeyMappings = true,
Implementation
Future<NostrRequest> doNostrRequest(NostrRequest nostrRequest, Filter filter,
RelaySet relaySet,
{bool splitRequestsByPubKeyMappings=true}) async {
if (splitRequestsByPubKeyMappings) {
relaySet.splitIntoRequests(filter,nostrRequest);
print(
"request for ${filter.authors != null
? filter.authors!.length
: 0} authors with kinds: ${filter
.kinds} made requests to ${nostrRequest.requests
.length} relays");
if (nostrRequest.requests.isEmpty && relaySet.fallbackToBootstrapRelays) {
print(
"making fallback requests to ${bootstrapRelays
.length} bootstrap relays for ${filter.authors != null ? filter
.authors!.length : 0} authors with kinds: ${filter.kinds}");
for (var url in bootstrapRelays) {
nostrRequest.addRequest(url, RelaySet.sliceFilterAuthors(filter));
}
}
} else {
for (var url in relaySet.urls) {
nostrRequest.addRequest(url, RelaySet.sliceFilterAuthors(filter));
}
}
nostrRequests[nostrRequest.id] = nostrRequest;
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) {
doRequest(nostrRequest.id, entry.value);
}
return nostrRequest;
}