Browse Source

fix: prevent old notes from being treated as new (#278)

imwald
Cody Tseng 11 months ago committed by GitHub
parent
commit
c40609c8ac
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 25
      src/services/client.service.ts

25
src/services/client.service.ts

@ -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)

Loading…
Cancel
Save