GPU-accelerated UI toolkit (Vulkan)
git clone https://git.lucas.co/cce-ui.git
Migrate configuration from TOML to JSON
src/color.rs | 6 +++++-
src/layout.rs | 50 ++++++++++++++++++++++++++++++++++++++++++---
src/widget/display/graph.rs | 24 ++++++++--------------
3 files changed, 60 insertions(+), 20 deletions(-)
diff --git a/src/color.rs b/src/color.rs
index 8e11b21..ed89b5e 100644
--- a/src/color.rs
+++ b/src/color.rs
@@ -201,7 +201,11 @@ fn load_colors_once() {
}
pub fn reload_colors(content: &str) {
- parse_and_set_colors(content);
+ if serde_json::from_str::<serde_json::Value>(content).is_ok() {
+ parse_and_set_colors(content);
+ } else if let Some(raw) = read_config() {
+ parse_and_set_colors(&raw);
+ }
}
pub fn page_low_color() -> [f32; 4] {
diff --git a/src/layout.rs b/src/layout.rs
index 984def4c..616f3e0 100644
--- a/src/layout.rs
+++ b/src/layout.rs
@@ -4,12 +4,56 @@ use std::sync::RwLock;
fn read_config() -> Option<String> {
let paths = [
- "/home/lsgalante/.config/cce/config.toml",
- "/home/lsgalante/.config/ccec/config.toml",
+ "/home/lsgalante/.config/cce/config.json",
+ "/home/lsgalante/.config/ccec/config.json",
];
for path in &paths {
if let Ok(content) = std::fs::read_to_string(path) {
- return Some(content);
+ if let Ok(val) = serde_json::from_str::<serde_json::Value>(&content) {
+ let mut toml_like = String::new();
+ if let Some(layout) = val.get("layout").and_then(|l| l.as_object()) {
+ for (k, v) in layout {
+ if let Some(s) = v.as_str() {
+ toml_like.push_str(&format!("{} = \"{}\"\n", k, s));
+ } else if let Some(b) = v.as_bool() {
+ toml_like.push_str(&format!("{} = {}\n", k, b));
+ } else if let Some(n) = v.as_f64() {
+ toml_like.push_str(&format!("{} = {}\n", k, n));
+ } else if let Some(n) = v.as_i64() {
+ toml_like.push_str(&format!("{} = {}\n", k, n));
+ }
+ }
+ }
+ if let Some(notifications) = val.get("notifications").and_then(|n| n.as_object()) {
+ toml_like.push_str("[notifications]\n");
+ for (k, v) in notifications {
+ if let Some(s) = v.as_str() {
+ toml_like.push_str(&format!("{} = \"{}\"\n", k, s));
+ } else if let Some(b) = v.as_bool() {
+ toml_like.push_str(&format!("{} = {}\n", k, b));
+ } else if let Some(n) = v.as_f64() {
+ toml_like.push_str(&format!("{} = {}\n", k, n));
+ } else if let Some(n) = v.as_i64() {
+ toml_like.push_str(&format!("{} = {}\n", k, n));
+ }
+ }
+ }
+ if let Some(transparency) = val.get("transparency").and_then(|t| t.as_object()) {
+ toml_like.push_str("[transparency]\n");
+ for (k, v) in transparency {
+ if let Some(s) = v.as_str() {
+ toml_like.push_str(&format!("{} = \"{}\"\n", k, s));
+ } else if let Some(b) = v.as_bool() {
+ toml_like.push_str(&format!("{} = {}\n", k, b));
+ } else if let Some(n) = v.as_f64() {
+ toml_like.push_str(&format!("{} = {}\n", k, n));
+ } else if let Some(n) = v.as_i64() {
+ toml_like.push_str(&format!("{} = {}\n", k, n));
+ }
+ }
+ }
+ return Some(toml_like);
+ }
}
}
None
diff --git a/src/widget/display/graph.rs b/src/widget/display/graph.rs
index d254a1e..8b0bd9e 100644
--- a/src/widget/display/graph.rs
+++ b/src/widget/display/graph.rs
@@ -196,25 +196,17 @@ fn read_zoom_bindings() -> (String, String) {
let mut zoom_in_val = "=".to_string();
let mut zoom_out_val = "-".to_string();
let paths = [
- "/home/lsgalante/.config/cce/config.toml",
- "/home/lsgalante/.config/ccec/config.toml",
+ "/home/lsgalante/.config/cce/config.json",
+ "/home/lsgalante/.config/ccec/config.json",
];
for path in &paths {
if let Ok(content) = std::fs::read_to_string(path) {
- for line in content.lines() {
- let trimmed = line.trim();
- if let Some(rest) = trimmed.strip_prefix("zoom_in") {
- let rest = rest.trim_start_matches(|c: char| c == ' ' || c == '=' || c == '"');
- let val = rest.trim_end_matches('"').to_string();
- if !val.is_empty() {
- zoom_in_val = val;
- }
- } else if let Some(rest) = trimmed.strip_prefix("zoom_out") {
- let rest = rest.trim_start_matches(|c: char| c == ' ' || c == '=' || c == '"');
- let val = rest.trim_end_matches('"').to_string();
- if !val.is_empty() {
- zoom_out_val = val;
- }
+ if let Ok(val) = serde_json::from_str::<serde_json::Value>(&content) {
+ if let Some(zoom_in) = val.pointer("/layout/zoom_in").and_then(|v| v.as_str()) {
+ zoom_in_val = zoom_in.to_string();
+ }
+ if let Some(zoom_out) = val.pointer("/layout/zoom_out").and_then(|v| v.as_str()) {
+ zoom_out_val = zoom_out.to_string();
}
}
break;