diff --git a/crates/gitnow/src/commands/root.rs b/crates/gitnow/src/commands/root.rs index 784af27..472e008 100644 --- a/crates/gitnow/src/commands/root.rs +++ b/crates/gitnow/src/commands/root.rs @@ -3,6 +3,7 @@ use crate::{ git_provider::{ gitea::GiteaProviderApp, github::GitHubProviderApp, GitProvider, VecRepositoryExt, }, + projects_list::ProjectsListApp, }; #[derive(Debug, Clone)] @@ -19,38 +20,9 @@ impl RootCommand { pub async fn execute(&mut self) -> anyhow::Result<()> { tracing::debug!("executing"); + let repositories = self.app.projects_list().get_projects().await?; + //let github_provider = self.app.github_provider(); - let gitea_provider = self.app.gitea_provider(); - - let mut repositories = Vec::new(); - for gitea in self.app.config.providers.gitea.iter() { - if let Some(user) = &gitea.current_user { - let mut repos = gitea_provider - .list_repositories_for_current_user( - user, - &gitea.url, - gitea.access_token.as_ref(), - ) - .await?; - - repositories.append(&mut repos); - } - - for gitea_user in gitea.users.iter() { - let mut repos = gitea_provider - .list_repositories_for_user( - gitea_user.into(), - &gitea.url, - gitea.access_token.as_ref(), - ) - .await?; - - repositories.append(&mut repos); - } - } - - repositories.collect_unique(); - for repo in &repositories { tracing::info!("repo: {}", repo.to_rel_path().display()); } diff --git a/crates/gitnow/src/main.rs b/crates/gitnow/src/main.rs index e27747a..e25a1b6 100644 --- a/crates/gitnow/src/main.rs +++ b/crates/gitnow/src/main.rs @@ -9,6 +9,7 @@ mod app; mod commands; mod config; mod git_provider; +mod projects_list; #[derive(Parser)] #[command(author, version, about, long_about = Some("Navigate git projects at the speed of thought"))] diff --git a/crates/gitnow/src/projects_list.rs b/crates/gitnow/src/projects_list.rs new file mode 100644 index 0000000..0f1b5c7 --- /dev/null +++ b/crates/gitnow/src/projects_list.rs @@ -0,0 +1,59 @@ +use crate::{ + app::App, + git_provider::{gitea::GiteaProviderApp, Repository, VecRepositoryExt}, +}; + +pub struct ProjectsList { + app: &'static App, +} + +impl ProjectsList { + pub fn new(app: &'static App) -> Self { + Self { app } + } + + pub async fn get_projects(&self) -> anyhow::Result> { + let gitea_provider = self.app.gitea_provider(); + + let mut repositories = Vec::new(); + for gitea in self.app.config.providers.gitea.iter() { + if let Some(user) = &gitea.current_user { + let mut repos = gitea_provider + .list_repositories_for_current_user( + user, + &gitea.url, + gitea.access_token.as_ref(), + ) + .await?; + + repositories.append(&mut repos); + } + + for gitea_user in gitea.users.iter() { + let mut repos = gitea_provider + .list_repositories_for_user( + gitea_user.into(), + &gitea.url, + gitea.access_token.as_ref(), + ) + .await?; + + repositories.append(&mut repos); + } + } + + repositories.collect_unique(); + + Ok(repositories) + } +} + +pub trait ProjectsListApp { + fn projects_list(&self) -> ProjectsList; +} + +impl ProjectsListApp for &'static App { + fn projects_list(&self) -> ProjectsList { + ProjectsList::new(self) + } +}