use serde::{Deserialize, Serialize};
use crate::keg_plist::KegPlist;
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct TranslationConfig {
pub d3d_metal: bool,
pub dxvk: bool,
pub dxmt: bool,
pub molten_vkcx: bool,
pub fast_math: bool,
pub advertise_avx: bool,
pub metal_hud: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct WineConfig {
pub wine_esync: bool,
pub wine_msync: bool,
pub wine_debug: String,
pub use_start_exe: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct WinetricksConfig {
pub winetricks_disable_logging: bool,
pub winetricks_force: bool,
pub winetricks_silent: bool,
pub skip_gecko: bool,
pub skip_mono: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct KeyboardConfig {
pub map_option_to_alt: bool,
pub map_command_to_ctrl: bool,
pub use_standard_function_keys: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct FolderMappingConfig {
pub symlinks_in_user_folder: bool,
pub symlink_desktop: String,
pub symlink_downloads: String,
pub symlink_documents: String,
pub symlink_music: String,
pub symlink_pictures: String,
pub symlink_videos: String,
pub symlink_templates: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct DebugConfig {
pub debug_mode: bool,
pub disable_cpus: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct KegworksConfig {
pub translation: TranslationConfig,
pub wine: WineConfig,
pub winetricks: WinetricksConfig,
pub folders: FolderMappingConfig,
pub debug: DebugConfig,
pub gamma_correction: String,
pub program_flags: String,
pub program_path: String,
}
impl KegPlist {
pub fn update_from_config(&mut self, config: &KegworksConfig) {
self.advertise_avx = config.translation.advertise_avx;
self.d3d_metal = config.translation.d3d_metal;
self.dxvk = config.translation.dxvk;
self.dxmt = config.translation.dxmt;
self.molten_vkcx = config.translation.molten_vkcx;
self.fast_math = config.translation.fast_math;
self.metal_hud = config.translation.metal_hud;
self.wine_esync = config.wine.wine_esync;
self.wine_msync = config.wine.wine_msync;
self.wine_debug = config.wine.wine_debug.clone();
self.use_start_exe = config.wine.use_start_exe;
self.winetricks_disable_logging =
config.winetricks.winetricks_disable_logging;
self.winetricks_force = config.winetricks.winetricks_force;
self.winetricks_silent = config.winetricks.winetricks_silent;
self.skip_gecko = config.winetricks.skip_gecko;
self.skip_mono = config.winetricks.skip_mono;
self.symlinks_in_user_folder = config.folders.symlinks_in_user_folder;
self.symlink_desktop = config.folders.symlink_desktop.clone();
self.symlink_downloads = config.folders.symlink_downloads.clone();
self.symlink_my_documents = config.folders.symlink_documents.clone();
self.symlink_my_music = config.folders.symlink_music.clone();
self.symlink_my_pictures = config.folders.symlink_pictures.clone();
self.symlink_my_videos = config.folders.symlink_videos.clone();
self.symlink_templates = config.folders.symlink_templates.clone();
self.debug_mode = config.debug.debug_mode;
self.disable_cpus = config.debug.disable_cpus;
self.gamma_correction = config.gamma_correction.clone();
self.program_flags = config.program_flags.clone();
self.program_name_and_path = config.program_path.clone();
}
pub fn extract_config(&self) -> KegworksConfig {
KegworksConfig {
translation: TranslationConfig {
advertise_avx: self.advertise_avx,
d3d_metal: self.d3d_metal,
dxvk: self.dxvk,
dxmt: self.dxmt,
molten_vkcx: self.molten_vkcx,
fast_math: self.fast_math,
metal_hud: self.metal_hud,
},
wine: WineConfig {
wine_esync: self.wine_esync,
wine_msync: self.wine_msync,
wine_debug: self.wine_debug.clone(),
use_start_exe: self.use_start_exe,
},
winetricks: WinetricksConfig {
winetricks_disable_logging: self.winetricks_disable_logging,
winetricks_force: self.winetricks_force,
winetricks_silent: self.winetricks_silent,
skip_gecko: self.skip_gecko,
skip_mono: self.skip_mono,
},
folders: FolderMappingConfig {
symlinks_in_user_folder: self.symlinks_in_user_folder,
symlink_desktop: self.symlink_desktop.clone(),
symlink_downloads: self.symlink_downloads.clone(),
symlink_documents: self.symlink_my_documents.clone(),
symlink_music: self.symlink_my_music.clone(),
symlink_pictures: self.symlink_my_pictures.clone(),
symlink_videos: self.symlink_my_videos.clone(),
symlink_templates: self.symlink_templates.clone(),
},
debug: DebugConfig {
debug_mode: self.debug_mode,
disable_cpus: self.disable_cpus,
},
gamma_correction: self.gamma_correction.clone(),
program_flags: self.program_flags.clone(),
program_path: self.program_name_and_path.clone(),
}
}
}