diff options
| author | DanConwayDev <DanConwayDev@protonmail.com> | 2024-11-27 17:08:25 +0000 |
|---|---|---|
| committer | DanConwayDev <DanConwayDev@protonmail.com> | 2024-11-27 17:08:25 +0000 |
| commit | 83448a99aaf18c7a045a081c5de0c22bc4a83de1 (patch) | |
| tree | 28076a33b40e63937d79a8fe8d54b58d42db092c /src/lib/client.rs | |
| parent | 5478aa74cc26452809e499a461067ca9744cb7ce (diff) | |
chore: bump rust-nosrt v0.37.0
use RelayUrl in repo_ref which I had resisted as it mutates relay
urls when printed to append a slash
Diffstat (limited to 'src/lib/client.rs')
| -rw-r--r-- | src/lib/client.rs | 73 |
1 files changed, 35 insertions, 38 deletions
diff --git a/src/lib/client.rs b/src/lib/client.rs index 7093dd5..051aa3d 100644 --- a/src/lib/client.rs +++ b/src/lib/client.rs | |||
| @@ -30,11 +30,11 @@ use indicatif::{MultiProgress, ProgressBar, ProgressDrawTarget, ProgressState, P | |||
| 30 | #[cfg(test)] | 30 | #[cfg(test)] |
| 31 | use mockall::*; | 31 | use mockall::*; |
| 32 | use nostr::{nips::nip01::Coordinate, Event}; | 32 | use nostr::{nips::nip01::Coordinate, Event}; |
| 33 | use nostr_database::NostrDatabase; | 33 | use nostr_database::NostrEventsDatabase; |
| 34 | use nostr_lmdb::NostrLMDB; | 34 | use nostr_lmdb::NostrLMDB; |
| 35 | use nostr_sdk::{ | 35 | use nostr_sdk::{ |
| 36 | prelude::RelayLimits, EventBuilder, EventId, Kind, NostrSigner, Options, PublicKey, | 36 | prelude::RelayLimits, EventBuilder, EventId, Kind, NostrSigner, Options, PublicKey, RelayUrl, |
| 37 | SingleLetterTag, Timestamp, Url, | 37 | SingleLetterTag, Timestamp, |
| 38 | }; | 38 | }; |
| 39 | 39 | ||
| 40 | use crate::{ | 40 | use crate::{ |
| @@ -63,7 +63,7 @@ pub trait Connect { | |||
| 63 | fn default() -> Self; | 63 | fn default() -> Self; |
| 64 | fn new(opts: Params) -> Self; | 64 | fn new(opts: Params) -> Self; |
| 65 | async fn set_signer(&mut self, signer: Arc<dyn NostrSigner>); | 65 | async fn set_signer(&mut self, signer: Arc<dyn NostrSigner>); |
| 66 | async fn connect(&self, relay_url: &Url) -> Result<()>; | 66 | async fn connect(&self, relay_url: &RelayUrl) -> Result<()>; |
| 67 | async fn disconnect(&self) -> Result<()>; | 67 | async fn disconnect(&self) -> Result<()>; |
| 68 | fn get_fallback_relays(&self) -> &Vec<String>; | 68 | fn get_fallback_relays(&self) -> &Vec<String>; |
| 69 | fn get_more_fallback_relays(&self) -> &Vec<String>; | 69 | fn get_more_fallback_relays(&self) -> &Vec<String>; |
| @@ -82,7 +82,7 @@ pub trait Connect { | |||
| 82 | ) -> Result<Vec<nostr::Event>>; | 82 | ) -> Result<Vec<nostr::Event>>; |
| 83 | async fn get_events_per_relay( | 83 | async fn get_events_per_relay( |
| 84 | &self, | 84 | &self, |
| 85 | relays: Vec<Url>, | 85 | relays: Vec<RelayUrl>, |
| 86 | filters: Vec<nostr::Filter>, | 86 | filters: Vec<nostr::Filter>, |
| 87 | progress_reporter: MultiProgress, | 87 | progress_reporter: MultiProgress, |
| 88 | ) -> Result<(Vec<Result<Vec<nostr::Event>>>, MultiProgress)>; | 88 | ) -> Result<(Vec<Result<Vec<nostr::Event>>>, MultiProgress)>; |
| @@ -172,7 +172,7 @@ impl Connect for Client { | |||
| 172 | self.client.set_signer(signer).await; | 172 | self.client.set_signer(signer).await; |
| 173 | } | 173 | } |
| 174 | 174 | ||
| 175 | async fn connect(&self, relay_url: &Url) -> Result<()> { | 175 | async fn connect(&self, relay_url: &RelayUrl) -> Result<()> { |
| 176 | self.client | 176 | self.client |
| 177 | .add_relay(relay_url) | 177 | .add_relay(relay_url) |
| 178 | .await | 178 | .await |
| @@ -244,7 +244,7 @@ impl Connect for Client { | |||
| 244 | ) -> Result<Vec<nostr::Event>> { | 244 | ) -> Result<Vec<nostr::Event>> { |
| 245 | let (relay_results, _) = self | 245 | let (relay_results, _) = self |
| 246 | .get_events_per_relay( | 246 | .get_events_per_relay( |
| 247 | relays.iter().map(|r| Url::parse(r).unwrap()).collect(), | 247 | relays.iter().map(|r| RelayUrl::parse(r).unwrap()).collect(), |
| 248 | filters, | 248 | filters, |
| 249 | MultiProgress::new(), | 249 | MultiProgress::new(), |
| 250 | ) | 250 | ) |
| @@ -254,7 +254,7 @@ impl Connect for Client { | |||
| 254 | 254 | ||
| 255 | async fn get_events_per_relay( | 255 | async fn get_events_per_relay( |
| 256 | &self, | 256 | &self, |
| 257 | relays: Vec<Url>, | 257 | relays: Vec<RelayUrl>, |
| 258 | filters: Vec<nostr::Filter>, | 258 | filters: Vec<nostr::Filter>, |
| 259 | progress_reporter: MultiProgress, | 259 | progress_reporter: MultiProgress, |
| 260 | ) -> Result<(Vec<Result<Vec<nostr::Event>>>, MultiProgress)> { | 260 | ) -> Result<(Vec<Result<Vec<nostr::Event>>>, MultiProgress)> { |
| @@ -335,8 +335,8 @@ impl Connect for Client { | |||
| 335 | let fallback_relays = &self | 335 | let fallback_relays = &self |
| 336 | .fallback_relays | 336 | .fallback_relays |
| 337 | .iter() | 337 | .iter() |
| 338 | .filter_map(|r| Url::parse(r).ok()) | 338 | .filter_map(|r| RelayUrl::parse(r).ok()) |
| 339 | .collect::<HashSet<Url>>(); | 339 | .collect::<HashSet<RelayUrl>>(); |
| 340 | 340 | ||
| 341 | let mut request = create_relays_request( | 341 | let mut request = create_relays_request( |
| 342 | git_repo_path, | 342 | git_repo_path, |
| @@ -359,17 +359,17 @@ impl Connect for Client { | |||
| 359 | // don't look for events on blaster | 359 | // don't look for events on blaster |
| 360 | .filter(|&r| !r.as_str().contains("nostr.mutinywallet.com")) | 360 | .filter(|&r| !r.as_str().contains("nostr.mutinywallet.com")) |
| 361 | .cloned() | 361 | .cloned() |
| 362 | .collect::<HashSet<Url>>() | 362 | .collect::<HashSet<RelayUrl>>() |
| 363 | .difference(&processed_relays) | 363 | .difference(&processed_relays) |
| 364 | .cloned() | 364 | .cloned() |
| 365 | .collect::<HashSet<Url>>(); | 365 | .collect::<HashSet<RelayUrl>>(); |
| 366 | if relays.is_empty() { | 366 | if relays.is_empty() { |
| 367 | break; | 367 | break; |
| 368 | } | 368 | } |
| 369 | let profile_relays_only = request | 369 | let profile_relays_only = request |
| 370 | .user_relays_for_profiles | 370 | .user_relays_for_profiles |
| 371 | .difference(&request.repo_relays) | 371 | .difference(&request.repo_relays) |
| 372 | .collect::<HashSet<&Url>>(); | 372 | .collect::<HashSet<&RelayUrl>>(); |
| 373 | for relay in &request.repo_relays { | 373 | for relay in &request.repo_relays { |
| 374 | self.client | 374 | self.client |
| 375 | .add_relay(relay.as_str()) | 375 | .add_relay(relay.as_str()) |
| @@ -469,11 +469,7 @@ impl Connect for Client { | |||
| 469 | processed_relays.extend(relays.clone()); | 469 | processed_relays.extend(relays.clone()); |
| 470 | 470 | ||
| 471 | if let Ok(repo_ref) = get_repo_ref_from_cache(git_repo_path, repo_coordinates).await { | 471 | if let Ok(repo_ref) = get_repo_ref_from_cache(git_repo_path, repo_coordinates).await { |
| 472 | request.repo_relays = repo_ref | 472 | request.repo_relays = repo_ref.relays.iter().cloned().collect(); |
| 473 | .relays | ||
| 474 | .iter() | ||
| 475 | .filter_map(|r| Url::parse(r).ok()) | ||
| 476 | .collect(); | ||
| 477 | } | 473 | } |
| 478 | 474 | ||
| 479 | request.user_relays_for_profiles = { | 475 | request.user_relays_for_profiles = { |
| @@ -486,7 +482,7 @@ impl Connect for Client { | |||
| 486 | { | 482 | { |
| 487 | if let Ok(user_ref) = get_user_ref_from_cache(git_repo_path, user).await { | 483 | if let Ok(user_ref) = get_user_ref_from_cache(git_repo_path, user).await { |
| 488 | for r in user_ref.relays.write() { | 484 | for r in user_ref.relays.write() { |
| 489 | if let Ok(url) = Url::parse(&r) { | 485 | if let Ok(url) = RelayUrl::parse(&r) { |
| 490 | set.insert(url); | 486 | set.insert(url); |
| 491 | } | 487 | } |
| 492 | } | 488 | } |
| @@ -905,7 +901,7 @@ async fn create_relays_request( | |||
| 905 | git_repo_path: Option<&Path>, | 901 | git_repo_path: Option<&Path>, |
| 906 | repo_coordinates: &HashSet<Coordinate>, | 902 | repo_coordinates: &HashSet<Coordinate>, |
| 907 | user_profiles: &HashSet<PublicKey>, | 903 | user_profiles: &HashSet<PublicKey>, |
| 908 | fallback_relays: HashSet<Url>, | 904 | fallback_relays: HashSet<RelayUrl>, |
| 909 | ) -> Result<FetchRequest> { | 905 | ) -> Result<FetchRequest> { |
| 910 | let repo_ref = get_repo_ref_from_cache(git_repo_path, repo_coordinates).await; | 906 | let repo_ref = get_repo_ref_from_cache(git_repo_path, repo_coordinates).await; |
| 911 | 907 | ||
| @@ -1026,7 +1022,7 @@ async fn create_relays_request( | |||
| 1026 | { | 1022 | { |
| 1027 | if let Ok(user_ref) = get_user_ref_from_cache(git_repo_path, user).await { | 1023 | if let Ok(user_ref) = get_user_ref_from_cache(git_repo_path, user).await { |
| 1028 | for r in user_ref.relays.write() { | 1024 | for r in user_ref.relays.write() { |
| 1029 | if let Ok(url) = Url::parse(&r) { | 1025 | if let Ok(url) = RelayUrl::parse(&r) { |
| 1030 | set.insert(url); | 1026 | set.insert(url); |
| 1031 | } | 1027 | } |
| 1032 | } | 1028 | } |
| @@ -1068,17 +1064,13 @@ async fn create_relays_request( | |||
| 1068 | let relays = { | 1064 | let relays = { |
| 1069 | let mut relays = fallback_relays; | 1065 | let mut relays = fallback_relays; |
| 1070 | if let Ok(repo_ref) = &repo_ref { | 1066 | if let Ok(repo_ref) = &repo_ref { |
| 1071 | for r in &repo_ref.relays { | 1067 | for r in repo_ref.relays.clone() { |
| 1072 | if let Ok(url) = Url::parse(r) { | 1068 | relays.insert(r); |
| 1073 | relays.insert(url); | ||
| 1074 | } | ||
| 1075 | } | 1069 | } |
| 1076 | } | 1070 | } |
| 1077 | for c in repo_coordinates { | 1071 | for c in repo_coordinates { |
| 1078 | for r in &c.relays { | 1072 | for r in &c.relays { |
| 1079 | if let Ok(url) = Url::parse(r) { | 1073 | relays.insert(r.clone()); |
| 1080 | relays.insert(url); | ||
| 1081 | } | ||
| 1082 | } | 1074 | } |
| 1083 | } | 1075 | } |
| 1084 | relays | 1076 | relays |
| @@ -1500,8 +1492,8 @@ impl Display for FetchReport { | |||
| 1500 | 1492 | ||
| 1501 | #[derive(Default, Clone)] | 1493 | #[derive(Default, Clone)] |
| 1502 | pub struct FetchRequest { | 1494 | pub struct FetchRequest { |
| 1503 | repo_relays: HashSet<Url>, | 1495 | repo_relays: HashSet<RelayUrl>, |
| 1504 | selected_relay: Option<Url>, | 1496 | selected_relay: Option<RelayUrl>, |
| 1505 | relay_column_width: usize, | 1497 | relay_column_width: usize, |
| 1506 | repo_coordinates_without_relays: Vec<(Coordinate, Option<Timestamp>)>, | 1498 | repo_coordinates_without_relays: Vec<(Coordinate, Option<Timestamp>)>, |
| 1507 | state: Option<(Timestamp, EventId)>, | 1499 | state: Option<(Timestamp, EventId)>, |
| @@ -1510,7 +1502,7 @@ pub struct FetchRequest { | |||
| 1510 | missing_contributor_profiles: HashSet<PublicKey>, | 1502 | missing_contributor_profiles: HashSet<PublicKey>, |
| 1511 | existing_events: HashSet<EventId>, | 1503 | existing_events: HashSet<EventId>, |
| 1512 | profiles_to_fetch_from_user_relays: HashMap<PublicKey, (Timestamp, Timestamp)>, | 1504 | profiles_to_fetch_from_user_relays: HashMap<PublicKey, (Timestamp, Timestamp)>, |
| 1513 | user_relays_for_profiles: HashSet<Url>, | 1505 | user_relays_for_profiles: HashSet<RelayUrl>, |
| 1514 | } | 1506 | } |
| 1515 | 1507 | ||
| 1516 | pub async fn fetching_with_report( | 1508 | pub async fn fetching_with_report( |
| @@ -1646,7 +1638,7 @@ pub async fn send_events( | |||
| 1646 | git_repo_path: Option<&Path>, | 1638 | git_repo_path: Option<&Path>, |
| 1647 | events: Vec<nostr::Event>, | 1639 | events: Vec<nostr::Event>, |
| 1648 | my_write_relays: Vec<String>, | 1640 | my_write_relays: Vec<String>, |
| 1649 | repo_read_relays: Vec<String>, | 1641 | repo_read_relays: Vec<RelayUrl>, |
| 1650 | animate: bool, | 1642 | animate: bool, |
| 1651 | silent: bool, | 1643 | silent: bool, |
| 1652 | ) -> Result<()> { | 1644 | ) -> Result<()> { |
| @@ -1659,7 +1651,12 @@ pub async fn send_events( | |||
| 1659 | }, | 1651 | }, |
| 1660 | ] | 1652 | ] |
| 1661 | .concat(); | 1653 | .concat(); |
| 1662 | let mut relays: Vec<&String> = vec![]; | 1654 | let mut relays: Vec<&str> = vec![]; |
| 1655 | |||
| 1656 | let repo_read_relays = repo_read_relays | ||
| 1657 | .iter() | ||
| 1658 | .map(|r| r.to_string()) | ||
| 1659 | .collect::<Vec<String>>(); | ||
| 1663 | 1660 | ||
| 1664 | let all = &[ | 1661 | let all = &[ |
| 1665 | repo_read_relays.clone(), | 1662 | repo_read_relays.clone(), |
| @@ -1722,7 +1719,7 @@ pub async fn send_events( | |||
| 1722 | 1719 | ||
| 1723 | #[allow(clippy::borrow_deref_ref)] | 1720 | #[allow(clippy::borrow_deref_ref)] |
| 1724 | join_all(relays.iter().map(|&relay| async { | 1721 | join_all(relays.iter().map(|&relay| async { |
| 1725 | let relay_clean = remove_trailing_slash(&*relay); | 1722 | let relay_clean = remove_trailing_slash(relay); |
| 1726 | let details = format!( | 1723 | let details = format!( |
| 1727 | "{}{}{} {}", | 1724 | "{}{}{} {}", |
| 1728 | if my_write_relays | 1725 | if my_write_relays |
| @@ -1735,7 +1732,7 @@ pub async fn send_events( | |||
| 1735 | }, | 1732 | }, |
| 1736 | if repo_read_relays | 1733 | if repo_read_relays |
| 1737 | .iter() | 1734 | .iter() |
| 1738 | .any(|r| relay_clean.eq(&remove_trailing_slash(r))) | 1735 | .any(|r| relay_clean.eq(&remove_trailing_slash(&r.to_string()))) |
| 1739 | { | 1736 | { |
| 1740 | " [repo-relay]" | 1737 | " [repo-relay]" |
| 1741 | } else { | 1738 | } else { |
| @@ -1763,7 +1760,7 @@ pub async fn send_events( | |||
| 1763 | let mut failed = false; | 1760 | let mut failed = false; |
| 1764 | for event in &events { | 1761 | for event in &events { |
| 1765 | match client | 1762 | match client |
| 1766 | .send_event_to(git_repo_path, relay.as_str(), event.clone()) | 1763 | .send_event_to(git_repo_path, relay, event.clone()) |
| 1767 | .await | 1764 | .await |
| 1768 | { | 1765 | { |
| 1769 | Ok(_) => pb.inc(1), | 1766 | Ok(_) => pb.inc(1), |
| @@ -1793,8 +1790,8 @@ pub async fn send_events( | |||
| 1793 | Ok(()) | 1790 | Ok(()) |
| 1794 | } | 1791 | } |
| 1795 | 1792 | ||
| 1796 | fn remove_trailing_slash(s: &String) -> String { | 1793 | fn remove_trailing_slash(s: &str) -> String { |
| 1797 | match s.as_str().strip_suffix('/') { | 1794 | match s.strip_suffix('/') { |
| 1798 | Some(s) => s, | 1795 | Some(s) => s, |
| 1799 | None => s, | 1796 | None => s, |
| 1800 | } | 1797 | } |