better person_relay related code

This commit is contained in:
Mike Dilger 2023-01-17 20:55:46 +13:00
parent 4190cee3d1
commit 876e9e1516
2 changed files with 17 additions and 14 deletions

View File

@ -67,7 +67,10 @@ impl DbPersonRelay {
last_suggested_nip05, last_suggested_bytag \ last_suggested_nip05, last_suggested_bytag \
FROM person_relay \ FROM person_relay \
INNER JOIN relay ON person_relay.relay=relay.url \ INNER JOIN relay ON person_relay.relay=relay.url \
WHERE person IN ({}) ORDER BY person, relay.rank DESC", WHERE person IN ({}) ORDER BY person, relay.rank DESC, \
last_suggested_nip23 DESC, last_suggested_kind3 DESC, \
last_suggested_nip05 DESC, last_suggested_kind2 DESC, \
last_fetched DESC, last_suggested_bytag DESC",
repeat_vars(pubkeys.len()) repeat_vars(pubkeys.len())
); );
@ -330,32 +333,32 @@ impl DbPersonRelay {
} }
#[allow(dead_code)] #[allow(dead_code)]
pub async fn get_best_relay(pubkey: PublicKeyHex) -> Result<Option<Url>, Error> { pub async fn get_best_relays(pubkey: PublicKeyHex) -> Result<Vec<Url>, Error> {
// This is the ranking we are using. There might be reasons // This is the ranking we are using. There might be reasons
// for ranking differently: // for ranking differently:
// nip23 > kind3 > nip05 > kind2 > fetched > bytag // nip23 > kind3 > nip05 > kind2 > fetched > bytag
let sql = "SELECT relay FROM person_relay WHERE person=? \ let sql = "SELECT relay FROM person_relay WHERE person=? \
ORDER BY last_suggested_nip23 DESC, last_suggested_kind3 DESC, \ ORDER BY last_suggested_nip23 DESC, last_suggested_kind3 DESC, \
last_suggested_nip05 DESC, last_suggested_kind2 DESC, \ last_suggested_nip05 DESC, last_suggested_kind2 DESC, \
last_fetched DESC, last_suggested_bytag DESC"; last_fetched DESC, last_suggested_bytag DESC";
let maybe_relay_result: Result<Option<Url>, Error> = spawn_blocking(move || { let relays: Result<Vec<Url>, Error> = spawn_blocking(move || {
let maybe_db = GLOBALS.db.blocking_lock(); let maybe_db = GLOBALS.db.blocking_lock();
let db = maybe_db.as_ref().unwrap(); let db = maybe_db.as_ref().unwrap();
let mut stmt = db.prepare(sql)?; let mut stmt = db.prepare(sql)?;
stmt.raw_bind_parameter(1, &pubkey.0)?; stmt.raw_bind_parameter(1, &pubkey.0)?;
let mut rows = stmt.raw_query(); let mut rows = stmt.raw_query();
let mut maybe_relay: Option<Url> = None; let mut relays: Vec<Url> = Vec::new();
if let Some(row) = rows.next()? { while let Some(row) = rows.next()? {
let s: String = row.get(0)?; let s: String = row.get(0)?;
maybe_relay = Some(Url::new(&s)); relays.push(Url::new(&s));
} }
Ok(maybe_relay) Ok(relays)
}) })
.await?; .await?;
maybe_relay_result relays
} }
/* /*

View File

@ -445,11 +445,11 @@ impl People {
let pubkeys = self.get_followed_pubkeys(); let pubkeys = self.get_followed_pubkeys();
for pubkey in &pubkeys { for pubkey in &pubkeys {
// Get their best relay // Get their best relay
let maybeurl = DbPersonRelay::get_best_relay(pubkey.clone()).await?; let relays = DbPersonRelay::get_best_relays(pubkey.clone()).await?;
let maybeurl = relays.get(0);
p_tags.push(Tag::Pubkey { p_tags.push(Tag::Pubkey {
pubkey: pubkey.clone(), pubkey: pubkey.clone(),
recommended_relay_url: maybeurl, recommended_relay_url: maybeurl.cloned(),
petname: None, petname: None,
}); });
} }