upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDanConwayDev <DanConwayDev@protonmail.com>2025-07-23 13:53:18 +0100
committerDanConwayDev <DanConwayDev@protonmail.com>2025-07-23 13:53:18 +0100
commitdd5300b301292c3944aad4dcdecf4802307c7ea2 (patch)
treef7e8ba79bd97810da039da9b030e72067ceeee03 /src
parentf7299cc5fd2276db8d9bb7778c34ddbe5b3a8e48 (diff)
refactor: add fallback grasp servers to client
so that they can be used as part of push and send
Diffstat (limited to 'src')
-rw-r--r--src/bin/ngit/sub_commands/init.rs11
-rw-r--r--src/lib/client.rs26
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
697impl Default for Params { 705impl 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 }