|
|
|
@ -445,23 +445,23 @@ class ClientService extends EventTarget { |
|
|
|
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
|
|
const that = this |
|
|
|
const that = this |
|
|
|
let events: NEvent[] = [] |
|
|
|
let events: NEvent[] = [] |
|
|
|
let eosed = false |
|
|
|
let eosedAt: number | null = null |
|
|
|
const subCloser = this.subscribe(relays, since ? { ...filter, since } : filter, { |
|
|
|
const subCloser = this.subscribe(relays, since ? { ...filter, since } : filter, { |
|
|
|
startLogin, |
|
|
|
startLogin, |
|
|
|
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 (!eosed) { |
|
|
|
if (!eosedAt) { |
|
|
|
return events.push(evt) |
|
|
|
return events.push(evt) |
|
|
|
} |
|
|
|
} |
|
|
|
// eosed, (algo relay feeds) no need to sort and cache
|
|
|
|
// new event
|
|
|
|
if (!needSort) { |
|
|
|
if (evt.created_at > eosedAt) { |
|
|
|
return onNew(evt) |
|
|
|
onNew(evt) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const timeline = that.timelines[key] |
|
|
|
const timeline = that.timelines[key] |
|
|
|
if (!timeline || Array.isArray(timeline) || !timeline.refs.length) { |
|
|
|
if (!timeline || Array.isArray(timeline) || !timeline.refs.length) { |
|
|
|
return onNew(evt) |
|
|
|
return |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// find the right position to insert
|
|
|
|
// find the right position to insert
|
|
|
|
@ -479,19 +479,16 @@ class ClientService extends EventTarget { |
|
|
|
// the event is too old, ignore it
|
|
|
|
// the event is too old, ignore it
|
|
|
|
if (idx >= timeline.refs.length) return |
|
|
|
if (idx >= timeline.refs.length) return |
|
|
|
|
|
|
|
|
|
|
|
// new event
|
|
|
|
|
|
|
|
if (idx === 0) { |
|
|
|
|
|
|
|
onNew(evt) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 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]) |
|
|
|
}, |
|
|
|
}, |
|
|
|
oneose: (_eosed) => { |
|
|
|
oneose: (eosed) => { |
|
|
|
eosed = _eosed |
|
|
|
if (eosed && !eosedAt) { |
|
|
|
|
|
|
|
eosedAt = dayjs().unix() |
|
|
|
|
|
|
|
} |
|
|
|
// (algo feeds) no need to sort and cache
|
|
|
|
// (algo feeds) no need to sort and cache
|
|
|
|
if (!needSort) { |
|
|
|
if (!needSort) { |
|
|
|
return onEvents([...events], eosed) |
|
|
|
return onEvents([...events], !!eosedAt) |
|
|
|
} |
|
|
|
} |
|
|
|
if (!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) |
|
|
|
|