aboutsummaryrefslogtreecommitdiff
path: root/src/gentoo
diff options
context:
space:
mode:
authorpablu <me@pablu.de>2026-06-03 00:59:42 +0200
committerpablu <me@pablu.de>2026-06-03 00:59:42 +0200
commitbb7178262d721d61062b151df17bc2ba9f327366 (patch)
tree25a6fbf900019f538dee372e5893a30ac7c72bae /src/gentoo
parent9a0d2b1c0e7b31ace9f3477622ef907f8d11ad7c (diff)
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
Diffstat (limited to 'src/gentoo')
-rw-r--r--src/gentoo/portage.rs52
1 files changed, 42 insertions, 10 deletions
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<InstalledPackage>,
- pub world_packages: HashSet<PackageKey>,
- pub available_packages: Vec<Package>,
+ installed_packages: Vec<InstalledPackage>,
+ world_packages: HashSet<PackageKey>,
+ available_packages: Vec<Package>,
}
impl Portage {
- pub fn new() -> Self {
+ // TODO: Do this differently to allow backgrounded loading
+ pub fn new(
+ installed_packages: Vec<InstalledPackage>,
+ world_packages: HashSet<PackageKey>,
+ available_packages: Vec<Package>,
+ ) -> 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<InstalledPackage> {
- 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()
+ }
}