forked from Kieran/snort
add filter.not.ids = [alreadyHave] from memory
This commit is contained in:
parent
cc753d5708
commit
dee9a3de2c
@ -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);
|
||||||
});
|
});
|
||||||
|
@ -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);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user