added notification in color cyan for the event by adding a flag and using it in EventData

This commit is contained in:
vishalxl 2022-08-17 22:34:20 +05:30
parent dd5b80e2ab
commit ee35160fec
4 changed files with 28 additions and 16 deletions

View File

@ -87,7 +87,7 @@ Future<void> terminalMenuUi(Tree node, var contactList) async {
// at the very beginning, show the tree as it is the, and them show the options menu
node.printTree(0, true, DateTime.now().subtract(Duration(days:numLastDays)));
//gDebug = 1;
bool userContinue = true;
while(userContinue) {
// need a bit of wait to give other events to execute, so do a delay, which allows
@ -96,7 +96,7 @@ Future<void> terminalMenuUi(Tree node, var contactList) async {
Future.delayed(const Duration(milliseconds: waitMilliSeconds), () {
node.insertEvents(getRecievedEvents());
node.printThreads(getRecievedEvents());
node.printNotifications(getRecievedEvents());
clearEvents();
});
@ -219,25 +219,22 @@ Future<void> main(List<String> arguments) async {
Future.delayed(const Duration(milliseconds: numWaitSeconds), () {
// count user events
getRecievedEvents().forEach((element) { element.eventData.kind == 1? numUserEvents++: numUserEvents;});
stdout.write(".. received ${getRecievedEvents().length} events made by the user\n");
stdout.write("...received ${getRecievedEvents().length} events made by the user\n");
// get user's feed ( from follows by looking at kind 3 event)
// get the latest kind 3 event for the user, which lists his 'follows' list
List<String> contactList = [];
int latestContactsTime = 0;
int latestContactIndex = -1;
int latestContactsTime = 0, latestContactIndex = -1;
for( int i = 0; i < getRecievedEvents().length; i++) {
var e = getRecievedEvents()[i];
if( e.eventData.kind == 3 && latestContactsTime < e.eventData.createdAt) {
latestContactIndex = i;
latestContactsTime = e.eventData.createdAt;
//print("${DateTime.now().millisecondsSinceEpoch ~/ 1000} latestContactsTime = $latestContactsTime");
}
}
// if contact list was found, get user's feed
if (latestContactIndex != -1) {
contactList = getContactFeed(getRecievedEvents()[latestContactIndex].eventData.contactList, 300);
//print("number of contacts = ${contactList.length}");
}
stdout.write('waiting for feed to come in...............');

View File

@ -10,6 +10,9 @@ const int keyLenPrinted = 6;
const int max_depth_allowed = 7;
const int leftShiftDeepThreadsBy = 3;
const String commentColor = "\x1B[32m"; // green
const String notificationColor = "\x1b[36m"; // cyan
//String defaultServerUrl = 'wss://relay.damus.io';
String defaultServerUrl = 'wss://nostr-relay.untethr.me';
@ -78,6 +81,7 @@ class EventData {
List<String> eTagsRest;// rest of e tags
List<String> pTags;// list of p tags for kind:1
List<List<String>> tags;
bool isNotification; // whether its to be highlighted using highlight color
List<Contact> contactList = []; // used for kind:3 events, which is contact list event
@ -88,7 +92,7 @@ class EventData {
return "";
}
EventData(this.id, this.pubkey, this.createdAt, this.kind, this.content, this.eTagsRest, this.pTags, this.contactList, this.tags);
EventData(this.id, this.pubkey, this.createdAt, this.kind, this.content, this.eTagsRest, this.pTags, this.contactList, this.tags, {this.isNotification = false});
factory EventData.fromJson(dynamic json) {
List<Contact> contactList = [];
@ -184,7 +188,7 @@ class EventData {
void printEventData(int depth) {
int n = 3;
String maxN(String v) => v.length > n? v.substring(0,n) : v.substring(0, v.length);
void printGreen(String s) => stdout.supportsAnsiEscapes ?stdout.write("\x1B[32m$s\x1B[0m"):stdout.write(s);
void printGreen(String s, String commentColor) => stdout.supportsAnsiEscapes ?stdout.write("$commentColor$s\x1B[0m"):stdout.write(s);
DateTime dTime = DateTime.fromMillisecondsSinceEpoch(createdAt *1000);
@ -207,7 +211,12 @@ class EventData {
stdout.write("|Author : $name id: ${maxN(id)} Time: $strDate\n");
printDepth(depth);
stdout.write("|Message: ");
printGreen(contentShifted);
if( isNotification) {
printGreen(contentShifted, notificationColor);
isNotification = false;
} else {
printGreen(contentShifted, commentColor);
}
}
@override

View File

@ -183,21 +183,26 @@ class Relays {
Relays relays = Relays({}, [], []);
List<String> getContactFeed(List<Contact> contacts, numEventsToGet) {
// maps from relay url to list of users that it supplies events for
Map<String, List<String> > mContacts = {};
List<String> contactList = [];
// creat the mapping between relay and its hosted users
for( int i = 0; i < contacts.length; i++) {
if( mContacts.containsKey(contacts[i].relay) ) {
mContacts[contacts[i].relay]?.add(contacts[i].id);
} else {
mContacts[contacts[i].relay] = [contacts[i].id];
}
/*if( contacts[i].id == "32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245") {
print("In getContactFeed: sending request for jb55 32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245");
}*/
contactList.add(contacts[i].id);
}
// send request for the users events to the relays
mContacts.forEach((key, value) { relays.getMultiUserEvents(key, value, numEventsToGet);}) ;
// return contact list for use by caller
return contactList;
}

View File

@ -137,7 +137,7 @@ class Tree {
return t;
}
void printThreads(List<Event> events) {
void printNotifications(List<Event> events) {
// remove duplicate
Set temp = {};
@ -164,6 +164,7 @@ class Tree {
}
Tree ?t = allEvents[element.eventData.id];
if( t != null) {
t.e.eventData.isNotification = true;
Tree topTree = getTopTree(t);
topTree.printTree(0, false, 0);
print("\n");