received events for ptags/mentions. Then removed duplicate events received.

This commit is contained in:
vishalxl 2022-07-31 23:29:47 +05:30
parent f19135bfa2
commit f0156c3bae
4 changed files with 49 additions and 21 deletions

View File

@ -22,16 +22,31 @@ Future<void> 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<String> 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);
});
});
});
}

View File

@ -34,20 +34,21 @@ class EventData {
String content;
String eTagParent; // direct parent tag
List<String> eTagsRest;// rest of e tags
List<String> pTags;// list of p tags for kind:1
List<Contact> contactList = [];
List<Contact> 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<Contact> contactList = [];
List<String> eTagsRead = [];
List<String> 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<String> getpTags(List<Event> events) {
List<String> 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;

View File

@ -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);

View File

@ -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', () {