From bb7178262d721d61062b151df17bc2ba9f327366 Mon Sep 17 00:00:00 2001 From: pablu Date: Wed, 3 Jun 2026 00:59:42 +0200 Subject: increment version in cargo.toml to v0.2.0, add filtering of worldset to installed_packages view, make use flags actually readable for packages with alot of useflags --- src/gentoo/portage.rs | 52 +++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 42 insertions(+), 10 deletions(-) (limited to 'src/gentoo') diff --git a/src/gentoo/portage.rs b/src/gentoo/portage.rs index c837eb6..9b13867 100644 --- a/src/gentoo/portage.rs +++ b/src/gentoo/portage.rs @@ -7,24 +7,52 @@ use crate::gentoo::{ #[derive(Debug, Default)] pub struct Portage { - pub installed_packages: Vec, - pub world_packages: HashSet, - pub available_packages: Vec, + installed_packages: Vec, + world_packages: HashSet, + available_packages: Vec, } impl Portage { - pub fn new() -> Self { + // TODO: Do this differently to allow backgrounded loading + pub fn new( + installed_packages: Vec, + world_packages: HashSet, + available_packages: Vec, + ) -> Self { Self { - installed_packages: vec![], - world_packages: HashSet::new(), - available_packages: vec![], + installed_packages, + world_packages, + available_packages, } } - pub fn get_installed_package(&self, key: PackageKey) -> Option { - let pkg = self.installed_packages.iter().find(|pkg| pkg.atom == key); + pub fn installed_packages(&self) -> Vec<&InstalledPackage> { + self.installed_packages.iter().collect() + } + + pub fn world_packages_len(&self) -> usize { + self.world_packages.len() + } + + pub fn world_packages(&self) -> Vec<&InstalledPackage> { + self.installed_packages + .iter() + .filter(|pkg| self.world_packages.contains(&pkg.atom)) + .collect() + } + + pub fn get_installed_package(&self, index: usize) -> Option<&InstalledPackage> { + if self.installed_packages.len() > index && index > 0 { + return Some(&self.installed_packages[index]); + } + + None + } + + pub fn get_installed_package_key(&self, key: &PackageKey) -> Option<&InstalledPackage> { + let pkg = self.installed_packages.iter().find(|pkg| pkg.atom == *key); if let Some(pkg) = pkg { - return Some(pkg.clone()); + return Some(pkg); } None @@ -33,4 +61,8 @@ impl Portage { pub fn total_installed_size(&self) -> usize { self.installed_packages.iter().map(|p| p.size).sum() } + + pub(crate) fn installed_packages_len(&self) -> usize { + self.installed_packages.len() + } } -- cgit 1.3.1