fix: retry connection to settings daemon and allow requests for brightness values
This commit is contained in:
parent
a96987091e
commit
703a934b09
1 changed files with 47 additions and 9 deletions
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
// XXX error handling?
|
// XXX error handling?
|
||||||
|
|
||||||
use std::hash::Hash;
|
use std::{hash::Hash, time::Duration};
|
||||||
|
|
||||||
use futures::{FutureExt, StreamExt};
|
use futures::{FutureExt, StreamExt};
|
||||||
use iced_futures::Subscription;
|
use iced_futures::Subscription;
|
||||||
|
|
@ -33,22 +33,50 @@ pub fn subscription(connection: zbus::Connection) -> iced_futures::Subscription<
|
||||||
}| {
|
}| {
|
||||||
let connection = connection.clone();
|
let connection = connection.clone();
|
||||||
async move {
|
async move {
|
||||||
let settings_daemon = match CosmicSettingsDaemonProxy::new(&connection).await {
|
let count = 5;
|
||||||
Ok(value) => value,
|
let mut settings_daemon = None;
|
||||||
Err(err) => {
|
for _ in 0..5 {
|
||||||
log::error!("Error connecting to settings daemon: {}", err);
|
if count == 4 {
|
||||||
futures::future::pending().await
|
return futures::future::pending().await;
|
||||||
}
|
}
|
||||||
};
|
match CosmicSettingsDaemonProxy::new(&connection).await {
|
||||||
|
Ok(value) => {
|
||||||
|
// interface methods can be called
|
||||||
|
// FIXME why does this fail sometimes??
|
||||||
|
if let Err(err) = value.display_brightness().await {
|
||||||
|
log::error!("Error connecting to settings daemon: {}", err);
|
||||||
|
|
||||||
|
tokio::time::sleep(Duration::from_secs(1)).await;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if let Err(err) = value.max_display_brightness().await {
|
||||||
|
log::error!("Error connecting to settings daemon: {}", err);
|
||||||
|
tokio::time::sleep(Duration::from_secs(1)).await;
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
settings_daemon = Some(value);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Err(err) => {
|
||||||
|
log::error!("Error connecting to settings daemon: {}", err);
|
||||||
|
|
||||||
|
tokio::time::sleep(Duration::from_secs(1)).await;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
let settings_daemon = settings_daemon.unwrap();
|
||||||
let (tx, rx) = unbounded_channel();
|
let (tx, rx) = unbounded_channel();
|
||||||
|
|
||||||
let max_brightness_stream = settings_daemon
|
let max_brightness_stream = settings_daemon
|
||||||
.receive_max_display_brightness_changed()
|
.receive_max_display_brightness_changed()
|
||||||
.await;
|
.await;
|
||||||
let brightness_stream = settings_daemon.receive_display_brightness_changed().await;
|
|
||||||
|
|
||||||
let initial = futures::stream::iter([Event::Sender(tx)]);
|
let brightness_stream = settings_daemon.receive_display_brightness_changed().await;
|
||||||
|
let mut init = vec![Event::Sender(tx)];
|
||||||
|
|
||||||
|
let initial = futures::stream::iter(init);
|
||||||
|
|
||||||
initial.chain(futures::stream_select!(
|
initial.chain(futures::stream_select!(
|
||||||
Box::pin(UnboundedReceiverStream::new(rx).filter_map(move |request| {
|
Box::pin(UnboundedReceiverStream::new(rx).filter_map(move |request| {
|
||||||
|
|
@ -59,6 +87,14 @@ pub fn subscription(connection: zbus::Connection) -> iced_futures::Subscription<
|
||||||
let _ =
|
let _ =
|
||||||
settings_daemon.set_display_brightness(brightness).await;
|
settings_daemon.set_display_brightness(brightness).await;
|
||||||
}
|
}
|
||||||
|
Request::GetDisplayBrightness => {
|
||||||
|
let b = settings_daemon.display_brightness().await;
|
||||||
|
return Some(Event::DisplayBrightness(b.ok()?));
|
||||||
|
}
|
||||||
|
Request::GetMaxDisplayBrightness => {
|
||||||
|
let m = settings_daemon.max_display_brightness().await;
|
||||||
|
return Some(Event::MaxDisplayBrightness(m.ok()?));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
None::<Event>
|
None::<Event>
|
||||||
}
|
}
|
||||||
|
|
@ -102,4 +138,6 @@ trait CosmicSettingsDaemon {
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub enum Request {
|
pub enum Request {
|
||||||
SetDisplayBrightness(i32),
|
SetDisplayBrightness(i32),
|
||||||
|
GetDisplayBrightness,
|
||||||
|
GetMaxDisplayBrightness,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue