added tags in Event for e/parent, and logic to add event child to its parent tree, so the display is showing tree in some cases. Not complete.

This commit is contained in:
vishalxl 2022-07-31 16:58:14 +05:30
parent f42c186363
commit 8bb9e66efe
3 changed files with 93 additions and 38 deletions

View File

@ -29,14 +29,14 @@ Future<void> main() async {
print('waiting for feed to come in');
Future.delayed(const Duration(milliseconds: 4000), () {
//events.sort(ascendingTime);
events.sort(ascendingTime);
events.removeWhere( (item) => item.eventData.kind != 1 );
print('====================all events =================');
//printEvents(events);
Tree node = Tree.fromEvents(events);
node.printEventNode(0);
node.printTree(0, true);
print('\nnumber of all events: ${events.length}');

View File

@ -2,7 +2,7 @@
import 'dart:io';
const bool enableVerticalLines = false;
const int spacesPerDepth = 7;
const int spacesPerDepth = 8;
int keyLenPrinted = 6;
String defaultServerUrl = 'wss://nostr.onsats.org';
@ -35,19 +35,22 @@ class EventData {
int createdAt;
int kind;
String content;
Map<String, String> tags;
String eTagParent; // direct parent tag
List<String> eTagsRest;// rest of e tags
List<Contact> contactList = [];
EventData(this.id, this.pubkey, this.createdAt, this.kind, this.content, this.tags, this.contactList);
EventData(this.id, this.pubkey, this.createdAt, this.kind, this.content, this.eTagParent, this.eTagsRest, this.contactList);
factory EventData.fromJson(dynamic json) {
List<Contact> contactList = [];
Map<String, String> t = {};
List<String> eTagsRead = [];
String eTagParentRead = "";
var jsonTags = json['tags'];
//print(jsonTags);
stdout.write("In fromJson: jsonTags = $jsonTags");
var numTags = jsonTags.length;
@ -70,12 +73,10 @@ class EventData {
if ( json['kind'] == 1) {
for( int i = 0; i < numTags; i++) {
var tag = jsonTags[i];
var n = tag.length;
//print(tag);
stdout.write(tag);
//print(tag.runtimeType);
if( tag[0] == "e") {
t["e"] = tag[1];
break;
eTagsRead.add(tag[1]);
}
// TODO add other tags
@ -88,7 +89,8 @@ class EventData {
json['created_at'] as int,
json['kind'] as int,
json['content'] as String,
t,
eTagParentRead,
eTagsRead,
contactList);
}
@ -101,14 +103,16 @@ class EventData {
printDepth(depth);
stdout.write("-------+\n");
stdout.write("+-------+-------------\n");
printDepth(depth);
stdout.write("Author : ${max3(pubkey)}\n");
stdout.write("|Message: $content\n");
printDepth(depth);
stdout.write("Message: $content\n\n");
stdout.write("|Author : ${max3(pubkey)}\n");
printDepth(depth);
stdout.write("id : ${max3(id)} Time: $dTime Kind: $kind");
stdout.write("|");
printDepth(depth);
stdout.write("|id : ${max3(id)} Time: $dTime");
//stdout.write("\n$eTagsRest\n");
}
@override
@ -122,7 +126,7 @@ class EventData {
if( createdAt == 0) {
print("createdAt == 0 for event $content");
}
return '\n-------+\nAuthor : ${max3(pubkey)}\nMessage: $content\n\nid : ${max3(id)} Time: $dTime Kind: $kind';
return '\n-------+-------------\nAuthor : ${max3(pubkey)}\nMessage: $content\n\nid : ${max3(id)} Time: $dTime Kind: $kind';
}
}
@ -139,7 +143,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] );
@ -171,15 +175,18 @@ class Tree {
Tree(this.e, this.children);
factory Tree.fromEvents(List<Event> events) {
Event e = events[0];
stdout.write("in factory fromEvents list. number of events: ${events.length}\n");
List<Tree> childTrees = [];
List<Event> nonTopEvents = [];
for( int i = 0; i < events.length; i++) {
Event e = events[i];
if( e.eventData.tags.isNotEmpty) {
stdout.write("${e.eventData.tags}\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");
nonTopEvents.add(e);
}
else {
@ -190,11 +197,35 @@ class Tree {
}
}
// add each of nonTopEvents to their parent tree ( if parent is found in tree)
for(int i = 0; i < nonTopEvents.length; i++) {
Event e = nonTopEvents[i];
insertEvent( childTrees, e);
// String parentId = e.eventData.tags
}
stdout.write("Ending: factory fromEvents list. number of events: ${events.length}\n");
return Tree( events[0], childTrees); // TODO remove events[0]
}
return Tree( e, childTrees);
// @function insertEvent will insert the event e into the given list of trees if its
// parent is in that list of trees
static void insertEvent( List<Tree> trees, Event e) {
for( int i = 0; i < trees.length; i++) {
Tree tree = trees[i];
//stdout.write("In isertEvent: processing event $e \n");
String parent = e.eventData.eTagParent;
if( parent == "") {
parent = e.eventData.eTagsRest[0];
}
if( tree.e.eventData.id == parent) {
//stdout.write("In isertEvent: found parent for event $e \n");
tree.addChild(e);
}
}
return;
}
void addChild(Event child) {
@ -208,24 +239,27 @@ class Tree {
}
void printEventNode(int depth) {
e.printEvent(depth);
void printTree(int depth, bool onlyPrintChildren) {
if( !onlyPrintChildren) {
e.printEvent(depth);
} else {
depth = depth - 1;
}
for( int i = 0; i < children.length; i++) {
stdout.write("\n");
printDepth(depth+1);
stdout.write("|\n");
children[i].printEventNode(depth+1);
if(!onlyPrintChildren) {
stdout.write("|\n");
} else {
stdout.write("\n\n\n");
}
children[i].printTree(depth+1, false);
}
}
void insertEvent(Event event) {
}
}
@ -239,6 +273,27 @@ void printEvents(List<Event> events) {
}
/* reply/root example for e tag
{
"id": "4019debf44a087b973b7d8776e7ce74ee84a15e9c3dbed0b60dfdec23d170911",
"pubkey": "2ef93f01cd2493e04235a6b87b10d3c4a74e2a7eb7c3caf168268f6af73314b5",
"created_at": 1659210144,
"kind": 1,
"tags": [
[
"e",
"0ddebf828647920417deb00cc9de70a83db5b5c414466f684a5cbe7f02723243",
"",
"root"
],
[
"e",
"f68f0299f3a3204638337e6f7edf1a6653066a8d8a2bc74c4ab6ebe92a9c4130",
"",
"reply"
],
*/
/*
NIP 02

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', () {
@ -31,7 +31,7 @@ void main() {
node.addChildNode(childNode);
print("node");
node.printEventNode(0);
node.printTree(0, false);
});
}