use crate::Result;
use crate::api::models::access_point::AccessPoint;
use crate::api::models::{Network, WifiSecurity};
use crate::core::connection::{connect, connect_to_bssid, disconnect, forget_by_name_and_type};
use crate::core::scan::{list_access_points, list_networks, scan_networks};
use crate::core::wifi_device::set_wifi_enabled_for_interface;
use crate::types::constants::device_type;
#[derive(Debug, Clone)]
pub struct WifiScope {
pub(crate) conn: zbus::Connection,
pub(crate) interface: String,
pub(crate) timeout_config: crate::api::models::TimeoutConfig,
}
impl WifiScope {
#[must_use]
pub fn interface(&self) -> &str {
&self.interface
}
pub async fn scan(&self) -> Result<()> {
scan_networks(&self.conn, Some(&self.interface)).await
}
pub async fn list_networks(&self) -> Result<Vec<Network>> {
list_networks(&self.conn, Some(&self.interface)).await
}
pub async fn list_access_points(&self) -> Result<Vec<AccessPoint>> {
list_access_points(&self.conn, Some(&self.interface)).await
}
pub async fn connect(&self, ssid: &str, creds: WifiSecurity) -> Result<()> {
connect(
&self.conn,
ssid,
creds,
Some(&self.interface),
Some(self.timeout_config),
)
.await
}
pub async fn connect_to_bssid(
&self,
ssid: &str,
bssid: Option<&str>,
creds: WifiSecurity,
) -> Result<()> {
connect_to_bssid(
&self.conn,
ssid,
bssid,
creds,
Some(&self.interface),
Some(self.timeout_config),
)
.await
}
pub async fn disconnect(&self) -> Result<()> {
disconnect(&self.conn, Some(&self.interface), Some(self.timeout_config)).await
}
pub async fn set_enabled(&self, enabled: bool) -> Result<()> {
set_wifi_enabled_for_interface(&self.conn, &self.interface, enabled).await
}
pub async fn forget(&self, ssid: &str) -> Result<()> {
forget_by_name_and_type(
&self.conn,
ssid,
Some(device_type::WIFI),
Some(self.timeout_config),
)
.await
}
}