From 366e10b23ab5b431b51b2173ae71084f23c2bfbe Mon Sep 17 00:00:00 2001 From: Gigi Date: Wed, 22 Oct 2025 01:19:09 +0200 Subject: [PATCH] feat(/e/): check eventStore first for author profile - Try to load author profile from eventStore cache first - Only fetch from relays if not found in cache - Instant title update if profile already loaded --- src/hooks/useEventLoader.ts | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/src/hooks/useEventLoader.ts b/src/hooks/useEventLoader.ts index 8958c346..c2cea86e 100644 --- a/src/hooks/useEventLoader.ts +++ b/src/hooks/useEventLoader.ts @@ -49,19 +49,36 @@ export function useEventLoader({ setReaderContent(baseContent) // Background: resolve author profile for kind:1 and update title - if (event.kind === 1 && relayPool && eventStore) { + if (event.kind === 1 && eventStore) { (async () => { try { - const profiles = await fetchProfiles(relayPool, eventStore as unknown as IEventStore, [event.pubkey]) - if (!profiles || profiles.length === 0) return - const latest = profiles.sort((a, b) => (b.created_at || 0) - (a.created_at || 0))[0] let resolved = '' - try { - const obj = JSON.parse(latest.content || '{}') as { name?: string; display_name?: string; nip05?: string } - resolved = obj.display_name || obj.name || obj.nip05 || '' - } catch { - // ignore + + // First, try to get from event store cache + const storedProfile = eventStore.getEvent(event.pubkey + ':0') + if (storedProfile) { + try { + const obj = JSON.parse(storedProfile.content || '{}') as { name?: string; display_name?: string; nip05?: string } + resolved = obj.display_name || obj.name || obj.nip05 || '' + } catch { + // ignore parse errors + } } + + // If not found in event store, fetch from relays + if (!resolved && relayPool) { + const profiles = await fetchProfiles(relayPool, eventStore as unknown as IEventStore, [event.pubkey]) + if (profiles && profiles.length > 0) { + const latest = profiles.sort((a, b) => (b.created_at || 0) - (a.created_at || 0))[0] + try { + const obj = JSON.parse(latest.content || '{}') as { name?: string; display_name?: string; nip05?: string } + resolved = obj.display_name || obj.name || obj.nip05 || '' + } catch { + // ignore parse errors + } + } + } + if (resolved) { setReaderContent({ ...baseContent, title: `Note by @${resolved}` }) }