mirror of
https://github.com/vishalxl/nostr_console.git
synced 2025-05-03 00:40:27 +02:00
added argument parsing, now a request string can be sent to a relay, and its results printed as tree
This commit is contained in:
parent
701e357d87
commit
d36b6b51c7
@ -1,16 +1,56 @@
|
||||
import 'dart:io';
|
||||
import 'package:nostr_console/nostr_console_ds.dart';
|
||||
import 'package:nostr_console/relays.dart';
|
||||
import 'package:args/args.dart';
|
||||
|
||||
|
||||
var userPublickey = "3235036bd0957dfb27ccda02d452d7c763be40c91a1ac082ba6983b25238388c"; // vishalxl
|
||||
// var userPublickey = "32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245"; // jb55
|
||||
// var userPublickey = "3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d"; // fiatjaf
|
||||
|
||||
const request = "request";
|
||||
|
||||
void printEventsAsTree(events) {
|
||||
if( events.length == 0) {
|
||||
stdout.write("events length = 0\n");
|
||||
return;
|
||||
}
|
||||
events.removeWhere( (item) => item.eventData.kind != 1 );
|
||||
// remove duplicate events
|
||||
final ids = Set();
|
||||
events.retainWhere((x) => ids.add(x.eventData.id));
|
||||
|
||||
Future<void> main() async {
|
||||
// create tree from events
|
||||
Tree node = Tree.fromEvents(events);
|
||||
|
||||
// print all the events in tree form
|
||||
node.printTree(0, true);
|
||||
|
||||
print('\nnumber of all events: ${events.length}');
|
||||
|
||||
}
|
||||
|
||||
Future<void> main(List<String> arguments) async {
|
||||
List<Event> events = [];
|
||||
int numEvents = 6;
|
||||
|
||||
String requestString = "";
|
||||
//final parser = ArgParser()..addFlag(request, negatable: false, abbr: 'r')..addOption(request);
|
||||
final parser = ArgParser()..addOption(request, abbr: 'r');
|
||||
|
||||
ArgResults argResults = parser.parse(arguments);
|
||||
|
||||
|
||||
if( argResults[request] != null) {
|
||||
stdout.write("got argument request ${argResults[request]}");
|
||||
sendRequest("wss://nostr-pub.wellorder.net", argResults[request], events);
|
||||
Future.delayed(const Duration(milliseconds: 6000), () {
|
||||
printEventsAsTree(events);
|
||||
exit(0);
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
getUserEvents(defaultServerUrl, userPublickey, events, numEvents);
|
||||
|
||||
print('waiting for user events to come in');
|
||||
@ -37,18 +77,7 @@ Future<void> main() async {
|
||||
}
|
||||
|
||||
Future.delayed(const Duration(milliseconds: 4000), () {
|
||||
events.removeWhere( (item) => item.eventData.kind != 1 );
|
||||
// remove duplicate events
|
||||
final ids = Set();
|
||||
events.retainWhere((x) => ids.add(x.eventData.id));
|
||||
|
||||
// create tree from events
|
||||
Tree node = Tree.fromEvents(events);
|
||||
|
||||
// print all the events in tree form
|
||||
node.printTree(0, true);
|
||||
|
||||
print('\nnumber of all events: ${events.length}');
|
||||
printEventsAsTree(events);
|
||||
exit(0);
|
||||
});
|
||||
});
|
||||
|
@ -217,7 +217,6 @@ class Tree {
|
||||
|
||||
// @method create top level Tree from events.
|
||||
// first create a map. then add all top trees to the final list/ChildTrees. then add children to it.
|
||||
|
||||
factory Tree.fromEvents(List<Event> events) {
|
||||
stdout.write("in factory fromEvents list. number of events: ${events.length}\n");
|
||||
|
||||
@ -229,8 +228,16 @@ class Tree {
|
||||
//stdout.write(m);
|
||||
List<String> processed = [];
|
||||
|
||||
m.forEach((key, value) {
|
||||
if( !processed.contains(key)) {
|
||||
m.forEach((key, value) {
|
||||
bool alreadyProcessed = false;
|
||||
for( int i = 0; i < processed.length; i++) {
|
||||
if( processed[i] == key) {
|
||||
alreadyProcessed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if( !alreadyProcessed) {
|
||||
if( !value.e.eventData.eTagsRest.isNotEmpty ) {
|
||||
// in case this node is a parent, then move it to processed()
|
||||
processed.add(key);
|
||||
@ -240,19 +247,21 @@ class Tree {
|
||||
String id = key;
|
||||
String parentId = value.e.eventData.getParent();
|
||||
m[parentId]?.addChildNode(value);
|
||||
processed.add(key);
|
||||
}
|
||||
} else { // entry already exists
|
||||
// do nothing
|
||||
}
|
||||
});
|
||||
|
||||
// add parent trees as top level child trees of this tree
|
||||
for( var value in m.values) {
|
||||
if( !value.e.eventData.eTagsRest.isNotEmpty) { // if its a parent
|
||||
childTrees.add(value);
|
||||
}
|
||||
}
|
||||
|
||||
stdout.write("Ending: factory fromEvents list. number of events: ${events.length}\n");
|
||||
stdout.write("Ending: factory fromEvents list. number of processed events: ${processed.length}\n");
|
||||
return Tree( events[0], childTrees); // TODO remove events[0]
|
||||
}
|
||||
|
||||
|
@ -35,7 +35,7 @@ class Relays {
|
||||
* @connect Connect to given relay and get all events for the given publicKey and insert the
|
||||
* received events in the given List<Event>
|
||||
*/
|
||||
void connect(String relay, String publicKey, List<Event> events, int numEventsToGet) {
|
||||
void gerUserEvents(String relay, String publicKey, List<Event> events, int numEventsToGet) {
|
||||
|
||||
// following is too restrictive. TODO improve it
|
||||
for(int i = 0; i < users.length; i++) {
|
||||
@ -43,6 +43,12 @@ class Relays {
|
||||
return;
|
||||
}
|
||||
}
|
||||
users.add(publicKey);
|
||||
String request = getSubscriptionRequest(publicKey, numEventsToGet);
|
||||
sendRequest(relay, request, events);
|
||||
}
|
||||
|
||||
void sendRequest(String relay, String request, List<Event> events) {
|
||||
|
||||
Future<WebSocket>? fws;
|
||||
if(relays.containsKey(relay)) {
|
||||
@ -84,9 +90,9 @@ class Relays {
|
||||
}
|
||||
}
|
||||
|
||||
users.add(publicKey);
|
||||
print('sending request ${getSubscriptionRequest(publicKey, numEventsToGet)} to $relay');
|
||||
fws?.then((WebSocket ws) { ws.add(getSubscriptionRequest(publicKey, numEventsToGet)); });
|
||||
|
||||
print('sending request: $request to $relay');
|
||||
fws?.then((WebSocket ws) { ws.add(request); });
|
||||
|
||||
}
|
||||
|
||||
@ -101,10 +107,14 @@ Relays relays = Relays(Map(), []);
|
||||
void getFeed(List<Contact> contacts, events, numEventsToGet) {
|
||||
for( int i = 0; i < contacts.length; i++) {
|
||||
var contact = contacts[i];
|
||||
relays.connect(contact.relay, contact.id, events, numEventsToGet);
|
||||
relays.gerUserEvents(contact.relay, contact.id, events, numEventsToGet);
|
||||
}
|
||||
}
|
||||
|
||||
void getUserEvents(serverUrl, publicKey, events, numUserEvents) {
|
||||
relays.connect(serverUrl, publicKey, events, numUserEvents);
|
||||
relays.gerUserEvents(serverUrl, publicKey, events, numUserEvents);
|
||||
}
|
||||
|
||||
void sendRequest(serverUrl, request, events) {
|
||||
relays.sendRequest(serverUrl, request, events);
|
||||
}
|
@ -12,3 +12,5 @@ environment:
|
||||
dev_dependencies:
|
||||
lints: ^2.0.0
|
||||
test: ^1.16.0
|
||||
dependencies:
|
||||
args: ^2.3.1
|
||||
|
Loading…
x
Reference in New Issue
Block a user