1
0
Fork 0
mirror of https://github.com/Zedfrigg/ironbar.git synced 2025-07-04 12:11:03 +02:00

feat(networkmanager): add config for icons

This commit is contained in:
Rodrigo Batista de Moraes 2024-07-13 20:52:40 -03:00
parent 4fe03031dd
commit 81900c6a29
3 changed files with 186 additions and 55 deletions

View file

@ -1,3 +1,5 @@
mod config;
use color_eyre::Result;
use futures_lite::StreamExt;
use futures_signals::signal::SignalExt;
@ -22,6 +24,9 @@ pub struct NetworkManagerModule {
#[serde(default = "default_icon_size")]
icon_size: i32,
#[serde(default)]
icons: config::IconsConfig,
#[serde(flatten)]
pub common: Option<CommonConfig>,
}
@ -106,34 +111,27 @@ impl Module<GtkBox> for NetworkManagerModule {
}
update_icon!(wired_icon, wired, {
WiredState::Connected => "icon:network-wired-symbolic",
WiredState::Disconnected => "icon:network-wired-disconnected-symbolic",
WiredState::Connected => &self.icons.wired.connected,
WiredState::Disconnected => &self.icons.wired.disconnected,
WiredState::NotPresent | WiredState::Unknown => "",
});
update_icon!(wifi_icon, wifi, {
WifiState::Connected(state) => {
let icons = [
"icon:network-wireless-signal-none-symbolic",
"icon:network-wireless-signal-weak-symbolic",
"icon:network-wireless-signal-ok-symbolic",
"icon:network-wireless-signal-good-symbolic",
"icon:network-wireless-signal-excellent-symbolic",
];
let n = strengh_to_level(state.strength, icons.len());
icons[n]
let n = strengh_to_level(state.strength, self.icons.wifi.levels.len());
&self.icons.wifi.levels[n]
},
WifiState::Disconnected => "icon:network-wireless-offline-symbolic",
WifiState::Disabled => "icon:network-wireless-hardware-disabled-symbolic",
WifiState::Disconnected => &self.icons.wifi.disconnected,
WifiState::Disabled => &self.icons.wifi.disabled,
WifiState::NotPresent | WifiState::Unknown => "",
});
update_icon!(cellular_icon, cellular, {
CellularState::Connected => "icon:network-cellular-connected-symbolic",
CellularState::Disconnected => "icon:network-cellular-offline-symbolic",
CellularState::Disabled => "icon:network-cellular-hardware-disabled-symbolic",
CellularState::Connected => &self.icons.cellular.connected,
CellularState::Disconnected => &self.icons.cellular.disconnected,
CellularState::Disabled => &self.icons.cellular.disabled,
CellularState::NotPresent | CellularState::Unknown => "",
});
update_icon!(vpn_icon, vpn, {
VpnState::Connected(_) => "icon:network-vpn-symbolic",
VpnState::Connected(_) => &self.icons.vpn.connected,
VpnState::Disconnected | VpnState::Unknown => "",
});
});

View file

@ -0,0 +1,120 @@
use serde::Deserialize;
macro_rules! default_function {
($(($name:ident, $default:expr),)*) => {
$(
fn $name() -> String {
($default).to_string()
}
)*
};
}
#[derive(Debug, Deserialize, Clone, Default)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct IconsConfig {
#[serde(default)]
pub wired: IconsConfigWired,
#[serde(default)]
pub wifi: IconsConfigWifi,
#[serde(default)]
pub cellular: IconsConfigCellular,
#[serde(default)]
pub vpn: IconsConfigVpn,
}
#[derive(Debug, Deserialize, Clone)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct IconsConfigWired {
#[serde(default = "default_wired_connected")]
pub connected: String,
#[serde(default = "default_wired_disconnected")]
pub disconnected: String,
}
impl Default for IconsConfigWired {
fn default() -> Self {
Self {
connected: default_wired_connected(),
disconnected: default_wired_disconnected(),
}
}
}
#[derive(Debug, Deserialize, Clone)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct IconsConfigWifi {
#[serde(default = "default_wifi_levels")]
pub levels: Vec<String>,
#[serde(default = "default_wifi_disconnected")]
pub disconnected: String,
#[serde(default = "default_wifi_disabled")]
pub disabled: String,
}
impl Default for IconsConfigWifi {
fn default() -> Self {
Self {
levels: default_wifi_levels(),
disconnected: default_wifi_disconnected(),
disabled: default_wifi_disabled(),
}
}
}
#[derive(Debug, Deserialize, Clone)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct IconsConfigCellular {
#[serde(default = "default_cellular_connected")]
pub connected: String,
#[serde(default = "default_cellular_disconnected")]
pub disconnected: String,
#[serde(default = "default_cellular_disabled")]
pub disabled: String,
}
impl Default for IconsConfigCellular {
fn default() -> Self {
Self {
connected: default_cellular_connected(),
disconnected: default_cellular_disconnected(),
disabled: default_cellular_disabled(),
}
}
}
#[derive(Debug, Deserialize, Clone)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct IconsConfigVpn {
#[serde(default = "default_vpn_connected")]
pub connected: String,
}
impl Default for IconsConfigVpn {
fn default() -> Self {
Self {
connected: default_vpn_connected(),
}
}
}
pub fn default_wifi_levels() -> Vec<String> {
vec![
"icon:network-wireless-signal-none-symbolic".to_string(),
"icon:network-wireless-signal-weak-symbolic".to_string(),
"icon:network-wireless-signal-ok-symbolic".to_string(),
"icon:network-wireless-signal-good-symbolic".to_string(),
"icon:network-wireless-signal-excellent-symbolic".to_string(),
]
}
default_function! {
(default_wired_connected, "icon:network-wired-symbolic"),
(default_wired_disconnected, "icon:network-wired-disconnected-symbolic"),
(default_wifi_disconnected, "icon:network-wireless-offline-symbolic"),
(default_wifi_disabled, "icon:network-wireless-hardware-disabled-symbolic"),
(default_cellular_connected,"icon:network-cellular-connected-symbolic"),
(default_cellular_disconnected,"icon:network-cellular-offline-symbolic"),
(default_cellular_disabled,"icon:network-cellular-hardware-disabled-symbolic"),
(default_vpn_connected, "icon:network-vpn-symbolic"),
}