Browse Source

fix: 🐛

imwald
codytseng 11 months ago
parent
commit
776f290ef9
  1. 16
      src/services/client.service.ts

16
src/services/client.service.ts

@ -7,6 +7,7 @@ import { isSafari } from '@/lib/utils' @@ -7,6 +7,7 @@ import { isSafari } from '@/lib/utils'
import { ISigner, TProfile, TRelayList } from '@/types'
import { sha256 } from '@noble/hashes/sha2'
import DataLoader from 'dataloader'
import dayjs from 'dayjs'
import FlexSearch from 'flexsearch'
import { LRUCache } from 'lru-cache'
import {
@ -561,7 +562,11 @@ class ClientService extends EventTarget { @@ -561,7 +562,11 @@ class ClientService extends EventTarget {
return onEvents([...events], true)
}
const newRefs = events.map((evt) => [evt.id, evt.created_at] as TTimelineRef)
// Prevent concurrent requests from duplicating the same event
const firstRefCreatedAt = timeline.refs[0][1]
const newRefs = events
.filter((evt) => evt.created_at > firstRefCreatedAt)
.map((evt) => [evt.id, evt.created_at] as TTimelineRef)
if (events.length >= filter.limit) {
// if new refs are more than limit, means old refs are too old, replace them
@ -610,7 +615,14 @@ class ClientService extends EventTarget { @@ -610,7 +615,14 @@ class ClientService extends EventTarget {
this.eventDataLoader.prime(evt.id, Promise.resolve(evt))
})
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))
// Prevent concurrent requests from duplicating the same event
const lastRefCreatedAt = refs.length > 0 ? refs[refs.length - 1][1] : dayjs().unix()
timeline.refs.push(
...events
.filter((evt) => evt.created_at < lastRefCreatedAt)
.map((evt) => [evt.id, evt.created_at] as TTimelineRef)
)
return [...cachedEvents, ...events]
}

Loading…
Cancel
Save