From d630d2fb3d044623d9d52f1af4ce7186da8d3884 Mon Sep 17 00:00:00 2001 From: lashman Date: Fri, 6 Mar 2026 01:43:22 +0200 Subject: [PATCH] Add AppConfig with overwrite behavior, skill level, thread count settings All 3 config tests passing. --- pixstrip-core/src/config.rs | 71 ++++++++++++++++++++++++++++- pixstrip-core/tests/config_tests.rs | 27 +++++++++++ 2 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 pixstrip-core/tests/config_tests.rs diff --git a/pixstrip-core/src/config.rs b/pixstrip-core/src/config.rs index 3e14f47..4c3b534 100644 --- a/pixstrip-core/src/config.rs +++ b/pixstrip-core/src/config.rs @@ -1 +1,70 @@ -// Application configuration +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct AppConfig { + pub output_subfolder: String, + pub output_fixed_path: Option, + pub overwrite_behavior: OverwriteBehavior, + pub remember_settings: bool, + pub skill_level: SkillLevel, + pub thread_count: ThreadCount, + pub error_behavior: ErrorBehavior, + pub notify_on_completion: bool, + pub play_completion_sound: bool, + pub auto_open_output: bool, + pub high_contrast: bool, + pub large_text: bool, + pub reduced_motion: bool, +} + +impl Default for AppConfig { + fn default() -> Self { + Self { + output_subfolder: "processed".into(), + output_fixed_path: None, + overwrite_behavior: OverwriteBehavior::Ask, + remember_settings: true, + skill_level: SkillLevel::Simple, + thread_count: ThreadCount::Auto, + error_behavior: ErrorBehavior::SkipAndContinue, + notify_on_completion: true, + play_completion_sound: false, + auto_open_output: false, + high_contrast: false, + large_text: false, + reduced_motion: false, + } + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] +pub enum OverwriteBehavior { + Ask, + AutoRename, + Overwrite, + Skip, +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] +pub enum SkillLevel { + Simple, + Detailed, +} + +impl SkillLevel { + pub fn is_advanced(&self) -> bool { + matches!(self, Self::Detailed) + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] +pub enum ThreadCount { + Auto, + Manual(usize), +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] +pub enum ErrorBehavior { + SkipAndContinue, + PauseOnError, +} diff --git a/pixstrip-core/tests/config_tests.rs b/pixstrip-core/tests/config_tests.rs new file mode 100644 index 0000000..ea3c207 --- /dev/null +++ b/pixstrip-core/tests/config_tests.rs @@ -0,0 +1,27 @@ +use pixstrip_core::config::*; + +#[test] +fn default_config() { + let config = AppConfig::default(); + assert_eq!(config.output_subfolder, "processed"); + assert_eq!(config.overwrite_behavior, OverwriteBehavior::Ask); + assert!(config.remember_settings); + assert_eq!(config.skill_level, SkillLevel::Simple); + assert_eq!(config.thread_count, ThreadCount::Auto); + assert_eq!(config.error_behavior, ErrorBehavior::SkipAndContinue); +} + +#[test] +fn config_serialization_roundtrip() { + let config = AppConfig::default(); + let json = serde_json::to_string(&config).unwrap(); + let deserialized: AppConfig = serde_json::from_str(&json).unwrap(); + assert_eq!(deserialized.output_subfolder, config.output_subfolder); + assert_eq!(deserialized.overwrite_behavior, config.overwrite_behavior); +} + +#[test] +fn skill_level_toggle() { + assert_eq!(SkillLevel::Simple.is_advanced(), false); + assert_eq!(SkillLevel::Detailed.is_advanced(), true); +}