mirror of
https://github.com/vishalxl/nostr_console.git
synced 2025-05-04 09:20: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 'dart:io';
|
||||||
import 'package:nostr_console/nostr_console_ds.dart';
|
import 'package:nostr_console/nostr_console_ds.dart';
|
||||||
import 'package:nostr_console/relays.dart';
|
import 'package:nostr_console/relays.dart';
|
||||||
|
import 'package:args/args.dart';
|
||||||
|
|
||||||
|
|
||||||
var userPublickey = "3235036bd0957dfb27ccda02d452d7c763be40c91a1ac082ba6983b25238388c"; // vishalxl
|
var userPublickey = "3235036bd0957dfb27ccda02d452d7c763be40c91a1ac082ba6983b25238388c"; // vishalxl
|
||||||
// var userPublickey = "32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245"; // jb55
|
// var userPublickey = "32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245"; // jb55
|
||||||
// var userPublickey = "3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d"; // fiatjaf
|
// 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 = [];
|
List<Event> events = [];
|
||||||
int numEvents = 6;
|
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);
|
getUserEvents(defaultServerUrl, userPublickey, events, numEvents);
|
||||||
|
|
||||||
print('waiting for user events to come in');
|
print('waiting for user events to come in');
|
||||||
@ -37,18 +77,7 @@ Future<void> main() async {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future.delayed(const Duration(milliseconds: 4000), () {
|
Future.delayed(const Duration(milliseconds: 4000), () {
|
||||||
events.removeWhere( (item) => item.eventData.kind != 1 );
|
printEventsAsTree(events);
|
||||||
// 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}');
|
|
||||||
exit(0);
|
exit(0);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -217,7 +217,6 @@ class Tree {
|
|||||||
|
|
||||||
// @method create top level Tree from events.
|
// @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.
|
// 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) {
|
factory Tree.fromEvents(List<Event> events) {
|
||||||
stdout.write("in factory fromEvents list. number of events: ${events.length}\n");
|
stdout.write("in factory fromEvents list. number of events: ${events.length}\n");
|
||||||
|
|
||||||
@ -230,7 +229,15 @@ class Tree {
|
|||||||
List<String> processed = [];
|
List<String> processed = [];
|
||||||
|
|
||||||
m.forEach((key, value) {
|
m.forEach((key, value) {
|
||||||
if( !processed.contains(key)) {
|
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 ) {
|
if( !value.e.eventData.eTagsRest.isNotEmpty ) {
|
||||||
// in case this node is a parent, then move it to processed()
|
// in case this node is a parent, then move it to processed()
|
||||||
processed.add(key);
|
processed.add(key);
|
||||||
@ -240,19 +247,21 @@ class Tree {
|
|||||||
String id = key;
|
String id = key;
|
||||||
String parentId = value.e.eventData.getParent();
|
String parentId = value.e.eventData.getParent();
|
||||||
m[parentId]?.addChildNode(value);
|
m[parentId]?.addChildNode(value);
|
||||||
|
processed.add(key);
|
||||||
}
|
}
|
||||||
} else { // entry already exists
|
} else { // entry already exists
|
||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// add parent trees as top level child trees of this tree
|
||||||
for( var value in m.values) {
|
for( var value in m.values) {
|
||||||
if( !value.e.eventData.eTagsRest.isNotEmpty) { // if its a parent
|
if( !value.e.eventData.eTagsRest.isNotEmpty) { // if its a parent
|
||||||
childTrees.add(value);
|
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]
|
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
|
* @connect Connect to given relay and get all events for the given publicKey and insert the
|
||||||
* received events in the given List<Event>
|
* 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
|
// following is too restrictive. TODO improve it
|
||||||
for(int i = 0; i < users.length; i++) {
|
for(int i = 0; i < users.length; i++) {
|
||||||
@ -43,6 +43,12 @@ class Relays {
|
|||||||
return;
|
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;
|
Future<WebSocket>? fws;
|
||||||
if(relays.containsKey(relay)) {
|
if(relays.containsKey(relay)) {
|
||||||
@ -84,9 +90,9 @@ class Relays {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
users.add(publicKey);
|
|
||||||
print('sending request ${getSubscriptionRequest(publicKey, numEventsToGet)} to $relay');
|
print('sending request: $request to $relay');
|
||||||
fws?.then((WebSocket ws) { ws.add(getSubscriptionRequest(publicKey, numEventsToGet)); });
|
fws?.then((WebSocket ws) { ws.add(request); });
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,10 +107,14 @@ Relays relays = Relays(Map(), []);
|
|||||||
void getFeed(List<Contact> contacts, events, numEventsToGet) {
|
void getFeed(List<Contact> contacts, events, numEventsToGet) {
|
||||||
for( int i = 0; i < contacts.length; i++) {
|
for( int i = 0; i < contacts.length; i++) {
|
||||||
var contact = contacts[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) {
|
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:
|
dev_dependencies:
|
||||||
lints: ^2.0.0
|
lints: ^2.0.0
|
||||||
test: ^1.16.0
|
test: ^1.16.0
|
||||||
|
dependencies:
|
||||||
|
args: ^2.3.1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user