fix: Use threading for every single dbus call on audio

This commit is contained in:
Fabio Lenherr / DashieTM 2023-11-15 23:24:35 +01:00
parent ed905cd075
commit af06f8da32
5 changed files with 176 additions and 138 deletions

View file

@ -4,13 +4,13 @@ use std::time::Duration;
use adw::glib;
use adw::glib::Object;
use adw::prelude::{ButtonExt, RangeExt, CheckButtonExt};
use adw::prelude::{ButtonExt, CheckButtonExt, RangeExt};
use dbus::blocking::Connection;
use dbus::Error;
use glib::subclass::types::ObjectSubclassIsExt;
use glib::{clone, Propagation};
use gtk::{gio, CheckButton};
use ReSet_Lib::audio::audio::Source;
use gtk::CheckButton;
use super::sourceEntryImpl;
@ -80,51 +80,60 @@ impl SourceEntry {
}
pub fn set_source_volume(value: f64, index: u32, channels: u16) -> bool {
gio::spawn_blocking(move || {
let conn = Connection::new_session().unwrap();
let proxy = conn.with_proxy(
"org.xetibo.ReSet",
"/org/xetibo/ReSet",
Duration::from_millis(1000),
);
let res: Result<(bool,), Error> = proxy.method_call(
let _: Result<(), Error> = proxy.method_call(
"org.xetibo.ReSet",
"SetSourceVolume",
(index, channels, value as u32),
);
if res.is_err() {
return false;
}
res.unwrap().0
// if res.is_err() {
// return false;
// }
// res.unwrap().0
});
true
}
pub fn toggle_source_mute(index: u32, muted: bool) -> bool {
let conn = Connection::new_session().unwrap();
let proxy = conn.with_proxy(
"org.xetibo.ReSet",
"/org/xetibo/ReSet",
Duration::from_millis(1000),
);
let res: Result<(bool,), Error> =
proxy.method_call("org.xetibo.ReSet", "SetSourceMute", (index, muted));
if res.is_err() {
return false;
}
res.unwrap().0
}
pub fn set_default_source(name: Arc<String>) {
thread::spawn(move || {
gio::spawn_blocking(move || {
let conn = Connection::new_session().unwrap();
let proxy = conn.with_proxy(
"org.xetibo.ReSet",
"/org/xetibo/ReSet",
Duration::from_millis(1000),
);
let res: Result<(bool,), Error> =
let _: Result<(), Error> =
proxy.method_call("org.xetibo.ReSet", "SetSourceMute", (index, muted));
// if res.is_err() {
// return false;
// }
// res.unwrap().0
});
true
}
pub fn set_default_source(name: Arc<String>) -> bool {
gio::spawn_blocking(move || {
let conn = Connection::new_session().unwrap();
let proxy = conn.with_proxy(
"org.xetibo.ReSet",
"/org/xetibo/ReSet",
Duration::from_millis(1000),
);
let _: Result<(), Error> =
proxy.method_call("org.xetibo.ReSet", "SetDefaultSink", (name.as_str(),));
if res.is_err() {
return;
}
// if res.is_err() {
// return;
// }
// handle change
});
true
}
// TODO propagate error from dbus