From f0156c3baec4511473e3f61fff1b5b420a0fe85e Mon Sep 17 00:00:00 2001 From: vishalxl <> Date: Sun, 31 Jul 2022 23:29:47 +0530 Subject: [PATCH] received events for ptags/mentions. Then removed duplicate events received. --- bin/nostr_console.dart | 27 +++++++++++++++++++++------ lib/nostr_console.dart | 35 ++++++++++++++++++++++++----------- lib/relays.dart | 2 +- test/nostr_console_test.dart | 6 +++--- 4 files changed, 49 insertions(+), 21 deletions(-) diff --git a/bin/nostr_console.dart b/bin/nostr_console.dart index 17f208d..5943c85 100644 --- a/bin/nostr_console.dart +++ b/bin/nostr_console.dart @@ -22,16 +22,31 @@ Future main() async { print('waiting for feed to come in'); Future.delayed(const Duration(milliseconds: 4000), () { - events.sort(ascendingTime); events.removeWhere( (item) => item.eventData.kind != 1 ); print('====================all events ================='); - //printEvents(events); + List pTags = getpTags(events); + stdout.write("Total number of pTags = ${pTags.length}\n"); - Tree node = Tree.fromEvents(events); - node.printTree(0, true); - print('\nnumber of all events: ${events.length}'); - exit(0); + for(int i = 0; i < pTags.length; i++) { + getUserEvents( defaultServerUrl, pTags[i], events, 10); + } + + Future.delayed(const Duration(milliseconds: 4000), () { + + // 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); + }); }); }); } \ No newline at end of file diff --git a/lib/nostr_console.dart b/lib/nostr_console.dart index c23a724..17b52ab 100644 --- a/lib/nostr_console.dart +++ b/lib/nostr_console.dart @@ -34,20 +34,21 @@ class EventData { String content; String eTagParent; // direct parent tag List eTagsRest;// rest of e tags - + List pTags;// list of p tags for kind:1 - List contactList = []; + List contactList = []; // used for kind:3 events, which is contact list event - EventData(this.id, this.pubkey, this.createdAt, this.kind, this.content, this.eTagParent, this.eTagsRest, this.contactList); + EventData(this.id, this.pubkey, this.createdAt, this.kind, this.content, this.eTagParent, this.eTagsRest, this.pTags, this.contactList); factory EventData.fromJson(dynamic json) { List contactList = []; List eTagsRead = []; + List pTagsRead = []; String eTagParentRead = ""; var jsonTags = json['tags']; - stdout.write("In fromJson: jsonTags = $jsonTags"); + //stdout.write("In fromJson: jsonTags = $jsonTags"); var numTags = jsonTags.length; @@ -70,10 +71,14 @@ class EventData { if ( json['kind'] == 1) { for( int i = 0; i < numTags; i++) { var tag = jsonTags[i]; - stdout.write(tag); + //stdout.write(tag); //print(tag.runtimeType); if( tag[0] == "e") { eTagsRead.add(tag[1]); + } else { + if( tag[0] == "p") { + pTagsRead.add(tag[1]); + } } // TODO add other tags @@ -88,6 +93,7 @@ class EventData { json['content'] as String, eTagParentRead, eTagsRead, + pTagsRead, contactList); } @@ -139,7 +145,7 @@ class Event { if( json.length < 3) { String e = ""; e = json.length > 1? json[0]: ""; - return Event(e,"",EventData("non","", 0, 0, "", "", [], []), [relay]); + return Event(e,"",EventData("non","", 0, 0, "", "", [], [], []), [relay]); } return Event(json[0] as String, json[1] as String, EventData.fromJson(json[2]), [relay] ); } @@ -168,14 +174,14 @@ class Tree { for( int i = 0; i < events.length; i++) { Event e = events[i]; - stdout.write("processing event number $i : $e \n"); + //stdout.write("processing event number $i : $e \n"); if( e.eventData.eTagsRest.isNotEmpty) { // in case the event has a parent, add it to the list of non Top Events - stdout.write("Event has e tags: ${e.eventData.eTagsRest}\n"); + //stdout.write("Event has e tags: ${e.eventData.eTagsRest}\n"); nonTopEvents.add(e); } else { - stdout.write("Adding top child: $e\n"); + //stdout.write("Adding top child: $e\n"); Tree node; node = Tree(e, []); childTrees.add(node); @@ -260,10 +266,17 @@ class Tree { } } +List getpTags(List events) { + List pTags = []; + for(int i = 0; i < events.length; i++) { + pTags.addAll(events[i].eventData.pTags); + } + return pTags; +} int ascendingTime(Event a, Event b) { if(a.eventData.createdAt < b.eventData.createdAt) { - print( 'ascendingTime : comparing two ${a.eventData.createdAt} and ${b.eventData.createdAt}'); + //print( 'ascendingTime : comparing two ${a.eventData.createdAt} and ${b.eventData.createdAt}'); return 0; } return 1; @@ -271,7 +284,7 @@ int ascendingTime(Event a, Event b) { int ascendingTimeTree(Tree a, Tree b) { if(a.e.eventData.createdAt < b.e.eventData.createdAt) { - print( 'ascendingTimeTree : comparing two ${a.e.eventData.createdAt} and ${b.e.eventData.createdAt}'); + //print( 'ascendingTimeTree : comparing two ${a.e.eventData.createdAt} and ${b.e.eventData.createdAt}'); return 0; } return 1; diff --git a/lib/relays.dart b/lib/relays.dart index a945c37..4bba3d8 100644 --- a/lib/relays.dart +++ b/lib/relays.dart @@ -49,7 +49,7 @@ class Relays { fws.then((WebSocket ws) { ws.listen( (d) { - print(d); + //print(d); Event e; try { e = Event.fromJson(jsonDecode(d), relay); diff --git a/test/nostr_console_test.dart b/test/nostr_console_test.dart index 85a1c4f..8921f81 100644 --- a/test/nostr_console_test.dart +++ b/test/nostr_console_test.dart @@ -2,8 +2,8 @@ import 'package:nostr_console/nostr_console.dart'; import 'package:test/test.dart'; -EventData exampleEdata = EventData("id", "pubkey", 1111111, 1, "content", "", [], []); -EventData exampleEdataChild = EventData("id", "pubkey", 1111111, 1, "content child", "", [], []); +EventData exampleEdata = EventData("id", "pubkey", 1111111, 1, "content", "", [], [], []); +EventData exampleEdataChild = EventData("id", "pubkey", 1111111, 1, "content child", "", [], [], []); Event exampleEvent = Event('event', 'id', exampleEdata, ['relay name']); Event exampleEventChild = Event('event', 'id', exampleEdataChild, ['relay name']); @@ -15,7 +15,7 @@ Tree exampleNodeChild = Tree(exampleEventChild, []); void main() { test('PrintEmptyEvent', () { - expect(EventData("non","",1,1,"", "", [], []).toString(), ""); + expect(EventData("non","",1,1,"", "", [], [], []).toString(), ""); }); test('printEventNode', () {