added log lines

This commit is contained in:
2026-03-02 23:00:24 +01:00
parent 6bb41e7d72
commit 53e4614970
5 changed files with 60 additions and 10 deletions

View File

@@ -1,3 +1,4 @@
use log::trace;
use serde::{Deserialize, Serialize};
use std::{
error::Error,
@@ -30,6 +31,11 @@ pub struct RootConfig {
impl RootConfig {
pub fn load_from_file(path: impl AsRef<Path>) -> Result<Self, Box<dyn Error>> {
trace!(
"Loading RootConfig from file: {}",
path.as_ref().to_string_lossy()
);
let data = read_to_string(path)?;
let config = toml::from_str(&data)?;
@@ -111,6 +117,11 @@ impl ModdedInstance {
}
pub fn load_from_file(path: impl AsRef<Path>) -> Result<Self, Box<dyn Error>> {
trace!(
"Loading ModdedInstance from file: {}",
path.as_ref().to_string_lossy()
);
let data = read_to_string(path)?;
let config = toml::from_str(&data)?;
@@ -118,6 +129,11 @@ impl ModdedInstance {
}
pub fn save_to_file(&self, path: impl AsRef<Path>) -> Result<(), Box<dyn Error>> {
trace!(
"Saving ModdedInstance to: {}",
path.as_ref().to_string_lossy()
);
let content = toml::to_string_pretty(self)?;
let mut file = fs::File::create(path)?;
write!(file, "{}", content)?;
@@ -125,6 +141,8 @@ impl ModdedInstance {
}
pub fn add_mod(&mut self, from_mod: &ModConfig, priority: isize, files: &[ModFile]) {
trace!("Adding mod to instance");
let mut new_mod = InstalledMod::new(from_mod, priority);
let mut solver = ConflictSolver::new();
@@ -137,10 +155,12 @@ impl ModdedInstance {
}
}
trace!("Adding already present files to confict solver");
for (present_file, present_mod) in &already_installed_files {
solver.add_file_unchecked(present_file, present_mod);
}
trace!("Adding file from mod to confict solver");
// Now add the new files and check for conflicts
for file in files {
if let Some(conflict) = solver.add_file(file, &new_mod) {
@@ -150,6 +170,7 @@ impl ModdedInstance {
}
}
trace!("No conflicts where found");
// No conflicts. Add files.
for file in files {
new_mod.add_file(file);

View File

@@ -1,7 +1,6 @@
use std::{
collections::HashMap,
path::{Path, PathBuf},
};
use std::{collections::HashMap, path::PathBuf};
use log::debug;
use crate::basic_types::{InstalledMod, ModFile};
@@ -36,11 +35,17 @@ impl<'a> ConflictSolver<'a> {
let path = &file.destination();
match self.files.get(path) {
Some((current_file, current_file_mod)) => {
debug!(
"Trying to resolve file conflict between at {}",
path.to_string_lossy()
);
if from_mod == *current_file_mod {
// File from the same mod
// Check internal priority
if file.internal_priority() > current_file.internal_priority() {
self.files.insert(path.to_owned(), (file, from_mod));
debug!("Conflict resolved. Internal priority");
return None;
}
@@ -58,6 +63,7 @@ impl<'a> ConflictSolver<'a> {
if from_mod.priority() > current_file_mod.priority() {
self.files.insert(path.to_owned(), (file, from_mod));
debug!("Conflict resolved. Mod priority");
return None;
}

View File

@@ -1,3 +1,5 @@
use log::debug;
use crate::{
basic_types::{ModdedInstance, RootConfig},
utils::walk_files_recursive,
@@ -10,6 +12,7 @@ pub fn link_instance_to_target(
instance: &ModdedInstance,
target: impl AsRef<Path>,
) -> Result<(), io::Error> {
debug!("Linking instance to {}", target.as_ref().to_string_lossy());
for installed_mod in &instance.mods {
let mod_config = root_config.get_mod_by_id(&installed_mod.mod_id()).unwrap();
let mod_source_root = root_config.get_mod_location(&mod_config);
@@ -28,6 +31,7 @@ pub fn link_game_to_target(
game_dir: impl AsRef<Path>,
target: impl AsRef<Path>,
) -> Result<(), io::Error> {
debug!("Linking install to {}", target.as_ref().to_string_lossy());
walk_files_recursive(&game_dir)?.try_for_each(|file| {
let link_target = file.path();
let link_name = target
@@ -50,6 +54,7 @@ pub fn create_plugins_txt(
instance: &ModdedInstance,
target: impl AsRef<Path>,
) -> Result<(), io::Error> {
debug!("Generating plugins.txt");
let mut file = fs::File::create(target.as_ref().join("plugins.txt"))?;
writeln!(file, "# Auto generated. DO NOT EDIT MANUALLY!")?;

View File

@@ -4,6 +4,7 @@ use std::{
};
use libloot::{Game, GameType};
use log::trace;
use crate::{
basic_types::{ModdedInstance, RootConfig},
@@ -44,6 +45,7 @@ impl LoadOrder {
.collect();
let refs: Vec<_> = mod_plugins.iter().map(|e| e.as_path()).collect();
trace!("Loading {} plugins to game", refs.len());
self.game.load_plugins(&refs)?;
}
Ok(())
@@ -55,6 +57,7 @@ impl LoadOrder {
.map(|f| f.path())
.collect();
let refs: Vec<_> = plugins.iter().map(|e| e.as_path()).collect();
trace!("Loading {} plugins to game", refs.len());
self.game.load_plugins(&refs)?;
Ok(())
}
@@ -67,6 +70,7 @@ impl LoadOrder {
}
pub fn load_order(&self) -> Result<Vec<String>, Box<dyn Error>> {
trace!("Generating new load order");
let all_plugins = self.game.loaded_plugins();
let plugins_names: Vec<&str> = all_plugins.iter().map(|e| e.name()).collect();

View File

@@ -1,5 +1,7 @@
use std::{collections::HashMap, fmt::Display};
use log::{debug, warn};
use crate::fomod::{
CompositeDependency, Config, DependencyOperator, DependencyState, FileList, FileTypeEnum,
Group, GroupType, Plugin, PluginTypeDescriptorEnum, PluginTypeEnum,
@@ -20,6 +22,7 @@ impl InstallerState {
}
fn set_flag(&mut self, name: &str, value: &str) {
debug!("Setting flag: {} to {}", name, value);
self.flags.insert(name.to_string(), value.to_string());
}
@@ -29,6 +32,7 @@ impl InstallerState {
fn add_files(&mut self, files: &FileList) {
let Some(list) = &files.list else {
debug!("Adding empty file list to installer state");
return;
};
@@ -66,12 +70,20 @@ fn evaluate_dependency(
CompositeDependency::Game(version) => {
// TODO: Check the game version
let _ = version;
warn!(
"Trying to eveluate game version dependency: {} - Not implemented yet.",
version.version
);
true
}
CompositeDependency::Fomm(version) => {
// TODO: Check the fomm version
let _ = version;
warn!(
"Trying to eveluate FOMM dependency: {} - Not implemented yet.",
version.version
);
true
}
@@ -189,13 +201,15 @@ impl FomodInstaller {
if let Some(install_steps) = &self.config.install_steps {
let steps = &install_steps.install_step;
for (step_index, step) in steps.iter().enumerate() {
for step in steps {
// Check if the step should be visible
if let Some(visible) = &step.visible {
if !evaluate_dependency(visible, &state, &self.installed_plugins) {
// Dependency to show the step not meet. Skipping.
continue;
}
if step
.visible
.as_ref()
.is_some_and(|v| !evaluate_dependency(v, &state, &self.installed_plugins))
{
// Dependency to show the step not meet. Skipping.
continue;
}
for group in &step.optional_file_groups.group {