mirror of
https://github.com/vishalxl/nostr_console.git
synced 2025-08-03 20:42:15 +02:00
fetched 14x only after receiving an invite
This commit is contained in:
@@ -27,12 +27,6 @@ const String colorArg = "color";
|
|||||||
const String overWriteFlag = "overwrite";
|
const String overWriteFlag = "overwrite";
|
||||||
|
|
||||||
Future<void> main(List<String> arguments) async {
|
Future<void> main(List<String> arguments) async {
|
||||||
Logger.root.level = Level.ALL; // defaults to Level.INFO
|
|
||||||
DateTime appStartTime = DateTime.now();
|
|
||||||
print("app start time: $appStartTime");
|
|
||||||
Logger.root.onRecord.listen((record) {
|
|
||||||
print('${record.level.name}: ${record.time.difference(appStartTime)}: ${record.message}');
|
|
||||||
});
|
|
||||||
|
|
||||||
final parser = ArgParser()..addOption(requestArg, abbr: 'q') ..addOption(pubkeyArg, abbr:"p")..addOption(prikeyArg, abbr:"k")
|
final parser = ArgParser()..addOption(requestArg, abbr: 'q') ..addOption(pubkeyArg, abbr:"p")..addOption(prikeyArg, abbr:"k")
|
||||||
..addOption(lastdaysArg, abbr:"d") ..addOption(relayArg, abbr:"r")
|
..addOption(lastdaysArg, abbr:"d") ..addOption(relayArg, abbr:"r")
|
||||||
@@ -58,6 +52,13 @@ Future<void> main(List<String> arguments) async {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Logger.root.level = Level.ALL; // defaults to Level.INFO
|
||||||
|
DateTime appStartTime = DateTime.now();
|
||||||
|
print("app start time: $appStartTime");
|
||||||
|
Logger.root.onRecord.listen((record) {
|
||||||
|
print('${record.level.name}: ${record.time.difference(appStartTime)}: ${record.message}');
|
||||||
|
});
|
||||||
|
|
||||||
// start application
|
// start application
|
||||||
printIntro("Nostr");
|
printIntro("Nostr");
|
||||||
|
|
||||||
@@ -291,7 +292,7 @@ Future<void> main(List<String> arguments) async {
|
|||||||
// get event for user
|
// get event for user
|
||||||
if( userPublicKey!= "") {
|
if( userPublicKey!= "") {
|
||||||
getUserEvents(gListRelayUrls1, userPublicKey, limitPerSubscription, getSecondsDaysAgo(limitSelfEvents));
|
getUserEvents(gListRelayUrls1, userPublicKey, limitPerSubscription, getSecondsDaysAgo(limitSelfEvents));
|
||||||
getMentionEvents(gListRelayUrls2, userPublicKey, limitPerSubscription, getSecondsDaysAgo(limitSelfEvents)); // from relay group 2
|
getMentionEvents(gListRelayUrls2, userPublicKey, limitPerSubscription, getSecondsDaysAgo(limitSelfEvents), "#p"); // from relay group 2
|
||||||
}
|
}
|
||||||
|
|
||||||
// get other user events
|
// get other user events
|
||||||
@@ -299,12 +300,12 @@ Future<void> main(List<String> arguments) async {
|
|||||||
|
|
||||||
// get group and meta info events
|
// get group and meta info events
|
||||||
getKindEvents([0, 3, 40, 41], gListRelayUrls1, 3 * limitPerSubscription, getSecondsDaysAgo(limitMetaInfoEvents)); // get all type 3 etc
|
getKindEvents([0, 3, 40, 41], gListRelayUrls1, 3 * limitPerSubscription, getSecondsDaysAgo(limitMetaInfoEvents)); // get all type 3 etc
|
||||||
getKindEvents([140, 141], gListRelayUrls1, 3 * limitPerSubscription, getSecondsDaysAgo(1)); // get all type 3 etc
|
//getKindEvents([140, 141], gListRelayUrls1, 3 * limitPerSubscription, getSecondsDaysAgo(1)); // get all type 3 etc
|
||||||
|
|
||||||
getKindEvents([42], gListRelayUrls1, limitPerSubscription * 3, getSecondsDaysAgo( limitFollowPosts)); // get all type 3 etc
|
getKindEvents([42], gListRelayUrls1, limitPerSubscription * 3, getSecondsDaysAgo( limitFollowPosts)); // get all type 3 etc
|
||||||
getKindEvents([142], gListRelayUrls1, limitPerSubscription * 3, getSecondsDaysAgo( 1)); // get all type 3 etc
|
//getKindEvents([142], gListRelayUrls1, limitPerSubscription * 3, getSecondsDaysAgo( 1)); // get all type 3 etc
|
||||||
|
|
||||||
getKindEvents([gSecretMessageKind], gListRelayUrls1, limitPerSubscription * 3, getSecondsDaysAgo( 1)); // get all type 3 etc
|
getKindEvents([gSecretMessageKind], gListRelayUrls1, limitPerSubscription * 3, getSecondsDaysAgo( 3)); // get all type 3 etc
|
||||||
|
|
||||||
// TODO get all 40 events, and then get all #e for them ( responses to them)
|
// TODO get all 40 events, and then get all #e for them ( responses to them)
|
||||||
|
|
||||||
|
@@ -466,13 +466,11 @@ class EventData {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( createdAt < getSecondsDaysAgo(1)) {
|
if( createdAt < getSecondsDaysAgo(3)) {
|
||||||
//print("old 142. not decrypting");
|
//print("old 142. not decrypting");
|
||||||
return;
|
//return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
switch(kind) {
|
switch(kind) {
|
||||||
case 142:
|
case 142:
|
||||||
//print("in translateAndDecrypt14x");
|
//print("in translateAndDecrypt14x");
|
||||||
|
@@ -83,7 +83,7 @@ class Relays {
|
|||||||
sendRequest(relayUrl, request);
|
sendRequest(relayUrl, request);
|
||||||
}
|
}
|
||||||
|
|
||||||
void getMentionEvents(String relayUrl, String publicKey, int limit, int sinceWhen) {
|
void getMentionEvents(String relayUrl, String publicKey, int limit, int sinceWhen, String tagToGet) {
|
||||||
for(int i = 0; i < gBots.length; i++) { // ignore bots
|
for(int i = 0; i < gBots.length; i++) { // ignore bots
|
||||||
if( publicKey == gBots[i]) {
|
if( publicKey == gBots[i]) {
|
||||||
return;
|
return;
|
||||||
@@ -91,20 +91,8 @@ class Relays {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String subscriptionId = "mention" + (relays[relayUrl]?.numRequestsSent??"").toString() + "_" + relayUrl.substring(6);
|
String subscriptionId = "mention" + (relays[relayUrl]?.numRequestsSent??"").toString() + "_" + relayUrl.substring(6);
|
||||||
if( relays.containsKey(relayUrl)) {
|
|
||||||
List<String>? users = relays[relayUrl]?.users;
|
|
||||||
if( users != null) { // get a user only if it has not already been requested
|
|
||||||
// following is too restrictive casuse changed sinceWhen is not considered. TODO improve it
|
|
||||||
for(int i = 0; i < users.length; i++) {
|
|
||||||
if( users[i] == publicKey) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
users.add(publicKey);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
String request = getMentionRequest(subscriptionId, publicKey, limit, sinceWhen);
|
String request = getMentionRequest(subscriptionId, publicKey, limit, sinceWhen, tagToGet);
|
||||||
sendRequest(relayUrl, request);
|
sendRequest(relayUrl, request);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -262,9 +250,9 @@ void getUserEvents(List<String> serverUrls, String publicKey, int numUserEvents,
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void getMentionEvents(List<String> serverUrls, String publicKey, int numUserEvents, int sinceWhen) {
|
void getMentionEvents(List<String> serverUrls, String publicKey, int numUserEvents, int sinceWhen, String tagToGet) {
|
||||||
serverUrls.forEach((serverUrl) {
|
serverUrls.forEach((serverUrl) {
|
||||||
relays.getMentionEvents(serverUrl, publicKey, numUserEvents, sinceWhen);
|
relays.getMentionEvents(serverUrl, publicKey, numUserEvents, sinceWhen, tagToGet);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -11,7 +11,7 @@ int gSpecificDebug = 0;
|
|||||||
final log = Logger('ExampleLogger');
|
final log = Logger('ExampleLogger');
|
||||||
|
|
||||||
// for debugging
|
// for debugging
|
||||||
String gCheckEventId = "0082a613c9f4d43f796a427d15db74f10ac64212e28f465870ceaf099f488087";
|
String gCheckEventId = "5924e987416a16df0cbc000ce264f65d133ba352589138ee3a7784f5bae75641";
|
||||||
|
|
||||||
int gDefaultNumWaitSeconds = 8000; // is used in main()
|
int gDefaultNumWaitSeconds = 8000; // is used in main()
|
||||||
|
|
||||||
|
@@ -201,14 +201,18 @@ int scrollableCompareTo(ScrollableMessages a, ScrollableMessages b) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum enumRoomType { kind4, kind40, kind140}
|
||||||
|
|
||||||
class ScrollableMessages {
|
class ScrollableMessages {
|
||||||
String topHeader;
|
String topHeader;
|
||||||
List<String> messageIds;
|
List<String> messageIds;
|
||||||
int createdAt;
|
int createdAt;
|
||||||
|
enumRoomType roomType;
|
||||||
|
|
||||||
ScrollableMessages(this.topHeader, this.messageIds, this.createdAt);
|
ScrollableMessages(this.topHeader, this.messageIds, this.createdAt, this.roomType);
|
||||||
|
|
||||||
void addMessageToRoom(String messageId, Map<String, Tree> tempChildEventsMap) {
|
void addMessageToRoom(String messageId, Map<String, Tree> tempChildEventsMap) {
|
||||||
|
if( gSpecificDebug > 0 && roomType == enumRoomType.kind140) print("in addMessageToRoom for enc");
|
||||||
int newEventTime = (tempChildEventsMap[messageId]?.event.eventData.createdAt??0);
|
int newEventTime = (tempChildEventsMap[messageId]?.event.eventData.createdAt??0);
|
||||||
|
|
||||||
if(gDebug> 0) print("Room has ${messageIds.length} messages already. adding new one to it. ");
|
if(gDebug> 0) print("Room has ${messageIds.length} messages already. adding new one to it. ");
|
||||||
@@ -217,12 +221,12 @@ class ScrollableMessages {
|
|||||||
int eventTime = (tempChildEventsMap[messageIds[i]]?.event.eventData.createdAt??0);
|
int eventTime = (tempChildEventsMap[messageIds[i]]?.event.eventData.createdAt??0);
|
||||||
if( newEventTime < eventTime) {
|
if( newEventTime < eventTime) {
|
||||||
// shift current i and rest one to the right, and put event Time here
|
// shift current i and rest one to the right, and put event Time here
|
||||||
if(gDebug> 0) print("In addMessageToRoom: inserted in middle to room ");
|
if(gSpecificDebug > 0 && roomType == enumRoomType.kind140) print("In addMessageToRoom: inserted enc message in middle to room with name ${topHeader}");
|
||||||
messageIds.insert(i, messageId);
|
messageIds.insert(i, messageId);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(gDebug> 0) print("In addMessageToRoom: added to room ");
|
if(gSpecificDebug > 0 && roomType == enumRoomType.kind140) print("In addMessageToRoom: inserted enc message in end of room with name ${topHeader}");
|
||||||
|
|
||||||
// insert at end
|
// insert at end
|
||||||
messageIds.add(messageId);
|
messageIds.add(messageId);
|
||||||
@@ -297,10 +301,13 @@ class Channel extends ScrollableMessages {
|
|||||||
Set<String> participants; // pubkey of all participants - only for encrypted channels
|
Set<String> participants; // pubkey of all participants - only for encrypted channels
|
||||||
String creatorPubkey; // creator of the channel, if event is known
|
String creatorPubkey; // creator of the channel, if event is known
|
||||||
|
|
||||||
Channel(this.channelId, this.internalChatRoomName, this.about, this.picture, List<String> messageIds, this.participants, this.lastUpdated, [this.creatorPubkey=""]) :
|
enumRoomType roomType;
|
||||||
|
|
||||||
|
Channel(this.channelId, this.internalChatRoomName, this.about, this.picture, List<String> messageIds, this.participants, this.lastUpdated, this.roomType, [this.creatorPubkey=""] ) :
|
||||||
super ( internalChatRoomName.isEmpty? channelId: "Channel Name: $internalChatRoomName (id: $channelId)" ,
|
super ( internalChatRoomName.isEmpty? channelId: "Channel Name: $internalChatRoomName (id: $channelId)" ,
|
||||||
messageIds,
|
messageIds,
|
||||||
lastUpdated);
|
lastUpdated,
|
||||||
|
roomType);
|
||||||
|
|
||||||
String getChannelId() {
|
String getChannelId() {
|
||||||
return channelId;
|
return channelId;
|
||||||
@@ -346,7 +353,7 @@ class DirectMessageRoom extends ScrollableMessages{
|
|||||||
int createdAt;
|
int createdAt;
|
||||||
|
|
||||||
DirectMessageRoom(this.otherPubkey, List<String> messageIds, this.createdAt):
|
DirectMessageRoom(this.otherPubkey, List<String> messageIds, this.createdAt):
|
||||||
super ( "${getAuthorName(otherPubkey)} ($otherPubkey)", messageIds, createdAt) {
|
super ( "${getAuthorName(otherPubkey)} ($otherPubkey)", messageIds, createdAt, enumRoomType.kind4) {
|
||||||
}
|
}
|
||||||
|
|
||||||
String getChannelId() {
|
String getChannelId() {
|
||||||
@@ -682,7 +689,7 @@ class Store {
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<String> emptyMessageList = [];
|
List<String> emptyMessageList = [];
|
||||||
Channel room = Channel(chatRoomId, roomName, roomAbout, "", emptyMessageList, {}, ce.eventData.createdAt);
|
Channel room = Channel(chatRoomId, roomName, roomAbout, "", emptyMessageList, {}, ce.eventData.createdAt, enumRoomType.kind40);
|
||||||
rooms.add( room);
|
rooms.add( room);
|
||||||
}
|
}
|
||||||
} on Exception catch(e) {
|
} on Exception catch(e) {
|
||||||
@@ -707,7 +714,7 @@ class Store {
|
|||||||
channel.addMessageToRoom(eId, tempChildEventsMap);
|
channel.addMessageToRoom(eId, tempChildEventsMap);
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
Channel newChannel = Channel(channelId, "", "", "", [eId], {}, 0);
|
Channel newChannel = Channel(channelId, "", "", "", [eId], {}, 0, enumRoomType.kind40);
|
||||||
// message added in above line
|
// message added in above line
|
||||||
rooms.add( newChannel);
|
rooms.add( newChannel);
|
||||||
}
|
}
|
||||||
@@ -738,9 +745,10 @@ class Store {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Will create a entry in encryptedChannels ( if one does not already exist)
|
* Will create a entry in encryptedChannels ( if one does not already exist)
|
||||||
|
* Returns id of channel if one is created, null otherwise.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static void createEncryptedRoomFromInvite( List<String> secretMessageIds, List<Channel> encryptedChannels, Map<String, Tree> tempChildEventsMap, Event eventSecretMessage) {
|
static String? createEncryptedRoomFromInvite( List<String> secretMessageIds, List<Channel> encryptedChannels, Map<String, Tree> tempChildEventsMap, Event eventSecretMessage) {
|
||||||
|
|
||||||
String? event140Id = getEncryptedChannelIdFromSecretMessage(secretMessageIds, tempChildEventsMap, eventSecretMessage);
|
String? event140Id = getEncryptedChannelIdFromSecretMessage(secretMessageIds, tempChildEventsMap, eventSecretMessage);
|
||||||
Event? event140 = tempChildEventsMap[event140Id]?.event;
|
Event? event140 = tempChildEventsMap[event140Id]?.event;
|
||||||
@@ -755,17 +763,9 @@ class Store {
|
|||||||
dynamic json = jsonDecode(event140.eventData.content);
|
dynamic json = jsonDecode(event140.eventData.content);
|
||||||
Channel? channel = getChannel(encryptedChannels, chatRoomId);
|
Channel? channel = getChannel(encryptedChannels, chatRoomId);
|
||||||
if( channel != null) {
|
if( channel != null) {
|
||||||
// if channel entry already exists, then update its participants info, and name info
|
// if channel entry already exists, then do nothing, cause we've already processed this channel create event
|
||||||
if( channel.chatRoomName == "" && json.containsKey('name')) {
|
|
||||||
channel.chatRoomName = json['name'];
|
|
||||||
}
|
|
||||||
if( channel.lastUpdated == 0) { // == 0 only when it was created using a 142 msg. otherwise, don't update it if it was created using 141
|
|
||||||
channel.participants = participants;
|
|
||||||
channel.lastUpdated = event140.eventData.createdAt;
|
|
||||||
}
|
|
||||||
channel.creatorPubkey = event140.eventData.pubkey;
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
// create new encrypted channel
|
||||||
String roomName = "", roomAbout = "";
|
String roomName = "", roomAbout = "";
|
||||||
if( json.containsKey('name') ) {
|
if( json.containsKey('name') ) {
|
||||||
roomName = json['name']??"";
|
roomName = json['name']??"";
|
||||||
@@ -775,8 +775,9 @@ class Store {
|
|||||||
roomAbout = json['about'];
|
roomAbout = json['about'];
|
||||||
}
|
}
|
||||||
List<String> emptyMessageList = [];
|
List<String> emptyMessageList = [];
|
||||||
Channel room = Channel(chatRoomId, roomName, roomAbout, "", emptyMessageList, participants, event140.eventData.createdAt, event140.eventData.pubkey);
|
Channel room = Channel(chatRoomId, roomName, roomAbout, "", emptyMessageList, participants, event140.eventData.createdAt, enumRoomType.kind140, event140.eventData.pubkey);
|
||||||
encryptedChannels.add( room);
|
encryptedChannels.add( room);
|
||||||
|
return chatRoomId;
|
||||||
}
|
}
|
||||||
} on Exception catch(e) {
|
} on Exception catch(e) {
|
||||||
if( gDebug > 0) print("In From Event. Event type 140. Json Decode error for event id ${event140.eventData.id}. error = $e");
|
if( gDebug > 0) print("In From Event. Event type 140. Json Decode error for event id ${event140.eventData.id}. error = $e");
|
||||||
@@ -785,25 +786,30 @@ class Store {
|
|||||||
else {
|
else {
|
||||||
//printWarning("could not find event 140 from event $gSecretMessageKind ${eventSecretMessage.eventData.id}");
|
//printWarning("could not find event 140 from event $gSecretMessageKind ${eventSecretMessage.eventData.id}");
|
||||||
}
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handleEncryptedChannelEvent( List<String> secretMessageIds, List<Channel> encryptedChannels, Map<String, Tree> tempChildEventsMap, Event ce) {
|
static void handleEncryptedChannelEvent( List<String> secretMessageIds, List<Channel> encryptedChannels, Map<String, Tree> tempChildEventsMap, Event ce) {
|
||||||
String eId = ce.eventData.id;
|
String eId = ce.eventData.id;
|
||||||
int eKind = ce.eventData.kind;
|
int eKind = ce.eventData.kind;
|
||||||
|
|
||||||
if( ce.eventData.createdAt < getSecondsDaysAgo(1)) {
|
if( ce.eventData.createdAt < getSecondsDaysAgo(3)) {
|
||||||
return; // dont process old 142/141 messages cause they're different format
|
//return; // dont process old 142/141 messages cause they're different format
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(eKind) {
|
switch(eKind) {
|
||||||
case 142:
|
case 142:
|
||||||
|
//if( gSpecificDebug > 0 && eId == gCheckEventId) printWarning("Got ${eId}");
|
||||||
|
if( gSpecificDebug > 0) print("got kind 142 message. total number of encrypted channels: ${encryptedChannels.length}. event e tags ${ce.eventData.eTags}");
|
||||||
String channelId = ce.eventData.getChannelIdForMessage();
|
String channelId = ce.eventData.getChannelIdForMessage();
|
||||||
|
|
||||||
if( channelId.length == 64) { // sometimes people may forget to give e tags or give wrong tags like #e
|
if( channelId.length == 64) { // sometimes people may forget to give e tags or give wrong tags like #e
|
||||||
Channel? channel = getChannel(encryptedChannels, channelId);
|
Channel? channel = getChannel(encryptedChannels, channelId);
|
||||||
if( channel != null) {
|
if( channel != null) {
|
||||||
channel.addMessageToRoom(eId, tempChildEventsMap);
|
channel.addMessageToRoom(eId, tempChildEventsMap);
|
||||||
}
|
} else {
|
||||||
|
if( gSpecificDebug > 0) print("could not get channel");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// could not get channel id of message.
|
// could not get channel id of message.
|
||||||
printWarning("---Could not get encryptd channel for message id ${ce.eventData.id} got channelId : ${channelId} its len ${channelId.length}");
|
printWarning("---Could not get encryptd channel for message id ${ce.eventData.id} got channelId : ${channelId} its len ${channelId.length}");
|
||||||
@@ -1115,12 +1121,16 @@ class Store {
|
|||||||
|
|
||||||
// tempEncrytedSecretMessageIds has been created above
|
// tempEncrytedSecretMessageIds has been created above
|
||||||
// now create encrypted rooms
|
// now create encrypted rooms
|
||||||
|
Set<String> usersEncryptedGroups = {};
|
||||||
tempEncryptedSecretMessageIds.forEach((secretEventId) {
|
tempEncryptedSecretMessageIds.forEach((secretEventId) {
|
||||||
Event? secretEvent = tempChildEventsMap[secretEventId]?.event;
|
Event? secretEvent = tempChildEventsMap[secretEventId]?.event;
|
||||||
|
|
||||||
if( secretEvent != null) {
|
if( secretEvent != null) {
|
||||||
secretEvent.eventData.TranslateAndDecryptSecretMessage(tempChildEventsMap);
|
secretEvent.eventData.TranslateAndDecryptSecretMessage(tempChildEventsMap);
|
||||||
createEncryptedRoomFromInvite(tempEncryptedSecretMessageIds, encryptedChannels, tempChildEventsMap, secretEvent);
|
String? newEncryptedChannelId = createEncryptedRoomFromInvite(tempEncryptedSecretMessageIds, encryptedChannels, tempChildEventsMap, secretEvent);
|
||||||
|
if( newEncryptedChannelId != null) {
|
||||||
|
usersEncryptedGroups.add(newEncryptedChannelId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1143,6 +1153,14 @@ class Store {
|
|||||||
// get dummy events
|
// get dummy events
|
||||||
sendEventsRequest(gListRelayUrls1, dummyEventIds);
|
sendEventsRequest(gListRelayUrls1, dummyEventIds);
|
||||||
|
|
||||||
|
// get encrypted channel events, get 141/142 by their mention of channels to which user has been invited through kind 104. get 140 by its event id.
|
||||||
|
for(String newEncryptedGroup in usersEncryptedGroups) {
|
||||||
|
getMentionEvents(gListRelayUrls2, newEncryptedGroup, gLimitFollowPosts, getSecondsDaysAgo(gDefaultNumLastDays), "#e"); // from relay group 2
|
||||||
|
}
|
||||||
|
|
||||||
|
sendEventsRequest(gListRelayUrls1, usersEncryptedGroups);
|
||||||
|
|
||||||
|
|
||||||
// create a dummy top level tree and then create the main Tree object
|
// create a dummy top level tree and then create the main Tree object
|
||||||
return Store( topLevelTrees, tempChildEventsMap, tempWithoutParent, channels, encryptedChannels, tempDirectRooms, tempEncryptedSecretMessageIds);
|
return Store( topLevelTrees, tempChildEventsMap, tempWithoutParent, channels, encryptedChannels, tempDirectRooms, tempEncryptedSecretMessageIds);
|
||||||
} // end fromEvents()
|
} // end fromEvents()
|
||||||
|
@@ -309,12 +309,12 @@ String getUserRequest(String subscriptionId, String publicKey, int numUserEvents
|
|||||||
return strSubscription1 + publicKey.toLowerCase() + strSubscription2;
|
return strSubscription1 + publicKey.toLowerCase() + strSubscription2;
|
||||||
}
|
}
|
||||||
|
|
||||||
String getMentionRequest(String subscriptionId, String publicKey, int numUserEvents, int sinceWhen) {
|
String getMentionRequest(String subscriptionId, String publicKey, int numUserEvents, int sinceWhen, String tagToGet) {
|
||||||
String strTime = "";
|
String strTime = "";
|
||||||
if( sinceWhen != 0) {
|
if( sinceWhen != 0) {
|
||||||
strTime = ', "since": ${sinceWhen.toString()}';
|
strTime = ', "since": ${sinceWhen.toString()}';
|
||||||
}
|
}
|
||||||
var strSubscription1 = '["REQ","$subscriptionId",{ "#p": ["';
|
var strSubscription1 = '["REQ","$subscriptionId",{ "$tagToGet": ["';
|
||||||
var strSubscription2 ='"], "limit": $numUserEvents $strTime } ]';
|
var strSubscription2 ='"], "limit": $numUserEvents $strTime } ]';
|
||||||
return strSubscription1 + publicKey.toLowerCase() + strSubscription2;
|
return strSubscription1 + publicKey.toLowerCase() + strSubscription2;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user