diff options
| author | DanConwayDev <DanConwayDev@protonmail.com> | 2025-07-23 13:53:18 +0100 |
|---|---|---|
| committer | DanConwayDev <DanConwayDev@protonmail.com> | 2025-07-23 13:53:18 +0100 |
| commit | dd5300b301292c3944aad4dcdecf4802307c7ea2 (patch) | |
| tree | f7e8ba79bd97810da039da9b030e72067ceeee03 | |
| parent | f7299cc5fd2276db8d9bb7778c34ddbe5b3a8e48 (diff) | |
refactor: add fallback grasp servers to client
so that they can be used as part of push and send
| -rw-r--r-- | src/bin/ngit/sub_commands/init.rs | 11 | ||||
| -rw-r--r-- | src/lib/client.rs | 26 |
2 files changed, 27 insertions, 10 deletions
diff --git a/src/bin/ngit/sub_commands/init.rs b/src/bin/ngit/sub_commands/init.rs index 86d7f8a..52e43e9 100644 --- a/src/bin/ngit/sub_commands/init.rs +++ b/src/bin/ngit/sub_commands/init.rs | |||
| @@ -252,14 +252,7 @@ pub async fn launch(cli_args: &Cli, args: &SubCommandArgs) -> Result<()> { | |||
| 252 | args.blossoms.clone() | 252 | args.blossoms.clone() |
| 253 | }; | 253 | }; |
| 254 | 254 | ||
| 255 | let fallback_grasp_servers = | 255 | let fallback_grasp_servers = client.get_fallback_grasp_servers(); |
| 256 | if let Ok(Some(s)) = git_repo.get_git_config_item("nostr.grasp-default-set", None) { | ||
| 257 | s.split(';') | ||
| 258 | .filter_map(|url| normalize_grasp_server_url(url).ok()) // Attempt to parse and filter out errors | ||
| 259 | .collect() | ||
| 260 | } else { | ||
| 261 | vec!["relay.ngit.dev".to_string(), "gitnostr.com".to_string()] | ||
| 262 | }; | ||
| 263 | 256 | ||
| 264 | let selected_grasp_servers = if has_server_and_relay_flags { | 257 | let selected_grasp_servers = if has_server_and_relay_flags { |
| 265 | // ignore so a script running `ngit init` can contiue without prompts | 258 | // ignore so a script running `ngit init` can contiue without prompts |
| @@ -275,7 +268,7 @@ pub async fn launch(cli_args: &Cli, args: &SubCommandArgs) -> Result<()> { | |||
| 275 | let empty = options.is_empty(); | 268 | let empty = options.is_empty(); |
| 276 | for fallback in fallback_grasp_servers { | 269 | for fallback in fallback_grasp_servers { |
| 277 | // Check if any option contains the fallback as a substring | 270 | // Check if any option contains the fallback as a substring |
| 278 | if !options.iter().any(|option| option.contains(&fallback)) { | 271 | if !options.iter().any(|option| option.contains(fallback)) { |
| 279 | options.push(fallback.clone()); // Add fallback if not found | 272 | options.push(fallback.clone()); // Add fallback if not found |
| 280 | selections.push(empty); // mark as selected if no existing ngit relay otherwise not | 273 | selections.push(empty); // mark as selected if no existing ngit relay otherwise not |
| 281 | } | 274 | } |
diff --git a/src/lib/client.rs b/src/lib/client.rs index 3fe2b57..2bdea42 100644 --- a/src/lib/client.rs +++ b/src/lib/client.rs | |||
| @@ -53,7 +53,7 @@ use crate::{ | |||
| 53 | status_kinds, | 53 | status_kinds, |
| 54 | }, | 54 | }, |
| 55 | login::{get_likely_logged_in_user, user::get_user_ref_from_cache}, | 55 | login::{get_likely_logged_in_user, user::get_user_ref_from_cache}, |
| 56 | repo_ref::RepoRef, | 56 | repo_ref::{RepoRef, normalize_grasp_server_url}, |
| 57 | repo_state::RepoState, | 57 | repo_state::RepoState, |
| 58 | }; | 58 | }; |
| 59 | 59 | ||
| @@ -64,6 +64,7 @@ pub struct Client { | |||
| 64 | more_fallback_relays: Vec<String>, | 64 | more_fallback_relays: Vec<String>, |
| 65 | blaster_relays: Vec<String>, | 65 | blaster_relays: Vec<String>, |
| 66 | fallback_signer_relays: Vec<String>, | 66 | fallback_signer_relays: Vec<String>, |
| 67 | fallback_grasp_servers: Vec<String>, | ||
| 67 | relays_not_to_retry: Arc<RwLock<HashMap<RelayUrl, String>>>, | 68 | relays_not_to_retry: Arc<RwLock<HashMap<RelayUrl, String>>>, |
| 68 | } | 69 | } |
| 69 | 70 | ||
| @@ -101,6 +102,7 @@ pub trait Connect { | |||
| 101 | fn get_more_fallback_relays(&self) -> &Vec<String>; | 102 | fn get_more_fallback_relays(&self) -> &Vec<String>; |
| 102 | fn get_blaster_relays(&self) -> &Vec<String>; | 103 | fn get_blaster_relays(&self) -> &Vec<String>; |
| 103 | fn get_fallback_signer_relays(&self) -> &Vec<String>; | 104 | fn get_fallback_signer_relays(&self) -> &Vec<String>; |
| 105 | fn get_fallback_grasp_servers(&self) -> &Vec<String>; | ||
| 104 | async fn send_event_to<'a>( | 106 | async fn send_event_to<'a>( |
| 105 | &self, | 107 | &self, |
| 106 | git_repo_path: Option<&'a Path>, | 108 | git_repo_path: Option<&'a Path>, |
| @@ -154,6 +156,7 @@ impl Connect for Client { | |||
| 154 | more_fallback_relays: opts.more_fallback_relays, | 156 | more_fallback_relays: opts.more_fallback_relays, |
| 155 | blaster_relays: opts.blaster_relays, | 157 | blaster_relays: opts.blaster_relays, |
| 156 | fallback_signer_relays: opts.fallback_signer_relays, | 158 | fallback_signer_relays: opts.fallback_signer_relays, |
| 159 | fallback_grasp_servers: opts.fallback_grasp_servers, | ||
| 157 | relays_not_to_retry: Arc::new(RwLock::new(HashMap::new())), | 160 | relays_not_to_retry: Arc::new(RwLock::new(HashMap::new())), |
| 158 | } | 161 | } |
| 159 | } | 162 | } |
| @@ -208,6 +211,10 @@ impl Connect for Client { | |||
| 208 | &self.fallback_signer_relays | 211 | &self.fallback_signer_relays |
| 209 | } | 212 | } |
| 210 | 213 | ||
| 214 | fn get_fallback_grasp_servers(&self) -> &Vec<String> { | ||
| 215 | &self.fallback_grasp_servers | ||
| 216 | } | ||
| 217 | |||
| 211 | async fn send_event_to<'a>( | 218 | async fn send_event_to<'a>( |
| 212 | &self, | 219 | &self, |
| 213 | git_repo_path: Option<&'a Path>, | 220 | git_repo_path: Option<&'a Path>, |
| @@ -692,6 +699,7 @@ pub struct Params { | |||
| 692 | pub more_fallback_relays: Vec<String>, | 699 | pub more_fallback_relays: Vec<String>, |
| 693 | pub blaster_relays: Vec<String>, | 700 | pub blaster_relays: Vec<String>, |
| 694 | pub fallback_signer_relays: Vec<String>, | 701 | pub fallback_signer_relays: Vec<String>, |
| 702 | pub fallback_grasp_servers: Vec<String>, | ||
| 695 | } | 703 | } |
| 696 | 704 | ||
| 697 | impl Default for Params { | 705 | impl Default for Params { |
| @@ -734,6 +742,11 @@ impl Default for Params { | |||
| 734 | } else { | 742 | } else { |
| 735 | vec!["wss://relay.nsec.app".to_string()] | 743 | vec!["wss://relay.nsec.app".to_string()] |
| 736 | }, | 744 | }, |
| 745 | fallback_grasp_servers: if std::env::var("NGITTEST").is_ok() { | ||
| 746 | vec![] | ||
| 747 | } else { | ||
| 748 | vec!["relay.ngit.dev".to_string(), "gitnostr.com".to_string()] | ||
| 749 | }, | ||
| 737 | } | 750 | } |
| 738 | } | 751 | } |
| 739 | } | 752 | } |
| @@ -773,6 +786,17 @@ impl Params { | |||
| 773 | .map(|relay_url| relay_url.to_string()) // Convert RelayUrl back to String | 786 | .map(|relay_url| relay_url.to_string()) // Convert RelayUrl back to String |
| 774 | .collect(); | 787 | .collect(); |
| 775 | } | 788 | } |
| 789 | if let Ok(Some(grasp_default_servers)) = | ||
| 790 | get_git_config_item(git_repo, "nostr.grasp-default-set") | ||
| 791 | { | ||
| 792 | let new_default_grasp_servers: Vec<String> = grasp_default_servers | ||
| 793 | .split(';') | ||
| 794 | .filter_map(|url| normalize_grasp_server_url(url).ok()) // Attempt to parse and filter out errors | ||
| 795 | .collect(); | ||
| 796 | if !new_default_grasp_servers.is_empty() { | ||
| 797 | params.fallback_grasp_servers = new_default_grasp_servers; | ||
| 798 | } | ||
| 799 | } | ||
| 776 | } | 800 | } |
| 777 | params | 801 | params |
| 778 | } | 802 | } |