diff --git a/src/repository.rs b/src/repository.rs index d40e87d..8316c75 100644 --- a/src/repository.rs +++ b/src/repository.rs @@ -8,25 +8,31 @@ pub fn find_package_in_repositories(package: &str, installed: Option) -> Op let mut hits: Vec = vec!(); let client = reqwest::Client::new(); let repo_file = File::open("/var/gaypack/repositories.list").expect("Failed to open repository list"); - let mut candidates: HashMap = HashMap::new(); + let mut candidates: HashMap = HashMap::new(); for repository in std::io::BufReader::new(repo_file).lines() { let repository = repository.expect("Unexpected error"); // i find this line kinda funny for some reason let resp = block_on(client.get(format!("{}/gaypack/{}/latest/Package.toml", repository, package)).send()).expect("GET request failed"); let status = resp.status(); let text = block_on(resp.text()).expect("Failed to receive packet body"); if installed.is_some() { - candidates.insert(installed.unwrap(), "installed".to_string()); + candidates.insert("installed".to_string(), installed.unwrap()); } let package_data = &crate::package::read_package(text); dbg!(package_data); if status == StatusCode::from_u16(200).unwrap() { - candidates.insert(package_data.revision, repository); + candidates.insert(repository, package_data.revision); } }; let mut sorted: Vec<_> = candidates.iter().collect(); - sorted.sort_by_key(|entry| entry.0); - for (_, repository) in sorted.iter() { + sorted.sort_by_key(|entry| entry.1); + let mut highest_version: u64 = 0; + for (repository, version) in sorted.iter() { + if **version > highest_version {highest_version = **version}; hits.push(repository.as_str().to_string()); } - return Some(hits); + if candidates.get("installed") == Some(highest_version) { + None + } else { + Some(hits) + } } \ No newline at end of file