[feat] read video config is ok

This commit is contained in:
Purp1e
2025-03-27 13:32:30 +08:00
parent afa7355f4d
commit 93cda8dc85
9 changed files with 675 additions and 218 deletions

View File

@@ -49,35 +49,74 @@ pub struct VideoConfig {
version: String,
vendor_id: String,
device_id: String,
setting_cpu_level: String,
setting_gpu_mem_level: String,
setting_gpu_level: String,
setting_knowndevice: String,
setting_defaultres: String,
setting_defaultresheight: String,
setting_refreshrate_numerator: String,
setting_refreshrate_denominator: String,
setting_fullscreen: String,
setting_coop_fullscreen: String,
setting_nowindowborder: String,
setting_mat_vsync: String,
setting_fullscreen_min_on_focus_loss: String,
setting_high_dpi: String,
cpu_level: String,
gpu_mem_level: String,
gpu_level: String,
knowndevice: String,
defaultres: String,
defaultresheight: String,
refreshrate_numerator: String,
refreshrate_denominator: String,
fullscreen: String,
coop_fullscreen: String,
nowindowborder: String,
mat_vsync: String,
fullscreen_min_on_focus_loss: String,
high_dpi: String,
auto_config: String,
setting_shaderquality: String,
setting_r_texturefilteringquality: String,
setting_msaa_samples: String,
setting_r_csgo_cmaa_enable: String,
setting_videocfg_shadow_quality: String,
setting_videocfg_dynamic_shadows: String,
setting_videocfg_texture_detail: String,
setting_videocfg_particle_detail: String,
setting_videocfg_ao_detail: String,
setting_videocfg_hdr_detail: String,
setting_videocfg_fsr_detail: String,
setting_monitor_index: String,
setting_r_low_latency: String,
setting_aspectratiomode: String,
shaderquality: String,
r_texturefilteringquality: String,
msaa_samples: String,
r_csgo_cmaa_enable: String,
videocfg_shadow_quality: String,
videocfg_dynamic_shadows: String,
videocfg_texture_detail: String,
videocfg_particle_detail: String,
videocfg_ao_detail: String,
videocfg_hdr_detail: String,
videocfg_fsr_detail: String,
monitor_index: String,
r_low_latency: String,
aspectratiomode: String,
}
impl Default for VideoConfig {
fn default() -> Self {
VideoConfig {
version: String::new(),
vendor_id: String::new(),
device_id: String::new(),
cpu_level: String::new(),
gpu_mem_level: String::new(),
gpu_level: String::new(),
knowndevice: String::new(),
defaultres: String::new(),
defaultresheight: String::new(),
refreshrate_numerator: String::new(),
refreshrate_denominator: String::new(),
fullscreen: String::new(),
coop_fullscreen: String::new(),
nowindowborder: String::new(),
mat_vsync: String::new(),
fullscreen_min_on_focus_loss: String::new(),
high_dpi: String::new(),
auto_config: String::new(),
shaderquality: String::new(),
r_texturefilteringquality: String::new(),
msaa_samples: String::new(),
r_csgo_cmaa_enable: String::new(),
videocfg_shadow_quality: String::new(),
videocfg_dynamic_shadows: String::new(),
videocfg_texture_detail: String::new(),
videocfg_particle_detail: String::new(),
videocfg_ao_detail: String::new(),
videocfg_hdr_detail: String::new(),
videocfg_fsr_detail: String::new(),
monitor_index: String::new(),
r_low_latency: String::new(),
aspectratiomode: String::new(),
}
}
}
pub fn parse_login_users(steam_dir: &str) -> Result<Vec<LoginUser>> {
@@ -306,16 +345,234 @@ fn read_avatar(steam_dir: &str, steam_id64: &str) -> Option<String> {
}
}
pub fn get_cs2_video(file_path: &str) -> Result<HashMap<String, String>> {
let data = fs::read_to_string(file_path)?;
pub fn get_cs2_video(file_path: &str) -> Result<VideoConfig> {
// TODO: no kv
let data = fs::read_to_string(file_path)?;
let json_data = super::parse::to_json(&data);
let kv: HashMap<String, String> = serde_json::from_str(&json_data)?;
Ok(kv)
let video_config = VideoConfig {
version: kv.get("version").unwrap_or(&"".to_string()).to_string(),
vendor_id: kv.get("vendor_id").unwrap_or(&"".to_string()).to_string(),
device_id: kv.get("device_id").unwrap_or(&"".to_string()).to_string(),
cpu_level: kv
.get("setting.cpu_level")
.unwrap_or(&"".to_string())
.to_string(),
gpu_mem_level: kv
.get("setting.gpu_mem_level")
.unwrap_or(&"".to_string())
.to_string(),
gpu_level: kv
.get("setting.gpu_level")
.unwrap_or(&"".to_string())
.to_string(),
knowndevice: kv
.get("setting.knowndevice")
.unwrap_or(&"".to_string())
.to_string(),
defaultres: kv
.get("setting.defaultres")
.unwrap_or(&"".to_string())
.to_string(),
defaultresheight: kv
.get("setting.defaultresheight")
.unwrap_or(&"".to_string())
.to_string(),
refreshrate_numerator: kv
.get("setting.refreshrate_numerator")
.unwrap_or(&"".to_string())
.to_string(),
refreshrate_denominator: kv
.get("setting.refreshrate_denominator")
.unwrap_or(&"".to_string())
.to_string(),
fullscreen: kv
.get("setting.fullscreen")
.unwrap_or(&"".to_string())
.to_string(),
coop_fullscreen: kv
.get("setting.coop_fullscreen")
.unwrap_or(&"".to_string())
.to_string(),
nowindowborder: kv
.get("setting.nowindowborder")
.unwrap_or(&"".to_string())
.to_string(),
mat_vsync: kv
.get("setting.mat_vsync")
.unwrap_or(&"".to_string())
.to_string(),
fullscreen_min_on_focus_loss: kv
.get("setting.fullscreen_min_on_focus_loss")
.unwrap_or(&"".to_string())
.to_string(),
high_dpi: kv
.get("setting.high_dpi")
.unwrap_or(&"".to_string())
.to_string(),
auto_config: kv.get("auto_config").unwrap_or(&"".to_string()).to_string(),
shaderquality: kv
.get("setting.shaderquality")
.unwrap_or(&"".to_string())
.to_string(),
r_texturefilteringquality: kv
.get("setting.r_texturefilteringquality")
.unwrap_or(&"".to_string())
.to_string(),
msaa_samples: kv
.get("setting.msaa_samples")
.unwrap_or(&"".to_string())
.to_string(),
r_csgo_cmaa_enable: kv
.get("setting.r_csgo_cmaa_enable")
.unwrap_or(&"".to_string())
.to_string(),
videocfg_shadow_quality: kv
.get("setting.videocfg_shadow_quality")
.unwrap_or(&"".to_string())
.to_string(),
videocfg_dynamic_shadows: kv
.get("setting.videocfg_dynamic_shadows")
.unwrap_or(&"".to_string())
.to_string(),
videocfg_texture_detail: kv
.get("setting.videocfg_texture_detail")
.unwrap_or(&"".to_string())
.to_string(),
videocfg_particle_detail: kv
.get("setting.videocfg_particle_detail")
.unwrap_or(&"".to_string())
.to_string(),
videocfg_ao_detail: kv
.get("setting.videocfg_ao_detail")
.unwrap_or(&"".to_string())
.to_string(),
videocfg_hdr_detail: kv
.get("setting.videocfg_hdr_detail")
.unwrap_or(&"".to_string())
.to_string(),
videocfg_fsr_detail: kv
.get("setting.videocfg_fsr_detail")
.unwrap_or(&"".to_string())
.to_string(),
monitor_index: kv
.get("setting.monitor_index")
.unwrap_or(&"".to_string())
.to_string(),
r_low_latency: kv
.get("setting.r_low_latency")
.unwrap_or(&"".to_string())
.to_string(),
aspectratiomode: kv
.get("setting.aspectratiomode")
.unwrap_or(&"".to_string())
.to_string(),
};
Ok(video_config)
}
pub fn set_cs2_video(file_path: &str, data: HashMap<String, String>) -> Result<()> {
let json_data = serde_json::to_string(&data)?;
pub fn set_cs2_video(file_path: &str, data: VideoConfig) -> Result<()> {
// TODO: no kv
let mut kv = HashMap::new();
kv.insert("version".to_string(), data.version);
kv.insert("vendor_id".to_string(), data.vendor_id);
kv.insert("device_id".to_string(), data.device_id);
kv.insert("setting.cpu_level".to_string(), data.cpu_level);
kv.insert(
"setting.gpu_mem_level".to_string(),
data.gpu_mem_level,
);
kv.insert("setting.gpu_level".to_string(), data.gpu_level);
kv.insert("setting.knowndevice".to_string(), data.knowndevice);
kv.insert("setting.defaultres".to_string(), data.defaultres);
kv.insert(
"setting.defaultresheight".to_string(),
data.defaultresheight,
);
kv.insert(
"setting.refreshrate_numerator".to_string(),
data.refreshrate_numerator,
);
kv.insert(
"setting.refreshrate_denominator".to_string(),
data.refreshrate_denominator,
);
kv.insert("setting.fullscreen".to_string(), data.fullscreen);
kv.insert(
"setting.coop_fullscreen".to_string(),
data.coop_fullscreen,
);
kv.insert(
"setting.nowindowborder".to_string(),
data.nowindowborder,
);
kv.insert("setting.mat_vsync".to_string(), data.mat_vsync);
kv.insert(
"setting.fullscreen_min_on_focus_loss".to_string(),
data.fullscreen_min_on_focus_loss,
);
kv.insert("setting.high_dpi".to_string(), data.high_dpi);
kv.insert("auto_config".to_string(), data.auto_config);
kv.insert(
"setting.shaderquality".to_string(),
data.shaderquality,
);
kv.insert(
"setting.r_texturefilteringquality".to_string(),
data.r_texturefilteringquality,
);
kv.insert(
"setting.msaa_samples".to_string(),
data.msaa_samples,
);
kv.insert(
"setting.r_csgo_cmaa_enable".to_string(),
data.r_csgo_cmaa_enable,
);
kv.insert(
"setting.videocfg_shadow_quality".to_string(),
data.videocfg_shadow_quality,
);
kv.insert(
"setting.videocfg_dynamic_shadows".to_string(),
data.videocfg_dynamic_shadows,
);
kv.insert(
"setting.videocfg_texture_detail".to_string(),
data.videocfg_texture_detail,
);
kv.insert(
"setting.videocfg_particle_detail".to_string(),
data.videocfg_particle_detail,
);
kv.insert(
"setting.videocfg_ao_detail".to_string(),
data.videocfg_ao_detail,
);
kv.insert(
"setting.videocfg_hdr_detail".to_string(),
data.videocfg_hdr_detail,
);
kv.insert(
"setting.videocfg_fsr_detail".to_string(),
data.videocfg_fsr_detail,
);
kv.insert(
"setting.monitor_index".to_string(),
data.monitor_index,
);
kv.insert(
"setting.r_low_latency".to_string(),
data.r_low_latency,
);
kv.insert(
"setting.aspectratiomode".to_string(),
data.aspectratiomode,
);
let json_data = serde_json::to_string(&kv)?;
let vdf_data = super::parse::to_vdf(&json_data);
// println!("{}", vdf_data);
fs::write(file_path, vdf_data)?;
Ok(())
}
@@ -332,14 +589,17 @@ mod tests {
#[test]
fn test_get_cs2_video() {
let video_config = get_cs2_video("src-tauri/src/vdf/tests/cs2_video.txt").unwrap();
let manifest_dir = env!("CARGO_MANIFEST_DIR");
let file_path = format!("{}/src/vdf/tests/cs2_video.txt", manifest_dir);
let video_config = get_cs2_video(&file_path).unwrap();
println!("{:?}", video_config);
}
#[test]
fn test_set_cs2_video() {
let mut video_config = HashMap::new();
video_config.insert("setting.fullscreen".to_string(), "0".to_string());
set_cs2_video("temp/cs2_video.txt", video_config).unwrap();
let manifest_dir = env!("CARGO_MANIFEST_DIR");
let file_path = format!("{}/temp/cs2_video.txt", manifest_dir);
let video_config = VideoConfig::default();
set_cs2_video(&file_path, video_config).unwrap();
}
}