system settings
git clone https://git.lucas.co/cce-system-interface.git
Use common config reading/writing helper from cce-ui
src/pages/display.rs | 24 +-----------------------
src/pages/input.rs | 26 +-------------------------
src/pages/interface.rs | 39 +++++++++------------------------------
src/pages/system_info.rs | 24 +-----------------------
4 files changed, 12 insertions(+), 101 deletions(-)
diff --git a/src/pages/display.rs b/src/pages/display.rs
index 847f2e4..eb8bf35 100644
--- a/src/pages/display.rs
+++ b/src/pages/display.rs
@@ -129,29 +129,7 @@ fn parse_screensaver_style(content: &str) -> String {
}
pub fn write_config_value(key: &str, value: &str) {
- let content = std::fs::read_to_string(CONFIG_PATH).unwrap_or_default();
- let mut val = parse_json(&content);
- let j_val = if let Ok(b) = value.parse::<bool>() {
- serde_json::json!(b)
- } else if let Ok(n) = value.parse::<i64>() {
- serde_json::json!(n)
- } else if let Ok(f) = value.parse::<f64>() {
- serde_json::json!(f)
- } else {
- serde_json::json!(value)
- };
- if let Some(screensaver) = val.get_mut("screensaver").and_then(|s| s.as_object_mut()) {
- screensaver.insert(key.to_string(), j_val);
- } else {
- let mut map = serde_json::Map::new();
- map.insert(key.to_string(), j_val);
- if let Some(obj) = val.as_object_mut() {
- obj.insert("screensaver".to_string(), serde_json::Value::Object(map));
- }
- }
- if let Ok(updated_str) = serde_json::to_string_pretty(&val) {
- let _ = std::fs::write(CONFIG_PATH, updated_str);
- }
+ cce_ui::config::write_config_value(CONFIG_PATH, key, value, "screensaver");
}
pub async fn fetch_display_state() -> DisplayState {
diff --git a/src/pages/input.rs b/src/pages/input.rs
index 6994779..fcd8689 100644
--- a/src/pages/input.rs
+++ b/src/pages/input.rs
@@ -352,18 +352,6 @@ fn send_ipc_command(cmd: &str) {
}
fn write_config_value(key: &str, value: &str) {
- let content = fs::read_to_string(CONFIG_PATH).unwrap_or_default();
- let mut val = parse_json(&content);
- let j_val = if let Ok(b) = value.parse::<bool>() {
- serde_json::json!(b)
- } else if let Ok(n) = value.parse::<i64>() {
- serde_json::json!(n)
- } else if let Ok(f) = value.parse::<f64>() {
- serde_json::json!(f)
- } else {
- serde_json::json!(value)
- };
-
let section = if key == "zoom_in" || key == "zoom_out" {
"graph"
} else if key == "tap_to_click" || key == "dwtp"
@@ -378,19 +366,7 @@ fn write_config_value(key: &str, value: &str) {
"repeat"
};
- if let Some(sec_obj) = val.get_mut(section).and_then(|s| s.as_object_mut()) {
- sec_obj.insert(key.to_string(), j_val);
- } else {
- let mut map = serde_json::Map::new();
- map.insert(key.to_string(), j_val);
- if let Some(obj) = val.as_object_mut() {
- obj.insert(section.to_string(), serde_json::Value::Object(map));
- }
- }
-
- if let Ok(updated_str) = serde_json::to_string_pretty(&val) {
- let _ = fs::write(CONFIG_PATH, updated_str);
- }
+ cce_ui::config::write_config_value(CONFIG_PATH, key, value, section);
}
fn write_tap_to_click(enabled: bool) {
diff --git a/src/pages/interface.rs b/src/pages/interface.rs
index 34dd754..5bb9fa3 100644
--- a/src/pages/interface.rs
+++ b/src/pages/interface.rs
@@ -1325,32 +1325,7 @@ pub fn write_config_value_path(path: &str, key: &str, value: &str) -> bool {
i += 1;
}
- let set_val = |val_obj: &mut serde_json::Value, k: &str, val_str: &str| {
- let j_val = if let Ok(parsed_val) = serde_json::from_str::<serde_json::Value>(val_str) {
- parsed_val
- } else {
- serde_json::json!(val_str)
- };
-
- let mut updated = false;
- if let Some(obj) = val_obj.as_object_mut() {
- for (_sec_name, sec_val) in obj.iter_mut() {
- if let Some(sec_obj) = sec_val.as_object_mut() {
- if sec_obj.contains_key(k) {
- sec_obj.insert(k.to_string(), j_val.clone());
- updated = true;
- break;
- }
- }
- }
- if !updated {
- if let Some(layout_obj) = obj.get_mut("layout").and_then(|l| l.as_object_mut()) {
- layout_obj.insert(k.to_string(), j_val);
- }
- }
- }
- };
-
+ let mut updated_any = false;
for k in &keys_to_update {
let mapped_k = if k == key {
match key {
@@ -1361,12 +1336,16 @@ pub fn write_config_value_path(path: &str, key: &str, value: &str) -> bool {
} else {
k
};
- set_val(&mut val, mapped_k, value);
+ if cce_ui::config::update_json_in_memory(&mut val, mapped_k, value, "layout") {
+ updated_any = true;
+ }
}
- if let Ok(updated_str) = serde_json::to_string_pretty(&val) {
- if fs::write(path, updated_str).is_ok() {
- return true;
+ if updated_any {
+ if let Ok(updated_str) = serde_json::to_string_pretty(&val) {
+ if fs::write(path, updated_str).is_ok() {
+ return true;
+ }
}
}
false
diff --git a/src/pages/system_info.rs b/src/pages/system_info.rs
index ab2427d..680389c 100644
--- a/src/pages/system_info.rs
+++ b/src/pages/system_info.rs
@@ -953,29 +953,7 @@ fn send_ipc_command(cmd: &str) {
}
fn write_config_value(key: &str, value: &str) {
- let content = fs::read_to_string(CONFIG_PATH).unwrap_or_default();
- let mut val = parse_json(&content);
- let j_val = if let Ok(b) = value.parse::<bool>() {
- serde_json::json!(b)
- } else if let Ok(n) = value.parse::<i64>() {
- serde_json::json!(n)
- } else if let Ok(f) = value.parse::<f64>() {
- serde_json::json!(f)
- } else {
- serde_json::json!(value)
- };
- if let Some(notifications) = val.get_mut("notifications").and_then(|n| n.as_object_mut()) {
- notifications.insert(key.to_string(), j_val);
- } else {
- let mut map = serde_json::Map::new();
- map.insert(key.to_string(), j_val);
- if let Some(obj) = val.as_object_mut() {
- obj.insert("notifications".to_string(), serde_json::Value::Object(map));
- }
- }
- if let Ok(updated_str) = serde_json::to_string_pretty(&val) {
- let _ = fs::write(CONFIG_PATH, updated_str);
- }
+ cce_ui::config::write_config_value(&get_config_path(), key, value, "notifications");
}
fn write_enable_notifications(enabled: bool) {