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() {
|
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()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue