papa 2.3.0-alpha

A cli mod manager for the Northstar launcher
use crate::core::{commands::utils::link_dir, utils, Ctx};
use anyhow::{Context, Result};

pub(crate) fn include(ctx: &Ctx, mods: Vec<String>, force: bool) -> Result<()> {
    let mut local = utils::get_installed(&ctx.local_target)?;
    let global = utils::get_installed(&ctx.global_target)?;
    for m in mods.iter() {
        if let Some(g) = global
            .mods
            .iter()
            .find(|e| e.package_name.trim().to_lowercase() == m.trim().to_lowercase())
        {
            if !force && local.linked.contains(g) {
                println!("Mod '{}' already linked", m);
                continue;
            }
            for m in g.mods.iter() {
                link_dir(&m.path, &ctx.local_target.join(&m.name)).context(format!(
                    "Unable to create link to {}... Does a file by that name already exist?",
                    ctx.local_target.join(&m.name).display()
                ))?;
            }

            println!("Linked {}!", m);
            local.linked.insert(g.clone());
        } else {
            println!("No mod '{}' globally installed", m);
        }
    }

    utils::save_installed(&ctx.local_target, &local)?;

    Ok(())
}