mirror of
https://github.com/LGUG2Z/komorebi.git
synced 2026-04-25 01:58:51 +02:00
feat(bar): only collect enabled widgets
This commit is contained in:
@@ -315,12 +315,14 @@ impl Komobar {
|
|||||||
let mut left_widgets = config
|
let mut left_widgets = config
|
||||||
.left_widgets
|
.left_widgets
|
||||||
.iter()
|
.iter()
|
||||||
|
.filter(|config| config.enabled())
|
||||||
.map(|config| config.as_boxed_bar_widget())
|
.map(|config| config.as_boxed_bar_widget())
|
||||||
.collect::<Vec<Box<dyn BarWidget>>>();
|
.collect::<Vec<Box<dyn BarWidget>>>();
|
||||||
|
|
||||||
let mut center_widgets = match &config.center_widgets {
|
let mut center_widgets = match &config.center_widgets {
|
||||||
Some(center_widgets) => center_widgets
|
Some(center_widgets) => center_widgets
|
||||||
.iter()
|
.iter()
|
||||||
|
.filter(|config| config.enabled())
|
||||||
.map(|config| config.as_boxed_bar_widget())
|
.map(|config| config.as_boxed_bar_widget())
|
||||||
.collect::<Vec<Box<dyn BarWidget>>>(),
|
.collect::<Vec<Box<dyn BarWidget>>>(),
|
||||||
None => vec![],
|
None => vec![],
|
||||||
@@ -329,6 +331,7 @@ impl Komobar {
|
|||||||
let mut right_widgets = config
|
let mut right_widgets = config
|
||||||
.right_widgets
|
.right_widgets
|
||||||
.iter()
|
.iter()
|
||||||
|
.filter(|config| config.enabled())
|
||||||
.map(|config| config.as_boxed_bar_widget())
|
.map(|config| config.as_boxed_bar_widget())
|
||||||
.collect::<Vec<Box<dyn BarWidget>>>();
|
.collect::<Vec<Box<dyn BarWidget>>>();
|
||||||
|
|
||||||
|
|||||||
@@ -30,37 +30,18 @@ pub struct BatteryConfig {
|
|||||||
|
|
||||||
impl From<BatteryConfig> for Battery {
|
impl From<BatteryConfig> for Battery {
|
||||||
fn from(value: BatteryConfig) -> Self {
|
fn from(value: BatteryConfig) -> Self {
|
||||||
let manager = Manager::new().unwrap();
|
let data_refresh_interval = value.data_refresh_interval.unwrap_or(10);
|
||||||
let mut last_state = String::new();
|
|
||||||
let mut state = None;
|
|
||||||
let prefix = value.label_prefix.unwrap_or(LabelPrefix::Icon);
|
|
||||||
|
|
||||||
if let Ok(mut batteries) = manager.batteries() {
|
|
||||||
if let Some(Ok(first)) = batteries.nth(0) {
|
|
||||||
let percentage = first.state_of_charge().get::<percent>();
|
|
||||||
match first.state() {
|
|
||||||
State::Charging => state = Some(BatteryState::Charging),
|
|
||||||
State::Discharging => state = Some(BatteryState::Discharging),
|
|
||||||
_ => {}
|
|
||||||
}
|
|
||||||
|
|
||||||
last_state = match prefix {
|
|
||||||
LabelPrefix::Text | LabelPrefix::IconAndText => {
|
|
||||||
format!("BAT: {percentage:.0}%")
|
|
||||||
}
|
|
||||||
LabelPrefix::None | LabelPrefix::Icon => format!("{percentage:.0}%"),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
enable: value.enable,
|
enable: value.enable,
|
||||||
manager,
|
manager: Manager::new().unwrap(),
|
||||||
last_state,
|
last_state: String::new(),
|
||||||
data_refresh_interval: value.data_refresh_interval.unwrap_or(10),
|
data_refresh_interval,
|
||||||
label_prefix: prefix,
|
label_prefix: value.label_prefix.unwrap_or(LabelPrefix::Icon),
|
||||||
state: state.unwrap_or(BatteryState::Discharging),
|
state: BatteryState::Discharging,
|
||||||
last_updated: Instant::now(),
|
last_updated: Instant::now()
|
||||||
|
.checked_sub(Duration::from_secs(data_refresh_interval))
|
||||||
|
.unwrap(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,17 +30,18 @@ pub struct CpuConfig {
|
|||||||
|
|
||||||
impl From<CpuConfig> for Cpu {
|
impl From<CpuConfig> for Cpu {
|
||||||
fn from(value: CpuConfig) -> Self {
|
fn from(value: CpuConfig) -> Self {
|
||||||
let mut system =
|
let data_refresh_interval = value.data_refresh_interval.unwrap_or(10);
|
||||||
System::new_with_specifics(RefreshKind::default().without_memory().without_processes());
|
|
||||||
|
|
||||||
system.refresh_cpu_usage();
|
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
enable: value.enable,
|
enable: value.enable,
|
||||||
system,
|
system: System::new_with_specifics(
|
||||||
data_refresh_interval: value.data_refresh_interval.unwrap_or(10),
|
RefreshKind::default().without_memory().without_processes(),
|
||||||
|
),
|
||||||
|
data_refresh_interval,
|
||||||
label_prefix: value.label_prefix.unwrap_or(LabelPrefix::IconAndText),
|
label_prefix: value.label_prefix.unwrap_or(LabelPrefix::IconAndText),
|
||||||
last_updated: Instant::now(),
|
last_updated: Instant::now()
|
||||||
|
.checked_sub(Duration::from_secs(data_refresh_interval))
|
||||||
|
.unwrap(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,17 +30,18 @@ pub struct MemoryConfig {
|
|||||||
|
|
||||||
impl From<MemoryConfig> for Memory {
|
impl From<MemoryConfig> for Memory {
|
||||||
fn from(value: MemoryConfig) -> Self {
|
fn from(value: MemoryConfig) -> Self {
|
||||||
let mut system =
|
let data_refresh_interval = value.data_refresh_interval.unwrap_or(10);
|
||||||
System::new_with_specifics(RefreshKind::default().without_cpu().without_processes());
|
|
||||||
|
|
||||||
system.refresh_memory();
|
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
enable: value.enable,
|
enable: value.enable,
|
||||||
system,
|
system: System::new_with_specifics(
|
||||||
data_refresh_interval: value.data_refresh_interval.unwrap_or(10),
|
RefreshKind::default().without_cpu().without_processes(),
|
||||||
|
),
|
||||||
|
data_refresh_interval,
|
||||||
label_prefix: value.label_prefix.unwrap_or(LabelPrefix::IconAndText),
|
label_prefix: value.label_prefix.unwrap_or(LabelPrefix::IconAndText),
|
||||||
last_updated: Instant::now(),
|
last_updated: Instant::now()
|
||||||
|
.checked_sub(Duration::from_secs(data_refresh_interval))
|
||||||
|
.unwrap(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,4 +54,35 @@ impl WidgetConfig {
|
|||||||
WidgetConfig::Time(config) => Box::new(Time::from(config.clone())),
|
WidgetConfig::Time(config) => Box::new(Time::from(config.clone())),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn enabled(&self) -> bool {
|
||||||
|
match self {
|
||||||
|
WidgetConfig::Battery(config) => config.enable,
|
||||||
|
WidgetConfig::Cpu(config) => config.enable,
|
||||||
|
WidgetConfig::Date(config) => config.enable,
|
||||||
|
WidgetConfig::Komorebi(config) => {
|
||||||
|
config.workspaces.enable
|
||||||
|
|| (if let Some(layout) = &config.layout {
|
||||||
|
layout.enable
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
})
|
||||||
|
|| (if let Some(focused_window) = &config.focused_window {
|
||||||
|
focused_window.enable
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
})
|
||||||
|
|| (if let Some(configuration_switcher) = &config.configuration_switcher {
|
||||||
|
configuration_switcher.enable
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
WidgetConfig::Media(config) => config.enable,
|
||||||
|
WidgetConfig::Memory(config) => config.enable,
|
||||||
|
WidgetConfig::Network(config) => config.enable,
|
||||||
|
WidgetConfig::Storage(config) => config.enable,
|
||||||
|
WidgetConfig::Time(config) => config.enable,
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user