Work some bugs out of relays/loaders/repository

This commit is contained in:
Jon Staab
2024-05-15 09:15:46 -07:00
parent 5c9b1893ba
commit 2a2b6b8fec
6 changed files with 106 additions and 76 deletions
+17 -14
View File
@@ -89,35 +89,38 @@ export class FeedLoader<E extends TrustedEvent> {
const requestFilters = filters!
// Remove filters that don't fit our window
.filter((filter: Filter) => {
const filterSince = filter.since || EPOCH
const filterUntil = filter.until || now()
const filterSince = filter.since || minSince
const filterUntil = filter.until || maxUntil
return filterSince < until && filterUntil > since
})
// Modify the filters to define our window
.map((filter: Filter) => ({...filter, until, limit, since}))
if (requestFilters.length === 0) {
return onExhausted?.()
}
let count = 0
if (requestFilters.length > 0) {
await this.options.request({
relays,
filters: requestFilters,
onEvent: (event: E) => {
count += 1
until = Math.min(until, event.created_at)
onEvent?.(event)
},
})
}
await this.options.request({
relays,
filters: requestFilters,
onEvent: (event: E) => {
count += 1
until = Math.min(until, event.created_at)
onEvent?.(event)
},
})
// Relays can't be relied upon to return events in descending order, do exponential
// windowing to ensure we get the most recent stuff on first load, but eventually find it all
if (count === 0) {
delta *= 10
until = since
}
since = Math.max(minSince, since - delta)
since = Math.max(minSince, until - delta)
if (since === minSince) {
onExhausted?.()