diff --git a/com.steampowered.SteamOSManager1.xml b/com.steampowered.SteamOSManager1.xml
index b275bc6..d33c09d 100644
--- a/com.steampowered.SteamOSManager1.xml
+++ b/com.steampowered.SteamOSManager1.xml
@@ -296,6 +296,15 @@
Version available: 9
-->
+
+
+
diff --git a/src/daemon/user.rs b/src/daemon/user.rs
index 6b59da6..74a86b3 100644
--- a/src/daemon/user.rs
+++ b/src/daemon/user.rs
@@ -8,6 +8,7 @@
use anyhow::{bail, Result};
use serde::{Deserialize, Serialize};
use std::path::PathBuf;
+use tokio::sync::mpsc::Sender;
use tracing::error;
use tracing_subscriber::prelude::*;
use tracing_subscriber::{fmt, Registry};
@@ -16,7 +17,7 @@ use xdg::BaseDirectories;
use zbus::connection::Connection;
use zbus::ConnectionBuilder;
-use crate::daemon::{channel, Daemon, DaemonContext};
+use crate::daemon::{channel, Daemon, DaemonCommand, DaemonContext};
use crate::manager::user::SteamOSManager;
use crate::path;
use crate::udev::UdevMonitor;
@@ -98,14 +99,16 @@ impl DaemonContext for UserContext {
}
}
-async fn create_connections() -> Result<(Connection, Connection)> {
+pub(crate) type Command = DaemonCommand<()>;
+
+async fn create_connections(channel: Sender) -> Result<(Connection, Connection)> {
let system = Connection::system().await?;
let connection = ConnectionBuilder::session()?
.name("com.steampowered.SteamOSManager1")?
.build()
.await?;
- let manager = SteamOSManager::new(connection.clone(), &system).await?;
+ let manager = SteamOSManager::new(connection.clone(), &system, channel).await?;
connection
.object_server()
.at("/com/steampowered/SteamOSManager1", manager)
@@ -120,9 +123,9 @@ pub async fn daemon() -> Result<()> {
let stdout_log = fmt::layer();
let subscriber = Registry::default().with(stdout_log);
- let (_tx, rx) = channel::();
+ let (tx, rx) = channel::();
- let (session, system) = match create_connections().await {
+ let (session, system) = match create_connections(tx).await {
Ok(c) => c,
Err(e) => {
let _guard = tracing::subscriber::set_default(subscriber);
diff --git a/src/manager/user.rs b/src/manager/user.rs
index 2a8e4dc..5e2c328 100644
--- a/src/manager/user.rs
+++ b/src/manager/user.rs
@@ -8,12 +8,15 @@
use anyhow::Result;
use std::collections::HashMap;
+use tokio::sync::mpsc::Sender;
use tracing::error;
use zbus::proxy::Builder;
use zbus::zvariant::Fd;
use zbus::{fdo, interface, Connection, Proxy, SignalContext};
use crate::cec::{HdmiCecControl, HdmiCecState};
+use crate::daemon::user::Command;
+use crate::daemon::DaemonCommand;
use crate::error::{to_zbus_error, to_zbus_fdo_error, zbus_to_zbus_fdo};
use crate::hardware::check_support;
use crate::power::{
@@ -61,10 +64,11 @@ macro_rules! setter {
pub struct SteamOSManager {
proxy: Proxy<'static>,
hdmi_cec: HdmiCecControl<'static>,
+ channel: Sender,
}
impl SteamOSManager {
- pub async fn new(connection: Connection, system_conn: &Connection) -> Result {
+ pub async fn new(connection: Connection, system_conn: &Connection, channel: Sender) -> Result {
Ok(SteamOSManager {
hdmi_cec: HdmiCecControl::new(&connection).await?,
proxy: Builder::new(system_conn)
@@ -74,6 +78,7 @@ impl SteamOSManager {
.cache_properties(zbus::CacheProperties::No)
.build()
.await?,
+ channel,
})
}
}
@@ -308,12 +313,24 @@ impl SteamOSManager {
.await
.map_err(to_zbus_error)
}
+
+ async fn reload_config(&self) -> fdo::Result<()> {
+ self.channel
+ .send(DaemonCommand::ReadConfig)
+ .await
+ .inspect_err(|message| error!("Error sending ReadConfig command: {message}"))
+ .map_err(to_zbus_fdo_error)?;
+ method!(self, "ReloadConfig")
+ }
}
#[cfg(test)]
mod test {
use super::*;
use crate::testing;
+ use crate::daemon::channel;
+ use crate::daemon::user::UserContext;
+
use std::collections::{HashMap, HashSet};
use std::iter::zip;
use tokio::fs::read;
@@ -327,8 +344,9 @@ mod test {
async fn start() -> Result {
let handle = testing::start();
+ let (tx, _rx) = channel::();
let connection = ConnectionBuilder::session()?.build().await?;
- let manager = SteamOSManager::new(connection.clone(), &connection).await?;
+ let manager = SteamOSManager::new(connection.clone(), &connection, tx).await?;
connection
.object_server()
.at("/com/steampowered/SteamOSManager1", manager)
diff --git a/src/proxy.rs b/src/proxy.rs
index ac118ac..df8fcf6 100644
--- a/src/proxy.rs
+++ b/src/proxy.rs
@@ -46,6 +46,9 @@ trait Manager {
/// UpdateDock method
fn update_dock(&self) -> zbus::Result;
+ /// ReloadConfig method
+ fn reload_config(&self) -> zbus::Result<()>;
+
/// AlsCalibrationGain property
#[zbus(property)]
fn als_calibration_gain(&self) -> zbus::Result;