fix: 🐛
This commit is contained in:
@@ -7,6 +7,7 @@ import { isSafari } from '@/lib/utils'
|
|||||||
import { ISigner, TProfile, TRelayList } from '@/types'
|
import { ISigner, TProfile, TRelayList } from '@/types'
|
||||||
import { sha256 } from '@noble/hashes/sha2'
|
import { sha256 } from '@noble/hashes/sha2'
|
||||||
import DataLoader from 'dataloader'
|
import DataLoader from 'dataloader'
|
||||||
|
import dayjs from 'dayjs'
|
||||||
import FlexSearch from 'flexsearch'
|
import FlexSearch from 'flexsearch'
|
||||||
import { LRUCache } from 'lru-cache'
|
import { LRUCache } from 'lru-cache'
|
||||||
import {
|
import {
|
||||||
@@ -561,7 +562,11 @@ class ClientService extends EventTarget {
|
|||||||
return onEvents([...events], true)
|
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 (events.length >= filter.limit) {
|
||||||
// if new refs are more than limit, means old refs are too old, replace them
|
// if new refs are more than limit, means old refs are too old, replace them
|
||||||
@@ -610,7 +615,14 @@ class ClientService extends EventTarget {
|
|||||||
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, limit)
|
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]
|
return [...cachedEvents, ...events]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user