WIP NetworkManager tile
This commit is contained in:
parent
49facf67c3
commit
c0f832bcef
7
build.rs
7
build.rs
|
@ -12,7 +12,12 @@ fn main() {
|
||||||
println!("cargo:rerun-if-env-changed=DBUS_XML_PATH");
|
println!("cargo:rerun-if-env-changed=DBUS_XML_PATH");
|
||||||
println!("cargo:rerun-if-changed=build.rs");
|
println!("cargo:rerun-if-changed=build.rs");
|
||||||
|
|
||||||
let required_files = HashSet::from(["org.freedesktop.hostname1.xml"]);
|
let required_files = HashSet::from([
|
||||||
|
"org.freedesktop.NetworkManager.AccessPoint.xml",
|
||||||
|
"org.freedesktop.NetworkManager.Connection.Active.xml",
|
||||||
|
"org.freedesktop.NetworkManager.xml",
|
||||||
|
"org.freedesktop.hostname1.xml",
|
||||||
|
]);
|
||||||
let required_interfaces = required_files
|
let required_interfaces = required_files
|
||||||
.iter()
|
.iter()
|
||||||
.map(|name| name.strip_suffix(".xml").unwrap().to_string())
|
.map(|name| name.strip_suffix(".xml").unwrap().to_string())
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
pkgs = import nixpkgs { inherit system; };
|
pkgs = import nixpkgs { inherit system; };
|
||||||
inherit (pkgs) lib;
|
inherit (pkgs) lib;
|
||||||
dbusPaths = lib.makeSearchPathOutput "out" "share/dbus-1/interfaces"
|
dbusPaths = lib.makeSearchPathOutput "out" "share/dbus-1/interfaces"
|
||||||
(with pkgs; [ systemd ]);
|
(with pkgs; [ systemd networkmanager ]);
|
||||||
in rec {
|
in rec {
|
||||||
packages.rustybar = with pkgs;
|
packages.rustybar = with pkgs;
|
||||||
rustPlatform.buildRustPackage {
|
rustPlatform.buildRustPackage {
|
||||||
|
|
|
@ -60,6 +60,7 @@ pub enum TileConfig {
|
||||||
LocalTime(LocalTimeConfig),
|
LocalTime(LocalTimeConfig),
|
||||||
InternetTime(InternetTimeConfig),
|
InternetTime(InternetTimeConfig),
|
||||||
Iwd(IwdConfig),
|
Iwd(IwdConfig),
|
||||||
|
NetworkManager(NetworkManagerConfig),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(SmartDefault, Deserialize, Clone, Debug)]
|
#[derive(SmartDefault, Deserialize, Clone, Debug)]
|
||||||
|
@ -151,6 +152,14 @@ pub struct InternetTimeConfig {
|
||||||
// No update field, update on the, uuh, wtf is metric time
|
// No update field, update on the, uuh, wtf is metric time
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(SmartDefault, Deserialize, Clone, Debug)]
|
||||||
|
#[serde(default)]
|
||||||
|
pub struct NetworkManagerConfig {
|
||||||
|
#[default(true)]
|
||||||
|
pub use_symbols: bool,
|
||||||
|
// No update field, we listen for events
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, StructOpt)]
|
#[derive(Debug, StructOpt)]
|
||||||
#[structopt(
|
#[structopt(
|
||||||
name = "rustybar",
|
name = "rustybar",
|
||||||
|
@ -209,6 +218,9 @@ pub fn launch_tile(
|
||||||
TileConfig::SystemTime(c) => tiles::system_time(c, output_chan).await,
|
TileConfig::SystemTime(c) => tiles::system_time(c, output_chan).await,
|
||||||
TileConfig::LocalTime(c) => tiles::local_time(c, output_chan).await,
|
TileConfig::LocalTime(c) => tiles::local_time(c, output_chan).await,
|
||||||
TileConfig::InternetTime(c) => tiles::internet_time(c, output_chan).await,
|
TileConfig::InternetTime(c) => tiles::internet_time(c, output_chan).await,
|
||||||
|
TileConfig::NetworkManager(c) => {
|
||||||
|
tiles::network_manager(c, output_chan, dbus_conn).await
|
||||||
|
}
|
||||||
};
|
};
|
||||||
match result {
|
match result {
|
||||||
Ok(_) => warn!("Tile {} exited without error", tile_id),
|
Ok(_) => warn!("Tile {} exited without error", tile_id),
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
#![allow(clippy::needless_borrow)]
|
#![allow(clippy::needless_borrow)]
|
||||||
|
#![allow(non_snake_case)]
|
||||||
|
|
||||||
include!(concat!(env!("OUT_DIR"), "/generated.rs"));
|
include!(concat!(env!("OUT_DIR"), "/generated.rs"));
|
||||||
|
|
|
@ -5,6 +5,7 @@ pub mod iwd;
|
||||||
pub mod load;
|
pub mod load;
|
||||||
pub mod local_time;
|
pub mod local_time;
|
||||||
pub mod memory;
|
pub mod memory;
|
||||||
|
pub mod network_manager;
|
||||||
pub mod system_time;
|
pub mod system_time;
|
||||||
pub mod utc_time;
|
pub mod utc_time;
|
||||||
pub use battery::battery;
|
pub use battery::battery;
|
||||||
|
@ -14,5 +15,6 @@ pub use iwd::iwd;
|
||||||
pub use load::load;
|
pub use load::load;
|
||||||
pub use local_time::local_time;
|
pub use local_time::local_time;
|
||||||
pub use memory::memory;
|
pub use memory::memory;
|
||||||
|
pub use network_manager::network_manager;
|
||||||
pub use system_time::system_time;
|
pub use system_time::system_time;
|
||||||
pub use utc_time::utc_time;
|
pub use utc_time::utc_time;
|
||||||
|
|
46
src/tiles/network_manager.rs
Normal file
46
src/tiles/network_manager.rs
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
use crate::config::NetworkManagerConfig;
|
||||||
|
use crate::generated::OrgFreedesktopNetworkManager;
|
||||||
|
use crate::generated::OrgFreedesktopNetworkManagerAccessPoint;
|
||||||
|
use crate::generated::OrgFreedesktopNetworkManagerConnectionActive;
|
||||||
|
use crate::output::OutputChannel;
|
||||||
|
use crate::tile::Block;
|
||||||
|
use dbus::nonblock::{Proxy, SyncConnection};
|
||||||
|
use std::sync::Arc;
|
||||||
|
use std::time::Duration;
|
||||||
|
|
||||||
|
pub async fn network_manager(
|
||||||
|
config: NetworkManagerConfig,
|
||||||
|
output: OutputChannel,
|
||||||
|
dbus_conn: Arc<SyncConnection>,
|
||||||
|
) -> eyre::Result<()> {
|
||||||
|
let root_proxy = Proxy::new(
|
||||||
|
"org.freedesktop.NetworkManager",
|
||||||
|
"/org/freedesktop/NetworkManager",
|
||||||
|
Duration::from_secs(5),
|
||||||
|
dbus_conn.clone(),
|
||||||
|
);
|
||||||
|
|
||||||
|
let primary_connection = root_proxy.primary_connection().await?;
|
||||||
|
let primary_connection_proxy = Proxy::new(
|
||||||
|
"org.freedesktop.NetworkManager",
|
||||||
|
primary_connection,
|
||||||
|
Duration::from_secs(5),
|
||||||
|
dbus_conn.clone(),
|
||||||
|
);
|
||||||
|
|
||||||
|
let specific_object = primary_connection_proxy.specific_object().await?;
|
||||||
|
let specific_object_proxy = Proxy::new(
|
||||||
|
"org.freedesktop.NetworkManager",
|
||||||
|
specific_object,
|
||||||
|
Duration::from_secs(5),
|
||||||
|
dbus_conn.clone(),
|
||||||
|
);
|
||||||
|
|
||||||
|
let ssid = specific_object_proxy.ssid().await?;
|
||||||
|
|
||||||
|
log::warn!("got ssid: {}", String::from_utf8_lossy(&ssid));
|
||||||
|
|
||||||
|
loop {
|
||||||
|
tokio::time::sleep(Duration::from_secs(3600)).await;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue