chore: extract isRequestSatisfied
This commit is contained in:
parent
dc4758d302
commit
69f6694f5c
@ -3,7 +3,7 @@ import { EventEmitter } from "eventemitter3";
|
|||||||
import { BuiltRawReqFilter, FlatReqFilter, ReqFilter, RequestBuilder, SystemInterface, TaggedNostrEvent } from ".";
|
import { BuiltRawReqFilter, FlatReqFilter, ReqFilter, RequestBuilder, SystemInterface, TaggedNostrEvent } from ".";
|
||||||
import { Query, TraceReport } from "./query";
|
import { Query, TraceReport } from "./query";
|
||||||
import { trimFilters } from "./request-trim";
|
import { trimFilters } from "./request-trim";
|
||||||
import { eventMatchesFilter } from "./request-matcher";
|
import { eventMatchesFilter, isRequestSatisfied } from "./request-matcher";
|
||||||
|
|
||||||
interface QueryManagerEvents {
|
interface QueryManagerEvents {
|
||||||
change: () => void;
|
change: () => void;
|
||||||
@ -107,7 +107,7 @@ export class QueryManager extends EventEmitter<QueryManagerEvents> {
|
|||||||
const data = await this.#system.cacheRelay.query(["REQ", q.id, ...filters]);
|
const data = await this.#system.cacheRelay.query(["REQ", q.id, ...filters]);
|
||||||
if (data.length > 0) {
|
if (data.length > 0) {
|
||||||
syncFrom = data.map(a => ({ ...a, relays: [] }));
|
syncFrom = data.map(a => ({ ...a, relays: [] }));
|
||||||
this.#log("Adding from cache: %O", data);
|
this.#log("Adding from cache %s %O", q.id, data);
|
||||||
q.feed.add(syncFrom);
|
q.feed.add(syncFrom);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -115,7 +115,7 @@ export class QueryManager extends EventEmitter<QueryManagerEvents> {
|
|||||||
// remove satisfied filters
|
// remove satisfied filters
|
||||||
if (syncFrom.length > 0) {
|
if (syncFrom.length > 0) {
|
||||||
// only remove the "ids" filters
|
// only remove the "ids" filters
|
||||||
const newFilters = filters.filter(a => !a.ids || (a.ids && !syncFrom.some(b => eventMatchesFilter(b, a))));
|
const newFilters = filters.filter(a => !isRequestSatisfied(a, syncFrom));
|
||||||
if (newFilters.length !== filters.length) {
|
if (newFilters.length !== filters.length) {
|
||||||
this.#log("Removing satisfied filters %o %o", newFilters, filters);
|
this.#log("Removing satisfied filters %o %o", newFilters, filters);
|
||||||
filters = newFilters;
|
filters = newFilters;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { NostrEvent, ReqFilter } from "./nostr";
|
import { NostrEvent, ReqFilter, TaggedNostrEvent } from "./nostr";
|
||||||
|
|
||||||
export function eventMatchesFilter(ev: NostrEvent, filter: ReqFilter) {
|
export function eventMatchesFilter(ev: NostrEvent, filter: ReqFilter) {
|
||||||
if (filter.since && ev.created_at < filter.since) {
|
if (filter.since && ev.created_at < filter.since) {
|
||||||
@ -18,3 +18,9 @@ export function eventMatchesFilter(ev: NostrEvent, filter: ReqFilter) {
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function isRequestSatisfied(filter: ReqFilter, results: Array<TaggedNostrEvent>) {
|
||||||
|
if (filter.ids && filter.ids.every(a => results.some(b => b.id === a))) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user