diff options
| author | DanConwayDev <DanConwayDev@protonmail.com> | 2023-05-21 11:14:47 +0000 |
|---|---|---|
| committer | DanConwayDev <DanConwayDev@protonmail.com> | 2023-05-21 11:14:47 +0000 |
| commit | 0067804cc00e94ce2b7043e67f9ff50968525479 (patch) | |
| tree | 2accdc6d4e9b73df4f20499238ec24f24a52a1b8 /src/funcs/find_select_recent_repos.rs | |
| parent | 5c5feaa732363e32e2a980a887fa42b4394b1a5e (diff) | |
v0.0.1-alpha funcs
Diffstat (limited to 'src/funcs/find_select_recent_repos.rs')
| -rw-r--r-- | src/funcs/find_select_recent_repos.rs | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/funcs/find_select_recent_repos.rs b/src/funcs/find_select_recent_repos.rs new file mode 100644 index 0000000..79054c0 --- /dev/null +++ b/src/funcs/find_select_recent_repos.rs | |||
| @@ -0,0 +1,52 @@ | |||
| 1 | use dialoguer::Select; | ||
| 2 | use nostr::{Event, EventId, Filter}; | ||
| 3 | use nostr_sdk::blocking::Client; | ||
| 4 | |||
| 5 | use crate::{kind::Kind, repos::repo::Repo}; | ||
| 6 | |||
| 7 | pub fn find_select_recent_repos( | ||
| 8 | client: &Client, | ||
| 9 | ) -> EventId { | ||
| 10 | |||
| 11 | let mut repo_events: Vec<Event> = client.get_events_of( | ||
| 12 | vec![ | ||
| 13 | Filter::new() | ||
| 14 | .hashtag("ngit-format-0.0.1") | ||
| 15 | .kind( | ||
| 16 | Kind::InitializeRepo.into_sdk_custom_kind(), | ||
| 17 | ) | ||
| 18 | .limit(10), | ||
| 19 | ], | ||
| 20 | None, | ||
| 21 | ) | ||
| 22 | .expect("get_events_of to not return an error"); | ||
| 23 | |||
| 24 | repo_events.sort(); | ||
| 25 | repo_events.dedup(); | ||
| 26 | |||
| 27 | if repo_events.is_empty() { | ||
| 28 | panic!("could not find any repositories. Create one with ngit init?") | ||
| 29 | } | ||
| 30 | |||
| 31 | let repos: Vec<Repo> = repo_events.iter().map(|r| | ||
| 32 | Repo::new_from_event(r.clone()) | ||
| 33 | .expect("repo to be well formed event") | ||
| 34 | ).collect(); | ||
| 35 | let repo_names: Vec<String> = repos.iter().map(|r| | ||
| 36 | match r.name.clone() { | ||
| 37 | None => "(untitled)".to_string(), | ||
| 38 | Some(name) => name, | ||
| 39 | } | ||
| 40 | ).collect(); | ||
| 41 | |||
| 42 | // select pr to review | ||
| 43 | let i = Select::new() | ||
| 44 | .with_prompt("clone for a repository on selected relays") | ||
| 45 | .items(&repo_names) | ||
| 46 | .report(false) | ||
| 47 | .interact() | ||
| 48 | .unwrap(); | ||
| 49 | // display nevent | ||
| 50 | println!("selected repo: {} {}",repo_names[i], repos[i].nevent()); | ||
| 51 | repos[i].id | ||
| 52 | } \ No newline at end of file | ||