From dee9a3de2c5aa71c80ea4ed8ffeb7619b9436fb1 Mon Sep 17 00:00:00 2001 From: Martti Malmi Date: Fri, 5 Jan 2024 13:21:18 +0200 Subject: [PATCH] add filter.not.ids = [alreadyHave] from memory --- packages/app/src/Db/IndexedDB.ts | 10 +++++++++- packages/system/src/nostr-system.ts | 12 +++++++++++- packages/system/src/nostr.ts | 1 + 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/packages/app/src/Db/IndexedDB.ts b/packages/app/src/Db/IndexedDB.ts index 83509d8e..dbbb7522 100644 --- a/packages/app/src/Db/IndexedDB.ts +++ b/packages/app/src/Db/IndexedDB.ts @@ -165,9 +165,18 @@ class IndexedDB extends Dexie { async find(filter: Filter, callback: (event: TaggedNostrEvent) => void): Promise { if (!filter) return; + const filterString = JSON.stringify(filter); + if (this.readQueue.has(filterString)) { + return; + } + // make sure only 1 argument is passed const cb = e => { this.seenEvents.add(e.id); + if (filter.not?.ids?.includes(e.id)) { + console.log('skipping', e.id); + return; + } callback(e); }; @@ -225,7 +234,6 @@ class IndexedDB extends Dexie { query = query.limit(filter.limit); } // TODO test that the sort is actually working - const filterString = JSON.stringify(filter); this.enqueueRead(filterString, async () => { await query.each(cb); }); diff --git a/packages/system/src/nostr-system.ts b/packages/system/src/nostr-system.ts index f5d31ea8..7a0b3ffa 100644 --- a/packages/system/src/nostr-system.ts +++ b/packages/system/src/nostr-system.ts @@ -319,7 +319,17 @@ export class NostrSystem extends EventEmitter implements Syst qSend.filters = fNew; fNew.forEach(f => { - inMemoryDB.find(f, e => this.HandleEvent(e)); + const alreadyHave = inMemoryDB.findArray(f).map(e => { + console.log('got from inMemoryDB', e); + this.HandleEvent(e); + return e.id; + }); + f.not = f.not ?? {}; + if (f.not.ids) { + f.not.ids.push(...alreadyHave); + } else { + f.not.ids = alreadyHave; + } this.emit("request", f); }); diff --git a/packages/system/src/nostr.ts b/packages/system/src/nostr.ts index d320381a..f8b187e8 100644 --- a/packages/system/src/nostr.ts +++ b/packages/system/src/nostr.ts @@ -57,6 +57,7 @@ export interface ReqFilter { since?: number; until?: number; limit?: number; + not?: ReqFilter; [key: string]: Array | Array | string | number | undefined; }