papa 2.3.0-alpha

A cli mod manager for the Northstar launcher
use crate::{
    api::model::InstalledMod,
    core::{actions, utils, Ctx},
};

use anyhow::Result;

pub fn remove(ctx: &Ctx, mod_names: Vec<String>) -> Result<()> {
    let mut installed = utils::get_installed(ctx.config.mod_dir())?;
    let valid: Vec<InstalledMod> = mod_names
        .iter()
        .filter_map(|f| {
            installed
                .mods
                .clone()
                .iter()
                .find(|e| e.package_name.trim().to_lowercase() == f.trim().to_lowercase())
                .filter(|e| installed.mods.remove(e))
                .cloned()
        })
        .collect();

    let paths = valid.iter().flat_map(|f| f.flatten_paths()).collect();

    actions::uninstall(paths)?;
    utils::save_installed(ctx.config.mod_dir(), &installed)?;
    Ok(())
}