use super::{Result, Settled, purge};
use crate::context::Context;
use crate::{home, state};
pub struct Removed {
pub parks: usize,
pub pending: usize,
pub home_removed: bool,
}
pub fn uninstall(settled: Settled) -> Result<Removed> {
let Settled {
_exclusive,
mut state,
ctx,
} = settled;
let parks = state.accounts.iter().filter(|a| a.parked.is_some()).count();
for label in state
.accounts
.iter()
.map(|a| a.label.clone())
.collect::<Vec<_>>()
{
state.remove(&label);
}
state.active = None;
state::save(&ctx, &state)?;
let pending = purge(&ctx, &mut state);
let home_removed = pending == 0 && remove_home(&ctx);
Ok(Removed {
parks: parks - pending,
pending,
home_removed,
})
}
fn remove_home(ctx: &Context) -> bool {
std::fs::remove_dir_all(home::dir(ctx)).is_ok()
}