swaybar_info/src/main.rs

133 lines
4.5 KiB
Rust
Raw Normal View History

2022-07-09 08:33:19 +00:00
mod args;
mod proc;
mod swaybar_object;
use std::io::{self, Write};
2022-07-09 09:18:12 +00:00
use std::time::Duration;
use swaybar_object::*;
2022-07-09 06:44:04 +00:00
fn main() {
2022-07-09 08:33:19 +00:00
let args_map = args::get_args();
2022-07-09 09:18:12 +00:00
if args_map.contains_key("help") {
args::print_usage();
return;
}
2022-07-09 08:33:19 +00:00
2022-07-09 09:18:12 +00:00
let mut net_obj: Option<proc::NetInfo> = None;
let mut interval: Duration = Duration::from_secs(5);
2022-07-09 08:33:19 +00:00
if args_map.contains_key("netdev") {
net_obj = Some(proc::NetInfo::new(
args_map.get("netdev").unwrap().to_owned(),
));
}
2022-07-09 09:18:12 +00:00
if args_map.contains_key("interval-sec") {
let seconds: Result<i64, _> = args_map.get("interval-sec").unwrap().parse();
if let Ok(seconds_value) = seconds {
if seconds_value > 0 {
interval = Duration::from_secs(seconds_value as u64);
} else {
let mut stderr_handle = io::stderr().lock();
stderr_handle
.write_all(
format!(
"WARNING: Invalid --interval-sec=\"{}\", defaulting to 5!\n",
seconds_value
)
.as_bytes(),
)
.ok();
2022-07-09 09:18:12 +00:00
}
} else {
let mut stderr_handle = io::stderr().lock();
stderr_handle
.write_all(b"WARNING: Failed to parse --interval-sec=?, defaulting to 5!\n")
.ok();
2022-07-09 09:18:12 +00:00
}
}
2022-07-09 08:33:19 +00:00
2022-07-09 07:33:59 +00:00
println!(
"{}",
serde_json::to_string(&swaybar_object::SwaybarHeader::new())
.expect("Should be able to serialize SwaybarHeader")
);
println!("[");
2022-07-09 08:33:19 +00:00
2022-07-09 09:18:12 +00:00
loop {
let mut array = SwaybarArray::new();
// network traffic
if let Some(net) = &mut net_obj {
if let Err(e) = net.update() {
let mut stderr_handle = io::stderr().lock();
stderr_handle.write_all(e.to_string().as_bytes()).ok();
2022-07-09 09:18:12 +00:00
net_obj = None;
} else {
let netinfo_result = net.get_netstring();
if let Err(e) = netinfo_result {
let mut stderr_handle = io::stderr().lock();
stderr_handle.write_all(e.to_string().as_bytes()).ok();
} else {
let netinfo_string = netinfo_result.unwrap();
let netinfo_parts: Vec<&str> = netinfo_string.split_whitespace().collect();
2022-07-09 09:18:12 +00:00
{
let mut down_object = SwaybarObject::from_string(format!(
"{} {}",
netinfo_parts[0], netinfo_parts[1]
));
down_object.color = Some("#ff8888ff".into());
array.push_object(down_object);
}
2022-07-09 09:18:12 +00:00
{
let mut up_object = SwaybarObject::from_string(format!(
"{} {}",
netinfo_parts[2], netinfo_parts[3]
));
up_object.color = Some("#88ff88ff".into());
array.push_object(up_object);
}
2022-07-09 09:18:12 +00:00
}
}
}
// meminfo
{
let meminfo_result = proc::get_meminfo();
let meminfo_string: String;
if let Err(e) = meminfo_result {
let mut stderr_handle = io::stderr().lock();
stderr_handle.write_all(format!("{}\n", e).as_bytes()).ok();
meminfo_string = String::from("MEMINFO ERROR");
} else {
meminfo_string = meminfo_result.unwrap();
}
2022-07-09 09:18:12 +00:00
let meminfo_obj = SwaybarObject::from_string(meminfo_string);
array.push_object(meminfo_obj);
}
// loadavg
{
let loadavg_result = proc::get_loadavg();
let loadavg_string: String;
if let Err(e) = loadavg_result {
let mut stderr_handle = io::stderr().lock();
stderr_handle.write_all(format!("{}\n", e).as_bytes()).ok();
loadavg_string = String::from("LOADAVG ERROR");
} else {
loadavg_string = loadavg_result.unwrap();
}
2022-07-09 09:18:12 +00:00
let loadavg_obj = SwaybarObject::from_string(loadavg_string);
array.push_object(loadavg_obj);
}
// time
{
array.push_object(SwaybarObject::default());
2022-07-09 08:33:19 +00:00
}
2022-07-09 09:18:12 +00:00
println!("{}", array);
std::thread::sleep(interval);
}
2022-07-09 06:44:04 +00:00
}