fix: query imported metadata by relay
This commit is contained in:
parent
2340341e64
commit
3107508a56
1 changed files with 31 additions and 18 deletions
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue