processed kind 0 events to populate a global name map, which is used to print user names. formatting changes too.

This commit is contained in:
vishalxl 2022-08-08 14:05:25 +05:30
parent 151d226caf
commit c20f24cf76
2 changed files with 103 additions and 59 deletions

View File

@ -10,77 +10,83 @@ var userPublickey = "3235036bd0957dfb27ccda02d452d7c763be40c91a1ac082ba6983b2
const request = "request";
void printEventsAsTree(events) {
if( events.length == 0) {
print("events length = 0");
return;
}
events.removeWhere( (item) => item.eventData.kind != 1 );
// remove duplicate events
final ids = Set();
events.retainWhere((x) => ids.add(x.eventData.id));
events.forEach( (x) => getNames(x));
// create tree from events
Tree node = Tree.fromEvents(events);
if( events.length == 0) {
print("events length = 0");
return;
}
events.removeWhere( (item) => item.eventData.kind != 1 );
// remove duplicate events
final ids = Set();
events.retainWhere((x) => ids.add(x.eventData.id));
// print all the events in tree form
node.printTree(0, true);
// create tree from events
Tree node = Tree.fromEvents(events);
print('\nnumber of all events: ${events.length}');
// print all the events in tree form
node.printTree(0, true);
print('\nnumber of all events: ${events.length}');
print("number or names kind 0: ${gKindONames.length}");
//print(gKindONames);
}
Future<void> main(List<String> arguments) async {
List<Event> events = [];
int numEvents = 6;
List<Event> events = [];
int numEvents = 6;
final parser = ArgParser()..addOption(request, abbr: 'r');
ArgResults argResults = parser.parse(arguments);
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;
}
// the default in case no arguments are given is:
// get a user's events, then from its type 3 event, gets events of its follows,
// then get the events of user-id's mentioned in p-tags of received events
// then display them all
getUserEvents(defaultServerUrl, userPublickey, events, numEvents);
print('waiting for user events to come in');
Future.delayed(const Duration(milliseconds: 2000), () {
for( int i = 0; i < events.length; i++) {
var e = events[i];
if( e.eventData.kind == 3) {
print('calling getfeed');
getFeed(e.eventData.contactList, events, 20);
}
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;
}
print('waiting for feed to come in');
Future.delayed(const Duration(milliseconds: 4000), () {
print('====================all events =================');
List<String> pTags = getpTags(events);
print("Total number of pTags = ${pTags.length}\n");
for(int i = 0; i < pTags.length; i++) {
getUserEvents( defaultServerUrl, pTags[i], events, 10);
// the default in case no arguments are given is:
// get a user's events, then from its type 3 event, gets events of its follows,
// then get the events of user-id's mentioned in p-tags of received events
// then display them all
getUserEvents(defaultServerUrl, userPublickey, events, numEvents);
print('waiting for user events to come in');
Future.delayed(const Duration(milliseconds: 2000), () {
for( int i = 0; i < events.length; i++) {
var e = events[i];
if( e.eventData.kind == 3) {
print('calling getfeed');
getFeed(e.eventData.contactList, events, 20);
}
}
print('waiting for feed to come in');
Future.delayed(const Duration(milliseconds: 4000), () {
printEventsAsTree(events);
exit(0);
print('====================all events =================');
List<String> pTags = getpTags(events);
print("Total number of pTags = ${pTags.length}\n");
for(int i = 0; i < pTags.length; i++) {
getUserEvents( defaultServerUrl, pTags[i], events, 10);
}
Future.delayed(const Duration(milliseconds: 4000), () {
printEventsAsTree(events);
exit(0);
});
});
});
});
}

View File

@ -9,6 +9,30 @@ const int spacesPerDepth = 8;
int keyLenPrinted = 6;
String defaultServerUrl = 'wss://nostr.onsats.org';
Map<String, String> gKindONames = {};
void getNames(Event e) {
print("In getNames: for event content: ${e.eventData.content}");
//e.printEvent(0);
if( e.eventData.kind == 0) {
String name = "";
String content = e.eventData.content;
if( content.isEmpty) {
return;
}
dynamic json = jsonDecode(content);
gKindONames[e.eventData.pubkey] = json["name"];
}
}
String getAuthorName(String pubkey) {
String max3(String v) => v.length > 3? v.substring(0,3) : v.substring(0, v.length);
String name = max3(pubkey);
name = gKindONames[pubkey]??name;
return name;
}
void printDepth(int d) {
if( d == 0) {
return;
@ -148,15 +172,16 @@ class EventData {
print("debug: createdAt == 0 for event $content");
}
content = rightShiftContent(content, spacesPerDepth * depth + 10);
String contentShifted = rightShiftContent(content, spacesPerDepth * depth + 10);
void printGreen(String s) => stdout.write("\x1B[32m$s\x1B[0m");
printDepth(depth);
stdout.write("+-------+-------------\n");
printDepth(depth);
stdout.write("|Message: ");
printGreen("$content\n");
printGreen("$contentShifted\n");
printDepth(depth);
stdout.write("|Author : ${max3(pubkey)}\n");
String name = getAuthorName(pubkey);
stdout.write("|Author : $name\n");
printDepth(depth);
stdout.write("|\n");
printDepth(depth);
@ -330,7 +355,20 @@ void printEvents(List<Event> events) {
}
}
/* reply/root example for e tag
/*
kind 0 event
{
"id": "63de3e2fe397fedef9d8f1937e8c7f73727bd6410d2e7578eb348d4ee059feaf",
"pubkey": "004db7605cfeba09b15625deb77c9369029f370591d68231b7c4dfd43f8f6f4f",
"created_at": 1659944329,
"kind": 0,
"tags": [],
"content": "{\"name\":\"IrredeemablePussy@minds.com\",\"about\":\"\",\"picture\":\"https://www.minds.com/icon/742483671239368719/medium/1502397901/1659944329/1659944329\"}",
"sig": "c500f7f8e27c3d1a41ed196931f66253cdd42dbb1e53b15fd1916da5c261b4d0e06d0008b39016775b3be56e6397c8d747d98174106f04c5874650fbe9d930b0"
}
reply/root example for e tag
{
"id": "4019debf44a087b973b7d8776e7ce74ee84a15e9c3dbed0b60dfdec23d170911",
"pubkey": "2ef93f01cd2493e04235a6b87b10d3c4a74e2a7eb7c3caf168268f6af73314b5",