git.lucas.co / cce-system-interface
system settings
git clone https://git.lucas.co/cce-system-interface.git

commit9de7033470f36264d62381ebb70afa86950e5c64
parent87dd225efb
authorLucas Galante <[email protected]>
date2026-06-22 14:41
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) {