From b1c7d96f292c16a182d67e1bfb2540d487910b3e Mon Sep 17 00:00:00 2001 From: Niklas Kapelle Date: Sat, 28 Feb 2026 20:19:53 +0100 Subject: [PATCH] updated example use in main --- src/main.rs | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 73da36e..d940b44 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,7 +5,9 @@ use std::{ }; use crate::{ + conflict_resolver::ConflictSolver, fomod::{FileType, FileTypeEnum}, + linker::Linker, mod_config_installer::FomodInstaller, }; @@ -95,14 +97,43 @@ struct Mod { fn main() -> Result<(), Box> { const XML_PATH: &str = "./data/xml/ineed.xml"; - let xml = fs::read_to_string(XML_PATH)?; + let loaded_mod = Mod { + name: "INeed".to_owned(), + source: Path::new("./data/mods/iNeed v1").to_owned(), + priority: 0, + }; + let config: fomod::Config = quick_xml::de::from_str(&xml)?; let installer = FomodInstaller::new(config, vec![], install_prompt::prompt); - dbg!(installer.run()); + let files = installer.run(); + + let converted_files: Vec<_> = files + .iter() + .flat_map(|f| ModFile::from_installer(f.clone(), &loaded_mod).unwrap()) + .collect(); + + let mut solver = ConflictSolver::new(); + + for file in &converted_files { + if let Some(conflict) = solver.add_file(file, &loaded_mod) { + println!("Conflict deteced: {:?}", conflict); + return Ok(()); + } + } + + let files_to_link = solver.export_files(); + + let linker = Linker::new(Path::new("./data/target"), Path::new("./data/install")); + + linker.link_install_to_target()?; + + for (file, from_mod) in files_to_link { + linker.link_mod_file(file, from_mod)?; + } Ok(()) }