forked from Kieran/snort
check filter match on the worker side
This commit is contained in:
parent
395848fd8c
commit
1199418d0e
@ -1,6 +1,7 @@
|
|||||||
import Dexie, { Table } from "dexie";
|
import Dexie, { Table } from "dexie";
|
||||||
import { TaggedNostrEvent, ReqFilter as Filter } from "@snort/system";
|
import { TaggedNostrEvent, ReqFilter as Filter } from "@snort/system";
|
||||||
import * as Comlink from "comlink";
|
import * as Comlink from "comlink";
|
||||||
|
import { eventMatchesFilter } from "@snort/system/src/request-matcher";
|
||||||
|
|
||||||
type Tag = {
|
type Tag = {
|
||||||
id: string;
|
id: string;
|
||||||
@ -16,7 +17,6 @@ class IndexedDB extends Dexie {
|
|||||||
tags!: Table<Tag>;
|
tags!: Table<Tag>;
|
||||||
private saveQueue: SaveQueueEntry[] = [];
|
private saveQueue: SaveQueueEntry[] = [];
|
||||||
private seenEvents = new Set<string>(); // LRU set maybe?
|
private seenEvents = new Set<string>(); // LRU set maybe?
|
||||||
private seenFilters = new Set<string>();
|
|
||||||
private subscribedEventIds = new Set<string>();
|
private subscribedEventIds = new Set<string>();
|
||||||
private subscribedAuthors = new Set<string>();
|
private subscribedAuthors = new Set<string>();
|
||||||
private subscribedTags = new Set<string>();
|
private subscribedTags = new Set<string>();
|
||||||
@ -137,12 +137,18 @@ class IndexedDB extends Dexie {
|
|||||||
// make sure only 1 argument is passed
|
// make sure only 1 argument is passed
|
||||||
const cb = e => callback(e);
|
const cb = e => callback(e);
|
||||||
|
|
||||||
|
const filterCb = e => {
|
||||||
|
if (eventMatchesFilter(e, filter)) {
|
||||||
|
callback(e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
if (filter["#p"] && Array.isArray(filter["#p"])) {
|
if (filter["#p"] && Array.isArray(filter["#p"])) {
|
||||||
for (const eventId of filter["#p"]) {
|
for (const eventId of filter["#p"]) {
|
||||||
this.subscribedTags.add("p|" + eventId);
|
this.subscribedTags.add("p|" + eventId);
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.subscribeToTags(cb);
|
await this.subscribeToTags(filterCb);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -151,7 +157,7 @@ class IndexedDB extends Dexie {
|
|||||||
this.subscribedTags.add("e|" + eventId);
|
this.subscribedTags.add("e|" + eventId);
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.subscribeToTags(cb);
|
await this.subscribeToTags(filterCb);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -160,7 +166,7 @@ class IndexedDB extends Dexie {
|
|||||||
this.subscribedTags.add("d|" + eventId);
|
this.subscribedTags.add("d|" + eventId);
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.subscribeToTags(cb);
|
await this.subscribeToTags(filterCb);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,7 +178,7 @@ class IndexedDB extends Dexie {
|
|||||||
|
|
||||||
if (filter.authors?.length) {
|
if (filter.authors?.length) {
|
||||||
filter.authors.forEach(author => this.subscribedAuthors.add(author));
|
filter.authors.forEach(author => this.subscribedAuthors.add(author));
|
||||||
await this.subscribeToAuthors(cb);
|
await this.subscribeToAuthors(filterCb);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -190,7 +196,7 @@ class IndexedDB extends Dexie {
|
|||||||
// TODO test that the sort is actually working
|
// TODO test that the sort is actually working
|
||||||
await query.each(e => {
|
await query.each(e => {
|
||||||
this.seenEvents.add(e.id);
|
this.seenEvents.add(e.id);
|
||||||
cb(e);
|
filterCb(e);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user