use std::fs;
use crate::{App, CoreError, UninstallResult, UseScope};
impl App {
pub fn uninstall_plugin_version(
&self,
plugin_name: &str,
version: &str,
) -> Result<UninstallResult, CoreError> {
let was_current = self
.current_tool(plugin_name)?
.map(|current| current.version == version)
.unwrap_or(false);
let removed = self.installer.uninstall(plugin_name, version)?;
if !removed {
return Ok(UninstallResult {
removed: false,
auto_switched: None,
});
}
let remaining = self.installer.installed_versions(plugin_name)?;
if remaining.is_empty() {
let plugin_cache = self.home().join("cache").join(plugin_name);
if plugin_cache.exists() {
let _ = fs::remove_dir_all(plugin_cache);
}
return Ok(UninstallResult {
removed: true,
auto_switched: None,
});
}
if was_current {
let first = &remaining[0];
let _ = self.use_tool(plugin_name, first, UseScope::Global, false);
return Ok(UninstallResult {
removed: true,
auto_switched: Some(first.clone()),
});
}
Ok(UninstallResult {
removed: true,
auto_switched: None,
})
}
}