pref: 🚀

This commit is contained in:
codytseng
2024-12-16 11:04:19 +08:00
parent 1041e8cc6a
commit 211a7edd62

View File

@@ -176,7 +176,7 @@ class ClientService {
_knownIds.add(id) _knownIds.add(id)
return false return false
}, },
onevent(evt: NEvent) { onevent: (evt: NEvent) => {
that.eventDataLoader.prime(evt.id, Promise.resolve(evt)) that.eventDataLoader.prime(evt.id, Promise.resolve(evt))
// not eosed yet, push to events // not eosed yet, push to events
if (eosedCount < startedCount) { if (eosedCount < startedCount) {
@@ -214,7 +214,7 @@ class ClientService {
// insert the event to the right position // insert the event to the right position
timeline.refs.splice(idx, 0, [evt.id, evt.created_at]) timeline.refs.splice(idx, 0, [evt.id, evt.created_at])
}, },
onclose(reason: string) { onclose: (reason: string) => {
if (reason.startsWith('auth-required:')) { if (reason.startsWith('auth-required:')) {
if (!hasAuthed && signer) { if (!hasAuthed && signer) {
relay relay
@@ -228,18 +228,21 @@ class ClientService {
} }
} }
}, },
oneose() { oneose: () => {
if (eosed) return
eosedCount++ eosedCount++
if (eosedCount < startedCount || eosed) return eosed = eosedCount >= startedCount
eosed = true
// (algo feeds) no need to sort and cache // (algo feeds) no need to sort and cache
if (!needSort) { if (!needSort) {
return onEvents(events, true) return onEvents(events, eosed)
} }
if (!eosed) {
events = events.sort((a, b) => b.created_at - a.created_at).slice(0, filter.limit) events = events.sort((a, b) => b.created_at - a.created_at).slice(0, filter.limit)
return onEvents(events.concat(cachedEvents), false)
}
events = events.sort((a, b) => b.created_at - a.created_at).slice(0, filter.limit)
const timeline = that.timelines[key] const timeline = that.timelines[key]
// no cache yet // no cache yet
if (!timeline || !timeline.refs.length) { if (!timeline || !timeline.refs.length) {
@@ -302,21 +305,17 @@ class ClientService {
) )
).filter(Boolean) as NEvent[]) ).filter(Boolean) as NEvent[])
: [] : []
if (cachedEvents.length >= limit) { if (cachedEvents.length > 0) {
return cachedEvents return cachedEvents
} }
const restLimit = limit - cachedEvents.length
const restUntil = cachedEvents.length
? cachedEvents[cachedEvents.length - 1].created_at - 1
: until
let events = await this.pool.querySync(urls, { ...filter, until: restUntil, limit: restLimit }) let events = await this.pool.querySync(urls, { ...filter, until: until, limit: limit })
events.forEach((evt) => { events.forEach((evt) => {
this.eventDataLoader.prime(evt.id, Promise.resolve(evt)) this.eventDataLoader.prime(evt.id, Promise.resolve(evt))
}) })
events = events.sort((a, b) => b.created_at - a.created_at).slice(0, restLimit) events = events.sort((a, b) => b.created_at - a.created_at).slice(0, limit)
timeline.refs.push(...events.map((evt) => [evt.id, evt.created_at] as TTimelineRef)) timeline.refs.push(...events.map((evt) => [evt.id, evt.created_at] as TTimelineRef))
return cachedEvents.concat(events) return events
} }
async fetchEvents(relayUrls: string[], filter: Filter, cache = false) { async fetchEvents(relayUrls: string[], filter: Filter, cache = false) {