|
|
|
@ -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) |
|
|
|
|
|
|
|
return onEvents(events.concat(cachedEvents), false) |
|
|
|
} |
|
|
|
} |
|
|
|
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) |
|
|
|
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) { |
|
|
|
|