2022-07-09 08:33:19 +00:00
|
|
|
mod args;
|
2022-07-09 07:57:49 +00:00
|
|
|
mod proc;
|
2022-07-09 07:25:15 +00:00
|
|
|
mod swaybar_object;
|
|
|
|
|
2022-07-09 13:53:01 +00:00
|
|
|
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 {
|
2022-07-09 13:53:01 +00:00
|
|
|
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 {
|
2022-07-09 13:53:01 +00:00
|
|
|
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() {
|
2022-07-09 13:53:01 +00:00
|
|
|
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 {
|
2022-07-09 13:53:01 +00:00
|
|
|
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
|
|
|
|
2022-07-09 13:53:01 +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
|
|
|
|
2022-07-09 13:53:01 +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
|
|
|
|
{
|
2022-07-09 13:31:01 +00:00
|
|
|
let meminfo_result = proc::get_meminfo();
|
|
|
|
let meminfo_string: String;
|
|
|
|
if let Err(e) = meminfo_result {
|
2022-07-09 13:53:01 +00:00
|
|
|
let mut stderr_handle = io::stderr().lock();
|
|
|
|
stderr_handle.write_all(format!("{}\n", e).as_bytes()).ok();
|
2022-07-09 13:31:01 +00:00
|
|
|
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
|
|
|
|
{
|
2022-07-09 13:31:01 +00:00
|
|
|
let loadavg_result = proc::get_loadavg();
|
|
|
|
let loadavg_string: String;
|
|
|
|
if let Err(e) = loadavg_result {
|
2022-07-09 13:53:01 +00:00
|
|
|
let mut stderr_handle = io::stderr().lock();
|
|
|
|
stderr_handle.write_all(format!("{}\n", e).as_bytes()).ok();
|
2022-07-09 13:31:01 +00:00
|
|
|
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
|
|
|
}
|