From 32ced513ba24d8fd99f1537b1512b2b786198dff Mon Sep 17 00:00:00 2001 From: Silberengel Date: Tue, 17 Mar 2026 13:22:09 +0100 Subject: [PATCH] add kalender feed to trending --- src/components/NotificationList/index.tsx | 2 +- src/services/client.service.ts | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/components/NotificationList/index.tsx b/src/components/NotificationList/index.tsx index b64d5cca..f7cd392b 100644 --- a/src/components/NotificationList/index.tsx +++ b/src/components/NotificationList/index.tsx @@ -180,9 +180,9 @@ const NotificationList = forwardRef( onEvents: (events, eosed) => { if (events.length > 0) { setNotifications(events.filter((event) => event.pubkey !== pubkey)) + setLoading(false) } if (eosed) { - setLoading(false) setUntil(events.length > 0 ? events[events.length - 1].created_at - 1 : undefined) noteStatsService.updateNoteStatsByEvents(events) } diff --git a/src/services/client.service.ts b/src/services/client.service.ts index eadcedad..c08b3cfd 100644 --- a/src/services/client.service.ts +++ b/src/services/client.service.ts @@ -676,6 +676,7 @@ class ClientService extends EventTarget { let eventIdSet = new Set() let events: NEvent[] = [] let eosedCount = 0 + let progressiveDelivered = false const subs = await Promise.all( subRequests.map(({ urls, filter }) => { @@ -698,6 +699,9 @@ class ClientService extends EventTarget { if (eosedCount >= threshold) { onEvents(events, eosedCount >= requestCount) + } else if (!progressiveDelivered && events.length > 0) { + progressiveDelivered = true + onEvents(events, false) } }, onNew: (evt) => { @@ -964,13 +968,26 @@ class ClientService extends EventTarget { const that = this let events: NEvent[] = [] let eosedAt: number | null = null + let initialBatchScheduled = false + const PROGRESSIVE_DELAY_MS = 150 const subCloser = this.subscribe(relays, since ? { ...filter, since } : filter, { startLogin, onevent: (evt: NEvent) => { that.addEventToCache(evt) // not eosed yet, push to events if (!eosedAt) { - return events.push(evt) + events.push(evt) + // Deliver first batch quickly so UI (e.g. notifications) doesn't wait for all relays to EOSE + if (needSort && events.length > 0 && !initialBatchScheduled) { + initialBatchScheduled = true + setTimeout(() => { + if (!eosedAt && events.length > 0) { + const snap = [...events].sort((a, b) => b.created_at - a.created_at).slice(0, filter.limit) + onEvents(snap.concat(cachedEvents).slice(0, filter.limit), false) + } + }, PROGRESSIVE_DELAY_MS) + } + return } // new event if (evt.created_at > eosedAt) {