diff --git a/packages/app/src/Utils/Const.ts b/packages/app/src/Utils/Const.ts index b22ebf40..21917f86 100644 --- a/packages/app/src/Utils/Const.ts +++ b/packages/app/src/Utils/Const.ts @@ -31,7 +31,12 @@ export const SnortPubKey = "npub1sn0rtcjcf543gj4wsg7fa59s700d5ztys5ctj0g69g2x680 /** * Default search relays */ -export const SearchRelays = ["wss://relay.nostr.band", "wss://search.nos.today", "wss://relay.noswhere.com", "wss://saltivka.org"]; +export const SearchRelays = [ + "wss://relay.nostr.band", + "wss://search.nos.today", + "wss://relay.noswhere.com", + "wss://saltivka.org", +]; export const DeveloperAccounts = [ "63fe6318dc58583cfe16810f86dd09e18bfd76aabc24a0081ce2856f330504ed", // kieran diff --git a/packages/system/src/query-manager.ts b/packages/system/src/query-manager.ts index dff53449..5c03b221 100644 --- a/packages/system/src/query-manager.ts +++ b/packages/system/src/query-manager.ts @@ -122,6 +122,20 @@ export class QueryManager extends EventEmitter { } qSend.filters = fNew; + const alreadyHave = new Set(); + qSend.filters.forEach(f => { + // check what we already have locally + q.feed.takeSnapshot().forEach(e => alreadyHave.add(e.id)); + if (alreadyHave.size) { + f.not = f.not || {}; + f.not.ids = f.not.ids || []; + // if there's multiple filters in the query, should we only add alreadyHave events that actually match the filter? + f.not.ids.push(...alreadyHave); + console.log("already have", f, alreadyHave); + } + // query relays one at a time at intervals, updating alreadyHave in between? + }); + if (qSend.relay) { this.#log("Sending query to %s %s %O", qSend.relay, q.id, qSend); const s = this.#system.pool.getConnection(qSend.relay);