From 3107508a56b4f77a1efc194c12d59f028b32c908 Mon Sep 17 00:00:00 2001 From: Avi Date: Tue, 1 Sep 2026 10:20:52 -0500 Subject: [PATCH] fix: query imported metadata by relay --- src/profiles.rs | 49 +++++++++++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/src/profiles.rs b/src/profiles.rs index 602d6bc..77da462 100644 --- a/src/profiles.rs +++ b/src/profiles.rs @@ -500,29 +500,42 @@ fn fetch_profile_metadata(public_key: &PublicKey, relay_urls: &[String]) -> Opti if relay_urls.is_empty() { return None; } - let relay_urls = relay_urls.to_vec(); let public_key = *public_key; + let relay_urls = relay_urls.to_vec(); std::thread::spawn(move || { tokio::runtime::Runtime::new().ok()?.block_on(async move { - let client = - relays::open_pool(Keys::generate(), &relay_urls, Some(Duration::from_secs(10))) + let client = Client::builder() + .authenticator(SignerAuthenticator::new(Keys::generate())) + .build(); + for url in &relay_urls { + let _ = client.add_relay(url.as_str()).await; + } + client.connect().and_wait(Duration::from_secs(10)).await; + let mut best = None; + for _url in relay_urls { + let events = client + .fetch_events( + Filter::new() + .kind(Kind::Metadata) + .author(public_key) + .limit(10), + ) + .timeout(Duration::from_secs(5)) .await - .ok()?; - let events = client - .fetch_events( - Filter::new() - .kind(Kind::Metadata) - .author(public_key) - .limit(1), - ) - .timeout(Duration::from_secs(10)) - .await - .ok()?; + .ok(); + if let Some(event) = events + .and_then(|events| events.into_iter().max_by_key(|event| event.created_at)) + { + if best + .as_ref() + .is_none_or(|current: &Event| event.created_at > current.created_at) + { + best = Some(event); + } + } + } client.disconnect().await; - events - .into_iter() - .max_by_key(|event| event.created_at) - .and_then(|event| serde_json::from_str::(&event.content).ok()) + best.and_then(|event| serde_json::from_str::(&event.content).ok()) }) }) .join()