diff --git a/src/tags.rs b/src/tags.rs index 47a1a09..7418254 100644 --- a/src/tags.rs +++ b/src/tags.rs @@ -29,6 +29,7 @@ pub struct Tags { pub results: Vec, } +#[derive(Debug)] pub enum Error { InvalidCharacter(char), Fetching(String), @@ -37,13 +38,9 @@ pub enum Error { impl Tags { pub fn new(repo: String) -> Result { + // let repo = Self::check_repo(repo)?; let request = format!("https://hub.docker.com/v2/repositories/{}/tags", repo); - //check for right set of characters - if request.bytes().any(|c| !c.is_ascii()) { - return Err(Error::InvalidCharacter('a')); - } - //get response let res = match reqwest::blocking::get(request) { Ok(result) => result, @@ -60,14 +57,18 @@ impl Tags { Ok(tags) } - pub fn get_images(&self) -> &Vec { - &self.results - } -} + pub fn check_repo(mut name: String) -> Result { + //check for right set of characters + if name.bytes().any(|c| !c.is_ascii()) { + return Err(Error::InvalidCharacter('a')); + } -impl Images { - pub fn get_name(&self) -> &str { - &self.tag_name + //check if need to inject "library" of given repo + let regex = regex::Regex::new(r".*/.*").unwrap(); + if !regex.is_match(&name) { + name.insert_str(0, "library/"); + } + Ok(name) } } diff --git a/src/ui.rs b/src/ui.rs index 1db2a70..93416fd 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -93,10 +93,7 @@ impl Ui { ui.tags = tag_list::TagList::with_repo(ui.repo.get()); } State::SelectTag => { - let mut repo = match ui.services.extract_repo() { - Err(_) => continue, - Ok(s) => s, - }; + let mut repo = ui.repo.get(); let tag = match ui.tags.get_selected() { Err(_) => continue, Ok(tag) => tag, @@ -136,8 +133,11 @@ impl Ui { match ui.services.extract_repo() { Err(_) => ui.tags = tag_list::TagList::with_status("No image found"), Ok(s) => { - ui.repo.set(s); - ui.tags = tag_list::TagList::with_repo(ui.repo.get()); + let repo = match crate::tags::Tags::check_repo(s) { + Err(_) => continue, + Ok(s) => s, + }; + ui.repo.set(repo); } } }