upleb.uk

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

summaryrefslogtreecommitdiff
path: root/src/sub_commands/prs
diff options
context:
space:
mode:
authorDanConwayDev <DanConwayDev@protonmail.com>2023-11-01 00:00:00 +0000
committerDanConwayDev <DanConwayDev@protonmail.com>2023-11-01 00:00:00 +0000
commit1b740dd135aafb52b94b710b3ae24e4aaaa99632 (patch)
tree986e4a3785e7899552cc616d46f0c3e3f480a992 /src/sub_commands/prs
parent47a5075b6385a8c0d28bae04c5862d93d0a6ffa6 (diff)
feat(prs-create) send to user relays
reuse client across login and send events
Diffstat (limited to 'src/sub_commands/prs')
-rw-r--r--src/sub_commands/prs/create.rs55
1 files changed, 19 insertions, 36 deletions
diff --git a/src/sub_commands/prs/create.rs b/src/sub_commands/prs/create.rs
index 5986235..aad80f4 100644
--- a/src/sub_commands/prs/create.rs
+++ b/src/sub_commands/prs/create.rs
@@ -1,14 +1,17 @@
1use std::time::Duration; 1use std::time::Duration;
2 2
3use anyhow::{bail, Context, Result}; 3use anyhow::{bail, Context, Result};
4use console::Term;
5use futures::future::join_all; 4use futures::future::join_all;
6use indicatif::{MultiProgress, ProgressBar, ProgressStyle}; 5use indicatif::{MultiProgress, ProgressBar, ProgressStyle};
7use nostr::{prelude::sha1::Hash as Sha1Hash, EventBuilder, Marker, Tag, TagKind}; 6use nostr::{prelude::sha1::Hash as Sha1Hash, EventBuilder, Marker, Tag, TagKind};
8 7
8#[cfg(not(test))]
9use crate::client::Client;
10#[cfg(test)]
11use crate::client::MockConnect;
9use crate::{ 12use crate::{
10 cli_interactor::{Interactor, InteractorPrompt, PromptConfirmParms, PromptInputParms}, 13 cli_interactor::{Interactor, InteractorPrompt, PromptConfirmParms, PromptInputParms},
11 client::{Client, Connect, Params as ClientParams}, 14 client::Connect,
12 git::{Repo, RepoActions}, 15 git::{Repo, RepoActions},
13 login, Cli, 16 login, Cli,
14}; 17};
@@ -84,67 +87,47 @@ pub async fn launch(
84 .input(PromptInputParms::default().with_prompt("description (Optional)"))?, 87 .input(PromptInputParms::default().with_prompt("description (Optional)"))?,
85 }; 88 };
86 89
87 // create PR event 90 #[cfg(not(test))]
91 let mut client = Client::default();
92 #[cfg(test)]
93 let mut client = <MockConnect as std::default::Default>::default();
94
95 let (keys, user_ref) = login::launch(&cli_args.nsec, &cli_args.password, Some(&client)).await?;
88 96
89 // TODO add client here 97 client.set_keys(&keys).await;
90 let keys = login::launch(&cli_args.nsec, &cli_args.password, None).await?;
91 98
92 let events = 99 let events =
93 generate_pr_and_patch_events(&title, &description, &to_branch, &git_repo, &ahead, &keys)?; 100 generate_pr_and_patch_events(&title, &description, &to_branch, &git_repo, &ahead, &keys)?;
94 101
95 let my_write_relays: Vec<String> = vec![ 102 // TODO: get relays from repo event
96 "ws://localhost:8051".to_string(),
97 "ws://localhost:8052".to_string(),
98 ];
99
100 let repo_read_relays: Vec<String> = vec![ 103 let repo_read_relays: Vec<String> = vec![
101 "ws://localhost:8051".to_string(), 104 "ws://localhost:8055".to_string(),
102 "ws://localhost:8053".to_string(), 105 "ws://localhost:8056".to_string(),
103 ]; 106 ];
104 107
105 send_events( 108 send_events(
109 &client,
106 events, 110 events,
107 keys, 111 user_ref.relays.write(),
108 my_write_relays,
109 repo_read_relays, 112 repo_read_relays,
110 !cli_args.disable_cli_spinners, 113 !cli_args.disable_cli_spinners,
111 ) 114 )
112 .await?; 115 .await?;
113 // TODO check if there is already a similarly named PR 116 // TODO check if there is already a similarly named PR
114 117
115 // println!("failures:");
116 // println!("ws://relay.anon.io Error: Payment Required");
117
118 // should we have a relays in Repository event?
119 // yes
120 //
121
122 // TODO connect to relays and post
123
124 Ok(()) 118 Ok(())
125} 119}
126 120
127async fn send_events( 121async fn send_events(
122 #[cfg(test)] client: &crate::client::MockConnect,
123 #[cfg(not(test))] client: &Client,
128 events: Vec<nostr::Event>, 124 events: Vec<nostr::Event>,
129 keys: nostr::Keys,
130 my_write_relays: Vec<String>, 125 my_write_relays: Vec<String>,
131 repo_read_relays: Vec<String>, 126 repo_read_relays: Vec<String>,
132 animate: bool, 127 animate: bool,
133) -> Result<()> { 128) -> Result<()> {
134 let (_, _, _, all) = unique_and_duplicate_all(&my_write_relays, &repo_read_relays); 129 let (_, _, _, all) = unique_and_duplicate_all(&my_write_relays, &repo_read_relays);
135 130
136 let client = Client::new(
137 ClientParams::default()
138 .with_keys(keys)
139 // .with_fallback_relays(vec!["ws://localhost:8080".to_string()]),
140 .with_fallback_relays(all.iter().map(std::string::ToString::to_string).collect()),
141 );
142
143 let term = Term::stdout();
144 term.write_line("connecting to relays...")?;
145 client.connect().await?;
146 term.clear_last_lines(1)?;
147
148 println!( 131 println!(
149 "posting 1 pull request with {} commits...", 132 "posting 1 pull request with {} commits...",
150 events.len() - 1 133 events.len() - 1