mirror of
https://github.com/Zedfrigg/ironbar.git
synced 2025-09-15 19:26:58 +02:00
feat(sysinfo): expose values as ironvars
This commit is contained in:
parent
9b67719cac
commit
b83f26cb1a
13 changed files with 410 additions and 152 deletions
|
@ -52,7 +52,7 @@ pub enum IronvarCommand {
|
|||
},
|
||||
|
||||
/// Gets the current value of all `ironvar`s.
|
||||
List,
|
||||
List { namespace: Option<Box<str>> },
|
||||
}
|
||||
|
||||
#[derive(Args, Debug, Serialize, Deserialize)]
|
||||
|
|
|
@ -1,36 +1,73 @@
|
|||
use crate::ipc::commands::IronvarCommand;
|
||||
use crate::ipc::Response;
|
||||
use crate::{read_lock, write_lock, Ironbar};
|
||||
use crate::ironvar::{Namespace, WritableNamespace};
|
||||
use crate::Ironbar;
|
||||
use std::sync::Arc;
|
||||
|
||||
pub fn handle_command(command: IronvarCommand) -> Response {
|
||||
match command {
|
||||
IronvarCommand::Set { key, value } => {
|
||||
let variable_manager = Ironbar::variable_manager();
|
||||
let mut variable_manager = write_lock!(variable_manager);
|
||||
match variable_manager.set(key, value) {
|
||||
match variable_manager.set(&key, value) {
|
||||
Ok(()) => Response::Ok,
|
||||
Err(err) => Response::error(&format!("{err}")),
|
||||
}
|
||||
}
|
||||
IronvarCommand::Get { key } => {
|
||||
IronvarCommand::Get { mut key } => {
|
||||
let variable_manager = Ironbar::variable_manager();
|
||||
let value = read_lock!(variable_manager).get(&key);
|
||||
let mut ns: Arc<dyn Namespace + Sync + Send> = variable_manager;
|
||||
|
||||
if key.contains('.') {
|
||||
for part in key.split('.') {
|
||||
ns = match ns.get_namespace(part) {
|
||||
Some(ns) => ns.clone(),
|
||||
None => {
|
||||
key = part.into();
|
||||
break;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
let value = ns.get(&key);
|
||||
match value {
|
||||
Some(value) => Response::OkValue { value },
|
||||
None => Response::error("Variable not found"),
|
||||
}
|
||||
}
|
||||
IronvarCommand::List => {
|
||||
IronvarCommand::List { namespace } => {
|
||||
let variable_manager = Ironbar::variable_manager();
|
||||
let mut ns: Arc<dyn Namespace + Sync + Send> = variable_manager;
|
||||
|
||||
let mut values = read_lock!(variable_manager)
|
||||
if let Some(namespace) = namespace {
|
||||
for part in namespace.split('.') {
|
||||
ns = match ns.get_namespace(part) {
|
||||
Some(ns) => ns.clone(),
|
||||
None => return Response::error("Namespace not found"),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
let mut namespaces = ns
|
||||
.namespaces()
|
||||
.iter()
|
||||
.map(|ns| format!("<{ns}>"))
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
namespaces.sort();
|
||||
|
||||
let mut value = namespaces.join("\n");
|
||||
|
||||
let mut values = ns
|
||||
.get_all()
|
||||
.iter()
|
||||
.map(|(k, v)| format!("{k}: {}", v.get().unwrap_or_default()))
|
||||
.map(|(k, v)| format!("{k}: {v}"))
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
values.sort();
|
||||
let value = values.join("\n");
|
||||
|
||||
value.push('\n');
|
||||
value.push_str(&values.join("\n"));
|
||||
|
||||
Response::OkValue { value }
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue