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() { if relay_urls.is_empty() {
return None; return None;
} }
let relay_urls = relay_urls.to_vec();
let public_key = *public_key; let public_key = *public_key;
let relay_urls = relay_urls.to_vec();
std::thread::spawn(move || { std::thread::spawn(move || {
tokio::runtime::Runtime::new().ok()?.block_on(async move { tokio::runtime::Runtime::new().ok()?.block_on(async move {
let client = let client = Client::builder()
relays::open_pool(Keys::generate(), &relay_urls, Some(Duration::from_secs(10))) .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 .await
.ok()?; .ok();
let events = client if let Some(event) = events
.fetch_events( .and_then(|events| events.into_iter().max_by_key(|event| event.created_at))
Filter::new() {
.kind(Kind::Metadata) if best
.author(public_key) .as_ref()
.limit(1), .is_none_or(|current: &Event| event.created_at > current.created_at)
) {
.timeout(Duration::from_secs(10)) best = Some(event);
.await }
.ok()?; }
}
client.disconnect().await; client.disconnect().await;
events best.and_then(|event| serde_json::from_str::<Metadata>(&event.content).ok())
.into_iter()
.max_by_key(|event| event.created_at)
.and_then(|event| serde_json::from_str::<Metadata>(&event.content).ok())
}) })
}) })
.join() .join()