From 876e9e1516b5d75ec2799974cf3a1770a6eaf6b7 Mon Sep 17 00:00:00 2001 From: Mike Dilger Date: Tue, 17 Jan 2023 20:55:46 +1300 Subject: [PATCH] better person_relay related code --- src/db/person_relay.rs | 25 ++++++++++++++----------- src/people.rs | 6 +++--- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/db/person_relay.rs b/src/db/person_relay.rs index 851e85a1..b112de1d 100644 --- a/src/db/person_relay.rs +++ b/src/db/person_relay.rs @@ -67,7 +67,10 @@ impl DbPersonRelay { last_suggested_nip05, last_suggested_bytag \ FROM person_relay \ 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()) ); @@ -330,32 +333,32 @@ impl DbPersonRelay { } #[allow(dead_code)] - pub async fn get_best_relay(pubkey: PublicKeyHex) -> Result, Error> { + pub async fn get_best_relays(pubkey: PublicKeyHex) -> Result, Error> { // This is the ranking we are using. There might be reasons // for ranking differently: // nip23 > kind3 > nip05 > kind2 > fetched > bytag let sql = "SELECT relay FROM person_relay WHERE person=? \ - ORDER BY last_suggested_nip23 DESC, last_suggested_kind3 DESC, \ - last_suggested_nip05 DESC, last_suggested_kind2 DESC, \ - last_fetched DESC, last_suggested_bytag DESC"; + ORDER BY last_suggested_nip23 DESC, last_suggested_kind3 DESC, \ + last_suggested_nip05 DESC, last_suggested_kind2 DESC, \ + last_fetched DESC, last_suggested_bytag DESC"; - let maybe_relay_result: Result, Error> = spawn_blocking(move || { + let relays: Result, Error> = spawn_blocking(move || { let maybe_db = GLOBALS.db.blocking_lock(); let db = maybe_db.as_ref().unwrap(); let mut stmt = db.prepare(sql)?; stmt.raw_bind_parameter(1, &pubkey.0)?; let mut rows = stmt.raw_query(); - let mut maybe_relay: Option = None; - if let Some(row) = rows.next()? { + let mut relays: Vec = Vec::new(); + while let Some(row) = rows.next()? { let s: String = row.get(0)?; - maybe_relay = Some(Url::new(&s)); + relays.push(Url::new(&s)); } - Ok(maybe_relay) + Ok(relays) }) .await?; - maybe_relay_result + relays } /* diff --git a/src/people.rs b/src/people.rs index 512ca1dd..547b0596 100644 --- a/src/people.rs +++ b/src/people.rs @@ -445,11 +445,11 @@ impl People { let pubkeys = self.get_followed_pubkeys(); for pubkey in &pubkeys { // 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 { pubkey: pubkey.clone(), - recommended_relay_url: maybeurl, + recommended_relay_url: maybeurl.cloned(), petname: None, }); }