fix: query imported metadata by relay

This commit is contained in:
Avi 2026-09-01 10:20:52 -05:00
commit 3107508a56

View file

@ -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)))
.await
.ok()?;
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(1),
.limit(10),
)
.timeout(Duration::from_secs(10))
.timeout(Duration::from_secs(5))
.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::<Metadata>(&event.content).ok())
best.and_then(|event| serde_json::from_str::<Metadata>(&event.content).ok())
})
})
.join()