1
0
forked from Kieran/snort

add filter.not.ids = [alreadyHave] from memory

This commit is contained in:
Martti Malmi 2024-01-05 13:21:18 +02:00
parent cc753d5708
commit dee9a3de2c
3 changed files with 21 additions and 2 deletions

View File

@ -165,9 +165,18 @@ class IndexedDB extends Dexie {
async find(filter: Filter, callback: (event: TaggedNostrEvent) => void): Promise<void> { async find(filter: Filter, callback: (event: TaggedNostrEvent) => void): Promise<void> {
if (!filter) return; if (!filter) return;
const filterString = JSON.stringify(filter);
if (this.readQueue.has(filterString)) {
return;
}
// make sure only 1 argument is passed // make sure only 1 argument is passed
const cb = e => { const cb = e => {
this.seenEvents.add(e.id); this.seenEvents.add(e.id);
if (filter.not?.ids?.includes(e.id)) {
console.log('skipping', e.id);
return;
}
callback(e); callback(e);
}; };
@ -225,7 +234,6 @@ class IndexedDB extends Dexie {
query = query.limit(filter.limit); query = query.limit(filter.limit);
} }
// TODO test that the sort is actually working // TODO test that the sort is actually working
const filterString = JSON.stringify(filter);
this.enqueueRead(filterString, async () => { this.enqueueRead(filterString, async () => {
await query.each(cb); await query.each(cb);
}); });

View File

@ -319,7 +319,17 @@ export class NostrSystem extends EventEmitter<NostrSystemEvents> implements Syst
qSend.filters = fNew; qSend.filters = fNew;
fNew.forEach(f => { 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); this.emit("request", f);
}); });

View File

@ -57,6 +57,7 @@ export interface ReqFilter {
since?: number; since?: number;
until?: number; until?: number;
limit?: number; limit?: number;
not?: ReqFilter;
[key: string]: Array<string> | Array<number> | string | number | undefined; [key: string]: Array<string> | Array<number> | string | number | undefined;
} }