diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2024-09-20 14:41:14 +0200 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2024-09-20 14:41:14 +0200 |
commit | 5cdbc6faf2ce53173bf190620da0bfe1e0ae6409 (patch) | |
tree | d678114aada2e1a5c63c0cc3769819a6dcb533f6 | |
parent | 0ce9e138d2e143a363c020624d75d4c040bc4a70 (diff) | |
download | odr-dabmux-gui-5cdbc6faf2ce53173bf190620da0bfe1e0ae6409.tar.gz odr-dabmux-gui-5cdbc6faf2ce53173bf190620da0bfe1e0ae6409.tar.bz2 odr-dabmux-gui-5cdbc6faf2ce53173bf190620da0bfe1e0ae6409.zip |
Improve RC
-rw-r--r-- | src/dabmux.rs | 57 |
1 files changed, 39 insertions, 18 deletions
diff --git a/src/dabmux.rs b/src/dabmux.rs index fcdd864..dbf6ea9 100644 --- a/src/dabmux.rs +++ b/src/dabmux.rs @@ -32,24 +32,36 @@ impl DabMux { for (module_name, params_value) in root { let params = params_value.as_object().ok_or(anyhow!("RC module {} is not a JSON object", module_name))?; - for (param_name, value_json) in params { - - let value = match value_json { - Value::Null => "null".to_owned(), - Value::Bool(b) => b.to_string(), - Value::Number(n) => n.to_string(), - Value::String(s) => s.clone(), - Value::Array(_) => return Err(anyhow!(format!("Unexpected array in {}.{}", module_name, param_name))), - Value::Object(_) => return Err(anyhow!(format!("Unexpected object in {}.{}", module_name, param_name))), - }; - + // ODR-DabMux doesn't allow setting only label through the RC, so we have to merge them together + if let (Some(Value::String(l)), Some(Value::String(sl))) = (params.get("label").clone(), params.get("shortlabel").clone()) { + let value = format!("{},{}", l, sl); all_params.push( Param { module: module_name.to_owned(), - param: param_name.to_owned(), + param: "label".to_owned(), value }); } + + for (param_name, value_json) in params { + if !(param_name == "label" || param_name == "shortlabel") { + let value = match value_json { + Value::Null => "null".to_owned(), + Value::Bool(b) => if *b { "1".to_owned() } else { "0".to_owned() }, + Value::Number(n) => n.to_string(), + Value::String(s) => s.clone(), + Value::Array(_) => return Err(anyhow!(format!("Unexpected array in {}.{}", module_name, param_name))), + Value::Object(_) => return Err(anyhow!(format!("Unexpected object in {}.{}", module_name, param_name))), + }; + + all_params.push( + Param { + module: module_name.to_owned(), + param: param_name.to_owned(), + value + }); + } + } } Ok(all_params) @@ -91,19 +103,28 @@ impl DabMux { if items[0].is_readable() { let mut parts = sock.recv_multipart(0)?; - let j : String = parts.drain(..) + let j : serde_json::Value = parts.drain(..) .map(|p| match String::from_utf8(p) { Ok(s) => s, Err(_) => "???".to_owned(), }) - .collect::<Vec<String>>() - .join(","); + .collect(); - eprintln!("SET_RC: {}", j); + let j_arr = j.as_array().unwrap(); - let v: Value = serde_json::Value::String(j); - Ok(v) + //eprintln!("SET_RC: {}", j); + if j_arr[0].as_str() == Some("ok") { + Ok(j) + } + else { + if j_arr.len() > 0 && j_arr[1].is_string() { + Err(anyhow!(format!("Failed to set RC: {}", j_arr[1].as_str().unwrap()))) + } + else { + Err(anyhow!("Failed to set RC: unknown error")) + } + } } else { Err(anyhow!("Timeout reading RC")) |