diff --git a/src/main.rs b/src/main.rs index efcbbca..77489eb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -136,16 +136,45 @@ fn handle_package_command( fn handle_packages_command( managers: &[Box], - _source_filter: Option + source_filter: Option // Removed the underscore! ) -> Result<(), Box> { - if let Some(dnf) = managers.iter().find(|m| m.name() == "dnf") { - let packages = dnf.get_installed_packages()?; - println!("Installed packages ({} total):", packages.len()); - for package in packages.iter() { - println!(" {} {} ({})", - package.name, - package.version, - package.source.name()); + if let Some(source_name) = source_filter { + // Filter by specific source + let source_type = match source_name.to_lowercase().as_str() { + "dnf" => PackageSource::Dnf, + "flatpak" => PackageSource::Flatpak, + "apt" => PackageSource::Apt, + "snap" => PackageSource::Snap, + _ => { + println!("Unknown source: {}. Available: dnf, flatpak, apt, snap", source_name); + return Ok(()); + } + }; + + // Find manager for this source + if let Some(manager) = managers.iter().find(|m| m.source_type() == source_type) { + let packages = manager.get_installed_packages()?; + println!("{} packages ({} total):", source_name, packages.len()); + for package in packages.iter() { + println!(" {} {}", package.name, package.version); + } + } else { + println!("No {} package manager found or available", source_name); + } + } else { + // Show all packages from all managers + for manager in managers { + match manager.get_installed_packages() { + Ok(packages) => { + println!("\n{} packages ({} total):", manager.name(), packages.len()); + for package in packages.iter() { + println!(" {} {}", package.name, package.version); + } + } + Err(e) => { + println!("Error getting packages from {}: {}", manager.name(), e); + } + } } } Ok(())