Use refresh_interval from (default) Config; battery module improvements

main
Tassilo Horn 2 years ago
parent 588b7153fb
commit 345c91a559
  1. 8
      src/bar.rs
  2. 7
      src/bar/config.rs
  3. 28
      src/bar/module/battery.rs

@ -27,6 +27,8 @@ pub fn start() {
env_logger::Builder::from_env(Env::default().default_filter_or("warn")) env_logger::Builder::from_env(Env::default().default_filter_or("warn"))
.init(); .init();
let config = config::Config::default();
thread::spawn(handle_input); thread::spawn(handle_input);
let mods: Vec<Box<dyn BarModuleFn>> = vec![ let mods: Vec<Box<dyn BarModuleFn>> = vec![
module::window::BarModuleWindow::create( module::window::BarModuleWindow::create(
@ -42,14 +44,14 @@ pub fn start() {
module::date::BarModuleDate::default_config("0".to_owned()), module::date::BarModuleDate::default_config("0".to_owned()),
), ),
]; ];
generate_status(&mods); generate_status(&mods, config.refresh_interval);
} }
pub fn handle_input() { pub fn handle_input() {
// TODO: Read stdin and react to click events. // TODO: Read stdin and react to click events.
} }
pub fn generate_status(mods: &[Box<dyn BarModuleFn>]) { pub fn generate_status(mods: &[Box<dyn BarModuleFn>], refresh_interval: u64) {
println!("{{\"version\": 1}}"); println!("{{\"version\": 1}}");
// status_command should output an infinite array meaning we emit an // status_command should output an infinite array meaning we emit an
// opening [ and never the closing bracket. // opening [ and never the closing bracket.
@ -63,6 +65,6 @@ pub fn generate_status(mods: &[Box<dyn BarModuleFn>]) {
let json = serde_json::to_string_pretty(&blocks) let json = serde_json::to_string_pretty(&blocks)
.unwrap_or_else(|_| "".to_string()); .unwrap_or_else(|_| "".to_string());
println!("{},", json); println!("{},", json);
thread::sleep(std::time::Duration::from_secs(1)); thread::sleep(std::time::Duration::from_millis(refresh_interval));
} }
} }

@ -19,7 +19,10 @@ use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize)]
pub struct Config { pub struct Config {
pub refresh_interval: f32, /// The status is refreshed every `refresh_interval` milliseconds.
pub refresh_interval: u64,
/// The list of modules to display in the given order, each one specified
/// as `"<module_type>/<instance>"`.
pub modules: Vec<String>, pub modules: Vec<String>,
pub module_configs: Vec<ModuleConfig>, pub module_configs: Vec<ModuleConfig>,
} }
@ -35,7 +38,7 @@ pub struct ModuleConfig {
impl Default for Config { impl Default for Config {
fn default() -> Self { fn default() -> Self {
Config { Config {
refresh_interval: 1.0, refresh_interval: 1000,
modules: vec!["date/0".to_owned()], modules: vec!["date/0".to_owned()],
module_configs: vec![], module_configs: vec![],
} }

@ -20,6 +20,7 @@ use crate::bar::module::BarModuleFn;
use crate::fmt_replace::fmt_replace; use crate::fmt_replace::fmt_replace;
use battery as bat; use battery as bat;
use std::cell::RefCell; use std::cell::RefCell;
use std::collections::HashSet;
use swaybar_types as s; use swaybar_types as s;
pub struct BarModuleBattery { pub struct BarModuleBattery {
@ -49,6 +50,9 @@ fn get_text(
) -> String { ) -> String {
match get_refreshed_batteries(manager) { match get_refreshed_batteries(manager) {
Ok(bats) => { Ok(bats) => {
if bats.is_empty() {
return String::new();
}
fmt_replace!(&cfg.format, cfg.html_escape, { fmt_replace!(&cfg.format, cfg.html_escape, {
"state_of_charge" => bats.iter() "state_of_charge" => bats.iter()
.map(|b| b.state_of_charge().value) .map(|b| b.state_of_charge().value)
@ -58,10 +62,28 @@ fn get_text(
.map(|b| b.state_of_health().value) .map(|b| b.state_of_health().value)
.sum::<f32>() .sum::<f32>()
/ bats.len() as f32 * 100_f32, / bats.len() as f32 * 100_f32,
"state" => bats.iter() "state" => {
let states = bats.iter()
.map(|b| format!("{:?}", b.state())) .map(|b| format!("{:?}", b.state()))
.next() .collect::<HashSet<String>>();
.unwrap_or_default(), if states.len() == 1 {
states.iter().next().unwrap().to_owned()
} else {
let mut comma_sep_string = String::from("[");
let mut first = true;
for state in states {
if first {
comma_sep_string = comma_sep_string + &state;
first = false;
} else {
comma_sep_string = comma_sep_string
+ ", " + &state;
}
}
comma_sep_string += "]";
comma_sep_string
}
},
}) })
} }
Err(err) => format!("{}", err), Err(err) => format!("{}", err),

Loading…
Cancel
Save