From cc67030828bf31728ddc5c7064bf0a88e0bbb88a Mon Sep 17 00:00:00 2001 From: Minijackson Date: Thu, 20 May 2021 20:18:33 +0200 Subject: update deps and nix, remove pa_eq as module is deprecated --- src/main.rs | 20 - src/pa_eq/dbus_api/equalizing_manager.rs | 291 -------- src/pa_eq/dbus_api/mod.rs | 6 - src/pa_eq/dbus_api/server_lookup.rs | 188 ----- src/pa_eq/dbus_api/sink.rs | 1128 ------------------------------ src/pa_eq/mod.rs | 115 --- src/utils.rs | 31 - 7 files changed, 1779 deletions(-) delete mode 100644 src/pa_eq/dbus_api/equalizing_manager.rs delete mode 100644 src/pa_eq/dbus_api/mod.rs delete mode 100644 src/pa_eq/dbus_api/server_lookup.rs delete mode 100644 src/pa_eq/dbus_api/sink.rs delete mode 100644 src/pa_eq/mod.rs (limited to 'src') diff --git a/src/main.rs b/src/main.rs index 062a77c..7a0d7c1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -20,8 +20,6 @@ mod cli; mod parsing; mod utils; -#[cfg(feature = "pa-eq")] -mod pa_eq; #[cfg(feature = "pa-effects")] mod pa_effects; @@ -37,24 +35,6 @@ pub struct Filter { coefficients: Vec, } -impl Filter { - fn pad(self, filter_rate: u32) -> Self { - Filter { - preamp: self.preamp, - frequencies: vec![0u32] - .into_iter() - .chain(self.frequencies.into_iter()) - .chain(vec![filter_rate / 2u32]) - .collect(), - coefficients: vec![1f64] - .into_iter() - .chain(self.coefficients.into_iter()) - .chain(vec![1f64]) - .collect(), - } - } -} - fn main() { match start() { Ok(()) => (), diff --git a/src/pa_eq/dbus_api/equalizing_manager.rs b/src/pa_eq/dbus_api/equalizing_manager.rs deleted file mode 100644 index a9eb7bc..0000000 --- a/src/pa_eq/dbus_api/equalizing_manager.rs +++ /dev/null @@ -1,291 +0,0 @@ -// This code was autogenerated with dbus-codegen-rust, see https://github.com/diwic/dbus-rs - -#![allow(dead_code)] -use dbus as dbus; -use dbus::arg; -use dbus::tree; - -pub trait OrgPulseAudioExtEqualizing1Manager { - type Err; - fn remove_profile(&self, name: &str) -> Result<(), Self::Err>; - fn get_interface_revision(&self) -> Result; - fn get_equalized_sinks(&self) -> Result>, Self::Err>; - fn get_profiles(&self) -> Result, Self::Err>; -} - -impl<'a, C: ::std::ops::Deref> OrgPulseAudioExtEqualizing1Manager for dbus::ConnPath<'a, C> { - type Err = dbus::Error; - - fn remove_profile(&self, name: &str) -> Result<(), Self::Err> { - let mut m = r#try!(self.method_call_with_args(&"org.PulseAudio.Ext.Equalizing1.Manager".into(), &"RemoveProfile".into(), |msg| { - let mut i = arg::IterAppend::new(msg); - i.append(name); - })); - r#try!(m.as_result()); - Ok(()) - } - - fn get_interface_revision(&self) -> Result { - ::get(&self, "org.PulseAudio.Ext.Equalizing1.Manager", "InterfaceRevision") - } - - fn get_equalized_sinks(&self) -> Result>, Self::Err> { - ::get(&self, "org.PulseAudio.Ext.Equalizing1.Manager", "EqualizedSinks") - } - - fn get_profiles(&self) -> Result, Self::Err> { - ::get(&self, "org.PulseAudio.Ext.Equalizing1.Manager", "Profiles") - } -} - -pub fn org_pulse_audio_ext_equalizing1_manager_server(factory: &tree::Factory, D>, data: D::Interface, f: F) -> tree::Interface, D> -where - D: tree::DataType, - D::Method: Default, - D::Property: Default, - T: OrgPulseAudioExtEqualizing1Manager, - F: 'static + for <'z> Fn(& 'z tree::MethodInfo<'_, tree::MTFn, D>) -> & 'z T, -{ - let i = factory.interface("org.PulseAudio.Ext.Equalizing1.Manager", data); - let f = ::std::sync::Arc::new(f); - let fclone = f.clone(); - let h = move |minfo: &tree::MethodInfo<'_, tree::MTFn, D>| { - let mut i = minfo.msg.iter_init(); - let name: &str = r#try!(i.read()); - let d = fclone(minfo); - r#try!(d.remove_profile(name)); - let rm = minfo.msg.method_return(); - Ok(vec!(rm)) - }; - let m = factory.method("RemoveProfile", Default::default(), h); - let m = m.in_arg(("name", "s")); - let i = i.add_m(m); - - let p = factory.property::("InterfaceRevision", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_interface_revision())); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::>, _>("EqualizedSinks", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_equalized_sinks())); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::, _>("Profiles", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_profiles())); - Ok(()) - }); - let i = i.add_p(p); - i -} - -#[derive(Debug, Default)] -pub struct OrgPulseAudioExtEqualizing1ManagerSinkAdded { - pub sink: dbus::Path<'static>, -} - -impl dbus::SignalArgs for OrgPulseAudioExtEqualizing1ManagerSinkAdded { - const NAME: &'static str = "SinkAdded"; - const INTERFACE: &'static str = "org.PulseAudio.Ext.Equalizing1.Manager"; - fn append(&self, i: &mut arg::IterAppend<'_>) { - (&self.sink as &dyn arg::RefArg).append(i); - } - fn get(&mut self, i: &mut arg::Iter<'_>) -> Result<(), arg::TypeMismatchError> { - self.sink = r#try!(i.read()); - Ok(()) - } -} - -#[derive(Debug, Default)] -pub struct OrgPulseAudioExtEqualizing1ManagerSinkRemoved { - pub sink: dbus::Path<'static>, -} - -impl dbus::SignalArgs for OrgPulseAudioExtEqualizing1ManagerSinkRemoved { - const NAME: &'static str = "SinkRemoved"; - const INTERFACE: &'static str = "org.PulseAudio.Ext.Equalizing1.Manager"; - fn append(&self, i: &mut arg::IterAppend<'_>) { - (&self.sink as &dyn arg::RefArg).append(i); - } - fn get(&mut self, i: &mut arg::Iter<'_>) -> Result<(), arg::TypeMismatchError> { - self.sink = r#try!(i.read()); - Ok(()) - } -} - -#[derive(Debug, Default)] -pub struct OrgPulseAudioExtEqualizing1ManagerProfilesChanged { -} - -impl dbus::SignalArgs for OrgPulseAudioExtEqualizing1ManagerProfilesChanged { - const NAME: &'static str = "ProfilesChanged"; - const INTERFACE: &'static str = "org.PulseAudio.Ext.Equalizing1.Manager"; - fn append(&self, _: &mut arg::IterAppend<'_>) { - } - fn get(&mut self, _: &mut arg::Iter<'_>) -> Result<(), arg::TypeMismatchError> { - Ok(()) - } -} - -pub trait OrgFreedesktopDBusIntrospectable { - type Err; - fn introspect(&self) -> Result; -} - -impl<'a, C: ::std::ops::Deref> OrgFreedesktopDBusIntrospectable for dbus::ConnPath<'a, C> { - type Err = dbus::Error; - - fn introspect(&self) -> Result { - let mut m = r#try!(self.method_call_with_args(&"org.freedesktop.DBus.Introspectable".into(), &"Introspect".into(), |_| { - })); - r#try!(m.as_result()); - let mut i = m.iter_init(); - let data: String = r#try!(i.read()); - Ok(data) - } -} - -pub fn org_freedesktop_dbus_introspectable_server(factory: &tree::Factory, D>, data: D::Interface, f: F) -> tree::Interface, D> -where - D: tree::DataType, - D::Method: Default, - T: OrgFreedesktopDBusIntrospectable, - F: 'static + for <'z> Fn(& 'z tree::MethodInfo<'_, tree::MTFn, D>) -> & 'z T, -{ - let i = factory.interface("org.freedesktop.DBus.Introspectable", data); - let f = ::std::sync::Arc::new(f); - let fclone = f.clone(); - let h = move |minfo: &tree::MethodInfo<'_, tree::MTFn, D>| { - let d = fclone(minfo); - let data = r#try!(d.introspect()); - let rm = minfo.msg.method_return(); - let rm = rm.append1(data); - Ok(vec!(rm)) - }; - let m = factory.method("Introspect", Default::default(), h); - let m = m.out_arg(("data", "s")); - let i = i.add_m(m); - i -} - -pub trait OrgFreedesktopDBusProperties { - type Err; - fn get(&self, interface_name: &str, property_name: &str) -> Result>, Self::Err>; - fn set(&self, interface_name: &str, property_name: &str, value: arg::Variant>) -> Result<(), Self::Err>; - fn get_all(&self, interface_name: &str) -> Result<::std::collections::HashMap>>, Self::Err>; -} - -impl<'a, C: ::std::ops::Deref> OrgFreedesktopDBusProperties for dbus::ConnPath<'a, C> { - type Err = dbus::Error; - - fn get(&self, interface_name: &str, property_name: &str) -> Result>, Self::Err> { - let mut m = r#try!(self.method_call_with_args(&"org.freedesktop.DBus.Properties".into(), &"Get".into(), |msg| { - let mut i = arg::IterAppend::new(msg); - i.append(interface_name); - i.append(property_name); - })); - r#try!(m.as_result()); - let mut i = m.iter_init(); - let value: arg::Variant> = r#try!(i.read()); - Ok(value) - } - - fn set(&self, interface_name: &str, property_name: &str, value: arg::Variant>) -> Result<(), Self::Err> { - let mut m = r#try!(self.method_call_with_args(&"org.freedesktop.DBus.Properties".into(), &"Set".into(), |msg| { - let mut i = arg::IterAppend::new(msg); - i.append(interface_name); - i.append(property_name); - i.append(value); - })); - r#try!(m.as_result()); - Ok(()) - } - - fn get_all(&self, interface_name: &str) -> Result<::std::collections::HashMap>>, Self::Err> { - let mut m = r#try!(self.method_call_with_args(&"org.freedesktop.DBus.Properties".into(), &"GetAll".into(), |msg| { - let mut i = arg::IterAppend::new(msg); - i.append(interface_name); - })); - r#try!(m.as_result()); - let mut i = m.iter_init(); - let props: ::std::collections::HashMap>> = r#try!(i.read()); - Ok(props) - } -} - -pub fn org_freedesktop_dbus_properties_server(factory: &tree::Factory, D>, data: D::Interface, f: F) -> tree::Interface, D> -where - D: tree::DataType, - D::Method: Default, - T: OrgFreedesktopDBusProperties, - F: 'static + for <'z> Fn(& 'z tree::MethodInfo<'_, tree::MTFn, D>) -> & 'z T, -{ - let i = factory.interface("org.freedesktop.DBus.Properties", data); - let f = ::std::sync::Arc::new(f); - let fclone = f.clone(); - let h = move |minfo: &tree::MethodInfo<'_, tree::MTFn, D>| { - let mut i = minfo.msg.iter_init(); - let interface_name: &str = r#try!(i.read()); - let property_name: &str = r#try!(i.read()); - let d = fclone(minfo); - let value = r#try!(d.get(interface_name, property_name)); - let rm = minfo.msg.method_return(); - let rm = rm.append1(value); - Ok(vec!(rm)) - }; - let m = factory.method("Get", Default::default(), h); - let m = m.in_arg(("interface_name", "s")); - let m = m.in_arg(("property_name", "s")); - let m = m.out_arg(("value", "v")); - let i = i.add_m(m); - - let fclone = f.clone(); - let h = move |minfo: &tree::MethodInfo<'_, tree::MTFn, D>| { - let mut i = minfo.msg.iter_init(); - let interface_name: &str = r#try!(i.read()); - let property_name: &str = r#try!(i.read()); - let value: arg::Variant> = r#try!(i.read()); - let d = fclone(minfo); - r#try!(d.set(interface_name, property_name, value)); - let rm = minfo.msg.method_return(); - Ok(vec!(rm)) - }; - let m = factory.method("Set", Default::default(), h); - let m = m.in_arg(("interface_name", "s")); - let m = m.in_arg(("property_name", "s")); - let m = m.in_arg(("value", "v")); - let i = i.add_m(m); - - let fclone = f.clone(); - let h = move |minfo: &tree::MethodInfo<'_, tree::MTFn, D>| { - let mut i = minfo.msg.iter_init(); - let interface_name: &str = r#try!(i.read()); - let d = fclone(minfo); - let props = r#try!(d.get_all(interface_name)); - let rm = minfo.msg.method_return(); - let rm = rm.append1(props); - Ok(vec!(rm)) - }; - let m = factory.method("GetAll", Default::default(), h); - let m = m.in_arg(("interface_name", "s")); - let m = m.out_arg(("props", "a{sv}")); - let i = i.add_m(m); - i -} diff --git a/src/pa_eq/dbus_api/mod.rs b/src/pa_eq/dbus_api/mod.rs deleted file mode 100644 index 79dd38a..0000000 --- a/src/pa_eq/dbus_api/mod.rs +++ /dev/null @@ -1,6 +0,0 @@ -#[allow(clippy::all)] -pub mod equalizing_manager; -#[allow(clippy::all)] -pub mod server_lookup; -#[allow(clippy::all)] -pub mod sink; diff --git a/src/pa_eq/dbus_api/server_lookup.rs b/src/pa_eq/dbus_api/server_lookup.rs deleted file mode 100644 index c959df8..0000000 --- a/src/pa_eq/dbus_api/server_lookup.rs +++ /dev/null @@ -1,188 +0,0 @@ -// This code was autogenerated with dbus-codegen-rust, see https://github.com/diwic/dbus-rs - -#![allow(dead_code)] -use dbus as dbus; -use dbus::arg; -use dbus::tree; - -pub trait OrgPulseAudioServerLookup1 { - type Err; - fn get_address(&self) -> Result; -} - -impl<'a, C: ::std::ops::Deref> OrgPulseAudioServerLookup1 for dbus::ConnPath<'a, C> { - type Err = dbus::Error; - - fn get_address(&self) -> Result { - ::get(&self, "org.PulseAudio.ServerLookup1", "Address") - } -} - -pub fn org_pulse_audio_server_lookup1_server(factory: &tree::Factory, D>, data: D::Interface, f: F) -> tree::Interface, D> -where - D: tree::DataType, - D::Method: Default, - D::Property: Default, - T: OrgPulseAudioServerLookup1, - F: 'static + for <'z> Fn(& 'z tree::MethodInfo<'_, tree::MTFn, D>) -> & 'z T, -{ - let i = factory.interface("org.PulseAudio.ServerLookup1", data); - let f = ::std::sync::Arc::new(f); - let p = factory.property::<&str, _>("Address", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_address())); - Ok(()) - }); - let i = i.add_p(p); - i -} - -pub trait OrgFreedesktopDBusIntrospectable { - type Err; - fn introspect(&self) -> Result; -} - -impl<'a, C: ::std::ops::Deref> OrgFreedesktopDBusIntrospectable for dbus::ConnPath<'a, C> { - type Err = dbus::Error; - - fn introspect(&self) -> Result { - let mut m = r#try!(self.method_call_with_args(&"org.freedesktop.DBus.Introspectable".into(), &"Introspect".into(), |_| { - })); - r#try!(m.as_result()); - let mut i = m.iter_init(); - let data: String = r#try!(i.read()); - Ok(data) - } -} - -pub fn org_freedesktop_dbus_introspectable_server(factory: &tree::Factory, D>, data: D::Interface, f: F) -> tree::Interface, D> -where - D: tree::DataType, - D::Method: Default, - T: OrgFreedesktopDBusIntrospectable, - F: 'static + for <'z> Fn(& 'z tree::MethodInfo<'_, tree::MTFn, D>) -> & 'z T, -{ - let i = factory.interface("org.freedesktop.DBus.Introspectable", data); - let f = ::std::sync::Arc::new(f); - let fclone = f.clone(); - let h = move |minfo: &tree::MethodInfo<'_, tree::MTFn, D>| { - let d = fclone(minfo); - let data = r#try!(d.introspect()); - let rm = minfo.msg.method_return(); - let rm = rm.append1(data); - Ok(vec!(rm)) - }; - let m = factory.method("Introspect", Default::default(), h); - let m = m.out_arg(("data", "s")); - let i = i.add_m(m); - i -} - -pub trait OrgFreedesktopDBusProperties { - type Err; - fn get(&self, interface_name: &str, property_name: &str) -> Result>, Self::Err>; - fn set(&self, interface_name: &str, property_name: &str, value: arg::Variant>) -> Result<(), Self::Err>; - fn get_all(&self, interface_name: &str) -> Result<::std::collections::HashMap>>, Self::Err>; -} - -impl<'a, C: ::std::ops::Deref> OrgFreedesktopDBusProperties for dbus::ConnPath<'a, C> { - type Err = dbus::Error; - - fn get(&self, interface_name: &str, property_name: &str) -> Result>, Self::Err> { - let mut m = r#try!(self.method_call_with_args(&"org.freedesktop.DBus.Properties".into(), &"Get".into(), |msg| { - let mut i = arg::IterAppend::new(msg); - i.append(interface_name); - i.append(property_name); - })); - r#try!(m.as_result()); - let mut i = m.iter_init(); - let value: arg::Variant> = r#try!(i.read()); - Ok(value) - } - - fn set(&self, interface_name: &str, property_name: &str, value: arg::Variant>) -> Result<(), Self::Err> { - let mut m = r#try!(self.method_call_with_args(&"org.freedesktop.DBus.Properties".into(), &"Set".into(), |msg| { - let mut i = arg::IterAppend::new(msg); - i.append(interface_name); - i.append(property_name); - i.append(value); - })); - r#try!(m.as_result()); - Ok(()) - } - - fn get_all(&self, interface_name: &str) -> Result<::std::collections::HashMap>>, Self::Err> { - let mut m = r#try!(self.method_call_with_args(&"org.freedesktop.DBus.Properties".into(), &"GetAll".into(), |msg| { - let mut i = arg::IterAppend::new(msg); - i.append(interface_name); - })); - r#try!(m.as_result()); - let mut i = m.iter_init(); - let props: ::std::collections::HashMap>> = r#try!(i.read()); - Ok(props) - } -} - -pub fn org_freedesktop_dbus_properties_server(factory: &tree::Factory, D>, data: D::Interface, f: F) -> tree::Interface, D> -where - D: tree::DataType, - D::Method: Default, - T: OrgFreedesktopDBusProperties, - F: 'static + for <'z> Fn(& 'z tree::MethodInfo<'_, tree::MTFn, D>) -> & 'z T, -{ - let i = factory.interface("org.freedesktop.DBus.Properties", data); - let f = ::std::sync::Arc::new(f); - let fclone = f.clone(); - let h = move |minfo: &tree::MethodInfo<'_, tree::MTFn, D>| { - let mut i = minfo.msg.iter_init(); - let interface_name: &str = r#try!(i.read()); - let property_name: &str = r#try!(i.read()); - let d = fclone(minfo); - let value = r#try!(d.get(interface_name, property_name)); - let rm = minfo.msg.method_return(); - let rm = rm.append1(value); - Ok(vec!(rm)) - }; - let m = factory.method("Get", Default::default(), h); - let m = m.in_arg(("interface_name", "s")); - let m = m.in_arg(("property_name", "s")); - let m = m.out_arg(("value", "v")); - let i = i.add_m(m); - - let fclone = f.clone(); - let h = move |minfo: &tree::MethodInfo<'_, tree::MTFn, D>| { - let mut i = minfo.msg.iter_init(); - let interface_name: &str = r#try!(i.read()); - let property_name: &str = r#try!(i.read()); - let value: arg::Variant> = r#try!(i.read()); - let d = fclone(minfo); - r#try!(d.set(interface_name, property_name, value)); - let rm = minfo.msg.method_return(); - Ok(vec!(rm)) - }; - let m = factory.method("Set", Default::default(), h); - let m = m.in_arg(("interface_name", "s")); - let m = m.in_arg(("property_name", "s")); - let m = m.in_arg(("value", "v")); - let i = i.add_m(m); - - let fclone = f.clone(); - let h = move |minfo: &tree::MethodInfo<'_, tree::MTFn, D>| { - let mut i = minfo.msg.iter_init(); - let interface_name: &str = r#try!(i.read()); - let d = fclone(minfo); - let props = r#try!(d.get_all(interface_name)); - let rm = minfo.msg.method_return(); - let rm = rm.append1(props); - Ok(vec!(rm)) - }; - let m = factory.method("GetAll", Default::default(), h); - let m = m.in_arg(("interface_name", "s")); - let m = m.out_arg(("props", "a{sv}")); - let i = i.add_m(m); - i -} diff --git a/src/pa_eq/dbus_api/sink.rs b/src/pa_eq/dbus_api/sink.rs deleted file mode 100644 index d902e64..0000000 --- a/src/pa_eq/dbus_api/sink.rs +++ /dev/null @@ -1,1128 +0,0 @@ -// This code was autogenerated with dbus-codegen-rust, see https://github.com/diwic/dbus-rs - -#![allow(dead_code)] -use dbus as dbus; -use dbus::arg; -use dbus::tree; - -pub trait OrgPulseAudioExtEqualizing1Equalizer { - type Err; - fn filter_at_points(&self, channel: u32, xs: Vec) -> Result<(Vec, f64), Self::Err>; - fn seed_filter(&self, channel: u32, xs: Vec, ys: Vec, preamp: f64) -> Result<(), Self::Err>; - fn save_profile(&self, channel: u32, name: &str) -> Result<(), Self::Err>; - fn load_profile(&self, channel: u32, name: &str) -> Result<(), Self::Err>; - fn set_filter(&self, channel: u32, ys: Vec, preamp: f64) -> Result<(), Self::Err>; - fn get_filter(&self, channel: u32) -> Result<(Vec, f64), Self::Err>; - fn save_state(&self) -> Result<(), Self::Err>; - fn base_profile(&self, channel: u32) -> Result; - fn get_interface_revision(&self) -> Result; - fn get_sample_rate(&self) -> Result; - fn get_filter_sample_rate(&self) -> Result; - fn get_nfilter_coefficients(&self) -> Result; - fn get_nchannels(&self) -> Result; -} - -impl<'a, C: ::std::ops::Deref> OrgPulseAudioExtEqualizing1Equalizer for dbus::ConnPath<'a, C> { - type Err = dbus::Error; - - fn filter_at_points(&self, channel: u32, xs: Vec) -> Result<(Vec, f64), Self::Err> { - let mut m = r#try!(self.method_call_with_args(&"org.PulseAudio.Ext.Equalizing1.Equalizer".into(), &"FilterAtPoints".into(), |msg| { - let mut i = arg::IterAppend::new(msg); - i.append(channel); - i.append(xs); - })); - r#try!(m.as_result()); - let mut i = m.iter_init(); - let ys: Vec = r#try!(i.read()); - let preamp: f64 = r#try!(i.read()); - Ok((ys, preamp)) - } - - fn seed_filter(&self, channel: u32, xs: Vec, ys: Vec, preamp: f64) -> Result<(), Self::Err> { - let mut m = r#try!(self.method_call_with_args(&"org.PulseAudio.Ext.Equalizing1.Equalizer".into(), &"SeedFilter".into(), |msg| { - let mut i = arg::IterAppend::new(msg); - i.append(channel); - i.append(xs); - i.append(ys); - i.append(preamp); - })); - r#try!(m.as_result()); - Ok(()) - } - - fn save_profile(&self, channel: u32, name: &str) -> Result<(), Self::Err> { - let mut m = r#try!(self.method_call_with_args(&"org.PulseAudio.Ext.Equalizing1.Equalizer".into(), &"SaveProfile".into(), |msg| { - let mut i = arg::IterAppend::new(msg); - i.append(channel); - i.append(name); - })); - r#try!(m.as_result()); - Ok(()) - } - - fn load_profile(&self, channel: u32, name: &str) -> Result<(), Self::Err> { - let mut m = r#try!(self.method_call_with_args(&"org.PulseAudio.Ext.Equalizing1.Equalizer".into(), &"LoadProfile".into(), |msg| { - let mut i = arg::IterAppend::new(msg); - i.append(channel); - i.append(name); - })); - r#try!(m.as_result()); - Ok(()) - } - - fn set_filter(&self, channel: u32, ys: Vec, preamp: f64) -> Result<(), Self::Err> { - let mut m = r#try!(self.method_call_with_args(&"org.PulseAudio.Ext.Equalizing1.Equalizer".into(), &"SetFilter".into(), |msg| { - let mut i = arg::IterAppend::new(msg); - i.append(channel); - i.append(ys); - i.append(preamp); - })); - r#try!(m.as_result()); - Ok(()) - } - - fn get_filter(&self, channel: u32) -> Result<(Vec, f64), Self::Err> { - let mut m = r#try!(self.method_call_with_args(&"org.PulseAudio.Ext.Equalizing1.Equalizer".into(), &"GetFilter".into(), |msg| { - let mut i = arg::IterAppend::new(msg); - i.append(channel); - })); - r#try!(m.as_result()); - let mut i = m.iter_init(); - let ys: Vec = r#try!(i.read()); - let preamp: f64 = r#try!(i.read()); - Ok((ys, preamp)) - } - - fn save_state(&self) -> Result<(), Self::Err> { - let mut m = r#try!(self.method_call_with_args(&"org.PulseAudio.Ext.Equalizing1.Equalizer".into(), &"SaveState".into(), |_| { - })); - r#try!(m.as_result()); - Ok(()) - } - - fn base_profile(&self, channel: u32) -> Result { - let mut m = r#try!(self.method_call_with_args(&"org.PulseAudio.Ext.Equalizing1.Equalizer".into(), &"BaseProfile".into(), |msg| { - let mut i = arg::IterAppend::new(msg); - i.append(channel); - })); - r#try!(m.as_result()); - let mut i = m.iter_init(); - let name: String = r#try!(i.read()); - Ok(name) - } - - fn get_interface_revision(&self) -> Result { - ::get(&self, "org.PulseAudio.Ext.Equalizing1.Equalizer", "InterfaceRevision") - } - - fn get_sample_rate(&self) -> Result { - ::get(&self, "org.PulseAudio.Ext.Equalizing1.Equalizer", "SampleRate") - } - - fn get_filter_sample_rate(&self) -> Result { - ::get(&self, "org.PulseAudio.Ext.Equalizing1.Equalizer", "FilterSampleRate") - } - - fn get_nfilter_coefficients(&self) -> Result { - ::get(&self, "org.PulseAudio.Ext.Equalizing1.Equalizer", "NFilterCoefficients") - } - - fn get_nchannels(&self) -> Result { - ::get(&self, "org.PulseAudio.Ext.Equalizing1.Equalizer", "NChannels") - } -} - -pub fn org_pulse_audio_ext_equalizing1_equalizer_server(factory: &tree::Factory, D>, data: D::Interface, f: F) -> tree::Interface, D> -where - D: tree::DataType, - D::Method: Default, - D::Property: Default, - T: OrgPulseAudioExtEqualizing1Equalizer, - F: 'static + for <'z> Fn(& 'z tree::MethodInfo<'_, tree::MTFn, D>) -> & 'z T, -{ - let i = factory.interface("org.PulseAudio.Ext.Equalizing1.Equalizer", data); - let f = ::std::sync::Arc::new(f); - let fclone = f.clone(); - let h = move |minfo: &tree::MethodInfo<'_, tree::MTFn, D>| { - let mut i = minfo.msg.iter_init(); - let channel: u32 = r#try!(i.read()); - let xs: Vec = r#try!(i.read()); - let d = fclone(minfo); - let (ys, preamp) = r#try!(d.filter_at_points(channel, xs)); - let rm = minfo.msg.method_return(); - let rm = rm.append1(ys); - let rm = rm.append1(preamp); - Ok(vec!(rm)) - }; - let m = factory.method("FilterAtPoints", Default::default(), h); - let m = m.in_arg(("channel", "u")); - let m = m.in_arg(("xs", "au")); - let m = m.out_arg(("ys", "ad")); - let m = m.out_arg(("preamp", "d")); - let i = i.add_m(m); - - let fclone = f.clone(); - let h = move |minfo: &tree::MethodInfo<'_, tree::MTFn, D>| { - let mut i = minfo.msg.iter_init(); - let channel: u32 = r#try!(i.read()); - let xs: Vec = r#try!(i.read()); - let ys: Vec = r#try!(i.read()); - let preamp: f64 = r#try!(i.read()); - let d = fclone(minfo); - r#try!(d.seed_filter(channel, xs, ys, preamp)); - let rm = minfo.msg.method_return(); - Ok(vec!(rm)) - }; - let m = factory.method("SeedFilter", Default::default(), h); - let m = m.in_arg(("channel", "u")); - let m = m.in_arg(("xs", "au")); - let m = m.in_arg(("ys", "ad")); - let m = m.in_arg(("preamp", "d")); - let i = i.add_m(m); - - let fclone = f.clone(); - let h = move |minfo: &tree::MethodInfo<'_, tree::MTFn, D>| { - let mut i = minfo.msg.iter_init(); - let channel: u32 = r#try!(i.read()); - let name: &str = r#try!(i.read()); - let d = fclone(minfo); - r#try!(d.save_profile(channel, name)); - let rm = minfo.msg.method_return(); - Ok(vec!(rm)) - }; - let m = factory.method("SaveProfile", Default::default(), h); - let m = m.in_arg(("channel", "u")); - let m = m.in_arg(("name", "s")); - let i = i.add_m(m); - - let fclone = f.clone(); - let h = move |minfo: &tree::MethodInfo<'_, tree::MTFn, D>| { - let mut i = minfo.msg.iter_init(); - let channel: u32 = r#try!(i.read()); - let name: &str = r#try!(i.read()); - let d = fclone(minfo); - r#try!(d.load_profile(channel, name)); - let rm = minfo.msg.method_return(); - Ok(vec!(rm)) - }; - let m = factory.method("LoadProfile", Default::default(), h); - let m = m.in_arg(("channel", "u")); - let m = m.in_arg(("name", "s")); - let i = i.add_m(m); - - let fclone = f.clone(); - let h = move |minfo: &tree::MethodInfo<'_, tree::MTFn, D>| { - let mut i = minfo.msg.iter_init(); - let channel: u32 = r#try!(i.read()); - let ys: Vec = r#try!(i.read()); - let preamp: f64 = r#try!(i.read()); - let d = fclone(minfo); - r#try!(d.set_filter(channel, ys, preamp)); - let rm = minfo.msg.method_return(); - Ok(vec!(rm)) - }; - let m = factory.method("SetFilter", Default::default(), h); - let m = m.in_arg(("channel", "u")); - let m = m.in_arg(("ys", "ad")); - let m = m.in_arg(("preamp", "d")); - let i = i.add_m(m); - - let fclone = f.clone(); - let h = move |minfo: &tree::MethodInfo<'_, tree::MTFn, D>| { - let mut i = minfo.msg.iter_init(); - let channel: u32 = r#try!(i.read()); - let d = fclone(minfo); - let (ys, preamp) = r#try!(d.get_filter(channel)); - let rm = minfo.msg.method_return(); - let rm = rm.append1(ys); - let rm = rm.append1(preamp); - Ok(vec!(rm)) - }; - let m = factory.method("GetFilter", Default::default(), h); - let m = m.in_arg(("channel", "u")); - let m = m.out_arg(("ys", "ad")); - let m = m.out_arg(("preamp", "d")); - let i = i.add_m(m); - - let fclone = f.clone(); - let h = move |minfo: &tree::MethodInfo<'_, tree::MTFn, D>| { - let d = fclone(minfo); - r#try!(d.save_state()); - let rm = minfo.msg.method_return(); - Ok(vec!(rm)) - }; - let m = factory.method("SaveState", Default::default(), h); - let i = i.add_m(m); - - let fclone = f.clone(); - let h = move |minfo: &tree::MethodInfo<'_, tree::MTFn, D>| { - let mut i = minfo.msg.iter_init(); - let channel: u32 = r#try!(i.read()); - let d = fclone(minfo); - let name = r#try!(d.base_profile(channel)); - let rm = minfo.msg.method_return(); - let rm = rm.append1(name); - Ok(vec!(rm)) - }; - let m = factory.method("BaseProfile", Default::default(), h); - let m = m.in_arg(("channel", "u")); - let m = m.out_arg(("name", "s")); - let i = i.add_m(m); - - let p = factory.property::("InterfaceRevision", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_interface_revision())); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::("SampleRate", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_sample_rate())); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::("FilterSampleRate", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_filter_sample_rate())); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::("NFilterCoefficients", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_nfilter_coefficients())); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::("NChannels", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_nchannels())); - Ok(()) - }); - let i = i.add_p(p); - i -} - -#[derive(Debug, Default)] -pub struct OrgPulseAudioExtEqualizing1EqualizerFilterChanged { -} - -impl dbus::SignalArgs for OrgPulseAudioExtEqualizing1EqualizerFilterChanged { - const NAME: &'static str = "FilterChanged"; - const INTERFACE: &'static str = "org.PulseAudio.Ext.Equalizing1.Equalizer"; - fn append(&self, _: &mut arg::IterAppend<'_>) { - } - fn get(&mut self, _: &mut arg::Iter<'_>) -> Result<(), arg::TypeMismatchError> { - Ok(()) - } -} - -#[derive(Debug, Default)] -pub struct OrgPulseAudioExtEqualizing1EqualizerSinkReconfigured { -} - -impl dbus::SignalArgs for OrgPulseAudioExtEqualizing1EqualizerSinkReconfigured { - const NAME: &'static str = "SinkReconfigured"; - const INTERFACE: &'static str = "org.PulseAudio.Ext.Equalizing1.Equalizer"; - fn append(&self, _: &mut arg::IterAppend<'_>) { - } - fn get(&mut self, _: &mut arg::Iter<'_>) -> Result<(), arg::TypeMismatchError> { - Ok(()) - } -} - -pub trait OrgPulseAudioCore1Device { - type Err; - fn suspend(&self, suspend: bool) -> Result<(), Self::Err>; - fn get_port_by_name(&self, name: &str) -> Result, Self::Err>; - fn get_index(&self) -> Result; - fn get_name(&self) -> Result; - fn get_driver(&self) -> Result; - fn get_owner_module(&self) -> Result, Self::Err>; - fn get_card(&self) -> Result, Self::Err>; - fn get_sample_format(&self) -> Result; - fn get_sample_rate(&self) -> Result; - fn get_channels(&self) -> Result, Self::Err>; - fn get_volume(&self) -> Result, Self::Err>; - fn set_volume(&self, value: Vec) -> Result<(), Self::Err>; - fn get_has_flat_volume(&self) -> Result; - fn get_has_convertible_to_decibel_volume(&self) -> Result; - fn get_base_volume(&self) -> Result; - fn get_volume_steps(&self) -> Result; - fn get_mute(&self) -> Result; - fn set_mute(&self, value: bool) -> Result<(), Self::Err>; - fn get_has_hardware_volume(&self) -> Result; - fn get_has_hardware_mute(&self) -> Result; - fn get_configured_latency(&self) -> Result; - fn get_has_dynamic_latency(&self) -> Result; - fn get_latency(&self) -> Result; - fn get_is_hardware_device(&self) -> Result; - fn get_is_network_device(&self) -> Result; - fn get_state(&self) -> Result; - fn get_ports(&self) -> Result>, Self::Err>; - fn get_active_port(&self) -> Result, Self::Err>; - fn set_active_port(&self, value: dbus::Path<'static>) -> Result<(), Self::Err>; - fn get_property_list(&self) -> Result<::std::collections::HashMap>, Self::Err>; -} - -impl<'a, C: ::std::ops::Deref> OrgPulseAudioCore1Device for dbus::ConnPath<'a, C> { - type Err = dbus::Error; - - fn suspend(&self, suspend: bool) -> Result<(), Self::Err> { - let mut m = r#try!(self.method_call_with_args(&"org.PulseAudio.Core1.Device".into(), &"Suspend".into(), |msg| { - let mut i = arg::IterAppend::new(msg); - i.append(suspend); - })); - r#try!(m.as_result()); - Ok(()) - } - - fn get_port_by_name(&self, name: &str) -> Result, Self::Err> { - let mut m = r#try!(self.method_call_with_args(&"org.PulseAudio.Core1.Device".into(), &"GetPortByName".into(), |msg| { - let mut i = arg::IterAppend::new(msg); - i.append(name); - })); - r#try!(m.as_result()); - let mut i = m.iter_init(); - let port: dbus::Path<'static> = r#try!(i.read()); - Ok(port) - } - - fn get_index(&self) -> Result { - ::get(&self, "org.PulseAudio.Core1.Device", "Index") - } - - fn get_name(&self) -> Result { - ::get(&self, "org.PulseAudio.Core1.Device", "Name") - } - - fn get_driver(&self) -> Result { - ::get(&self, "org.PulseAudio.Core1.Device", "Driver") - } - - fn get_owner_module(&self) -> Result, Self::Err> { - ::get(&self, "org.PulseAudio.Core1.Device", "OwnerModule") - } - - fn get_card(&self) -> Result, Self::Err> { - ::get(&self, "org.PulseAudio.Core1.Device", "Card") - } - - fn get_sample_format(&self) -> Result { - ::get(&self, "org.PulseAudio.Core1.Device", "SampleFormat") - } - - fn get_sample_rate(&self) -> Result { - ::get(&self, "org.PulseAudio.Core1.Device", "SampleRate") - } - - fn get_channels(&self) -> Result, Self::Err> { - ::get(&self, "org.PulseAudio.Core1.Device", "Channels") - } - - fn get_volume(&self) -> Result, Self::Err> { - ::get(&self, "org.PulseAudio.Core1.Device", "Volume") - } - - fn get_has_flat_volume(&self) -> Result { - ::get(&self, "org.PulseAudio.Core1.Device", "HasFlatVolume") - } - - fn get_has_convertible_to_decibel_volume(&self) -> Result { - ::get(&self, "org.PulseAudio.Core1.Device", "HasConvertibleToDecibelVolume") - } - - fn get_base_volume(&self) -> Result { - ::get(&self, "org.PulseAudio.Core1.Device", "BaseVolume") - } - - fn get_volume_steps(&self) -> Result { - ::get(&self, "org.PulseAudio.Core1.Device", "VolumeSteps") - } - - fn get_mute(&self) -> Result { - ::get(&self, "org.PulseAudio.Core1.Device", "Mute") - } - - fn get_has_hardware_volume(&self) -> Result { - ::get(&self, "org.PulseAudio.Core1.Device", "HasHardwareVolume") - } - - fn get_has_hardware_mute(&self) -> Result { - ::get(&self, "org.PulseAudio.Core1.Device", "HasHardwareMute") - } - - fn get_configured_latency(&self) -> Result { - ::get(&self, "org.PulseAudio.Core1.Device", "ConfiguredLatency") - } - - fn get_has_dynamic_latency(&self) -> Result { - ::get(&self, "org.PulseAudio.Core1.Device", "HasDynamicLatency") - } - - fn get_latency(&self) -> Result { - ::get(&self, "org.PulseAudio.Core1.Device", "Latency") - } - - fn get_is_hardware_device(&self) -> Result { - ::get(&self, "org.PulseAudio.Core1.Device", "IsHardwareDevice") - } - - fn get_is_network_device(&self) -> Result { - ::get(&self, "org.PulseAudio.Core1.Device", "IsNetworkDevice") - } - - fn get_state(&self) -> Result { - ::get(&self, "org.PulseAudio.Core1.Device", "State") - } - - fn get_ports(&self) -> Result>, Self::Err> { - ::get(&self, "org.PulseAudio.Core1.Device", "Ports") - } - - fn get_active_port(&self) -> Result, Self::Err> { - ::get(&self, "org.PulseAudio.Core1.Device", "ActivePort") - } - - fn get_property_list(&self) -> Result<::std::collections::HashMap>, Self::Err> { - ::get(&self, "org.PulseAudio.Core1.Device", "PropertyList") - } - - fn set_volume(&self, value: Vec) -> Result<(), Self::Err> { - ::set(&self, "org.PulseAudio.Core1.Device", "Volume", value) - } - - fn set_mute(&self, value: bool) -> Result<(), Self::Err> { - ::set(&self, "org.PulseAudio.Core1.Device", "Mute", value) - } - - fn set_active_port(&self, value: dbus::Path<'static>) -> Result<(), Self::Err> { - ::set(&self, "org.PulseAudio.Core1.Device", "ActivePort", value) - } -} - -pub fn org_pulse_audio_core1_device_server(factory: &tree::Factory, D>, data: D::Interface, f: F) -> tree::Interface, D> -where - D: tree::DataType, - D::Method: Default, - D::Property: Default, - T: OrgPulseAudioCore1Device, - F: 'static + for <'z> Fn(& 'z tree::MethodInfo<'_, tree::MTFn, D>) -> & 'z T, -{ - let i = factory.interface("org.PulseAudio.Core1.Device", data); - let f = ::std::sync::Arc::new(f); - let fclone = f.clone(); - let h = move |minfo: &tree::MethodInfo<'_, tree::MTFn, D>| { - let mut i = minfo.msg.iter_init(); - let suspend: bool = r#try!(i.read()); - let d = fclone(minfo); - r#try!(d.suspend(suspend)); - let rm = minfo.msg.method_return(); - Ok(vec!(rm)) - }; - let m = factory.method("Suspend", Default::default(), h); - let m = m.in_arg(("suspend", "b")); - let i = i.add_m(m); - - let fclone = f.clone(); - let h = move |minfo: &tree::MethodInfo<'_, tree::MTFn, D>| { - let mut i = minfo.msg.iter_init(); - let name: &str = r#try!(i.read()); - let d = fclone(minfo); - let port = r#try!(d.get_port_by_name(name)); - let rm = minfo.msg.method_return(); - let rm = rm.append1(port); - Ok(vec!(rm)) - }; - let m = factory.method("GetPortByName", Default::default(), h); - let m = m.in_arg(("name", "s")); - let m = m.out_arg(("port", "o")); - let i = i.add_m(m); - - let p = factory.property::("Index", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_index())); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::<&str, _>("Name", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_name())); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::<&str, _>("Driver", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_driver())); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::, _>("OwnerModule", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_owner_module())); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::, _>("Card", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_card())); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::("SampleFormat", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_sample_format())); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::("SampleRate", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_sample_rate())); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::, _>("Channels", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_channels())); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::, _>("Volume", Default::default()); - let p = p.access(tree::Access::ReadWrite); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_volume())); - Ok(()) - }); - let fclone = f.clone(); - let p = p.on_set(move |iter, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - r#try!(d.set_volume(r#try!(iter.read()))); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::("HasFlatVolume", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_has_flat_volume())); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::("HasConvertibleToDecibelVolume", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_has_convertible_to_decibel_volume())); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::("BaseVolume", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_base_volume())); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::("VolumeSteps", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_volume_steps())); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::("Mute", Default::default()); - let p = p.access(tree::Access::ReadWrite); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_mute())); - Ok(()) - }); - let fclone = f.clone(); - let p = p.on_set(move |iter, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - r#try!(d.set_mute(r#try!(iter.read()))); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::("HasHardwareVolume", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_has_hardware_volume())); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::("HasHardwareMute", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_has_hardware_mute())); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::("ConfiguredLatency", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_configured_latency())); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::("HasDynamicLatency", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_has_dynamic_latency())); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::("Latency", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_latency())); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::("IsHardwareDevice", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_is_hardware_device())); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::("IsNetworkDevice", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_is_network_device())); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::("State", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_state())); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::>, _>("Ports", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_ports())); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::, _>("ActivePort", Default::default()); - let p = p.access(tree::Access::ReadWrite); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_active_port())); - Ok(()) - }); - let fclone = f.clone(); - let p = p.on_set(move |iter, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - r#try!(d.set_active_port(r#try!(iter.read()))); - Ok(()) - }); - let i = i.add_p(p); - - let p = factory.property::<::std::collections::HashMap<&str, Vec>, _>("PropertyList", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_property_list())); - Ok(()) - }); - let i = i.add_p(p); - i -} - -#[derive(Debug, Default)] -pub struct OrgPulseAudioCore1DeviceVolumeUpdated { - pub volume: Vec, -} - -impl dbus::SignalArgs for OrgPulseAudioCore1DeviceVolumeUpdated { - const NAME: &'static str = "VolumeUpdated"; - const INTERFACE: &'static str = "org.PulseAudio.Core1.Device"; - fn append(&self, i: &mut arg::IterAppend<'_>) { - (&self.volume as &dyn arg::RefArg).append(i); - } - fn get(&mut self, i: &mut arg::Iter<'_>) -> Result<(), arg::TypeMismatchError> { - self.volume = r#try!(i.read()); - Ok(()) - } -} - -#[derive(Debug, Default)] -pub struct OrgPulseAudioCore1DeviceMuteUpdated { - pub muted: bool, -} - -impl dbus::SignalArgs for OrgPulseAudioCore1DeviceMuteUpdated { - const NAME: &'static str = "MuteUpdated"; - const INTERFACE: &'static str = "org.PulseAudio.Core1.Device"; - fn append(&self, i: &mut arg::IterAppend<'_>) { - (&self.muted as &dyn arg::RefArg).append(i); - } - fn get(&mut self, i: &mut arg::Iter<'_>) -> Result<(), arg::TypeMismatchError> { - self.muted = r#try!(i.read()); - Ok(()) - } -} - -#[derive(Debug, Default)] -pub struct OrgPulseAudioCore1DeviceStateUpdated { - pub state: u32, -} - -impl dbus::SignalArgs for OrgPulseAudioCore1DeviceStateUpdated { - const NAME: &'static str = "StateUpdated"; - const INTERFACE: &'static str = "org.PulseAudio.Core1.Device"; - fn append(&self, i: &mut arg::IterAppend<'_>) { - (&self.state as &dyn arg::RefArg).append(i); - } - fn get(&mut self, i: &mut arg::Iter<'_>) -> Result<(), arg::TypeMismatchError> { - self.state = r#try!(i.read()); - Ok(()) - } -} - -#[derive(Debug, Default)] -pub struct OrgPulseAudioCore1DeviceActivePortUpdated { - pub port: dbus::Path<'static>, -} - -impl dbus::SignalArgs for OrgPulseAudioCore1DeviceActivePortUpdated { - const NAME: &'static str = "ActivePortUpdated"; - const INTERFACE: &'static str = "org.PulseAudio.Core1.Device"; - fn append(&self, i: &mut arg::IterAppend<'_>) { - (&self.port as &dyn arg::RefArg).append(i); - } - fn get(&mut self, i: &mut arg::Iter<'_>) -> Result<(), arg::TypeMismatchError> { - self.port = r#try!(i.read()); - Ok(()) - } -} - -#[derive(Debug, Default)] -pub struct OrgPulseAudioCore1DevicePropertyListUpdated { - pub property_list: ::std::collections::HashMap>, -} - -impl dbus::SignalArgs for OrgPulseAudioCore1DevicePropertyListUpdated { - const NAME: &'static str = "PropertyListUpdated"; - const INTERFACE: &'static str = "org.PulseAudio.Core1.Device"; - fn append(&self, i: &mut arg::IterAppend<'_>) { - (&self.property_list as &dyn arg::RefArg).append(i); - } - fn get(&mut self, i: &mut arg::Iter<'_>) -> Result<(), arg::TypeMismatchError> { - self.property_list = r#try!(i.read()); - Ok(()) - } -} - -pub trait OrgPulseAudioCore1Sink { - type Err; - fn get_monitor_source(&self) -> Result, Self::Err>; -} - -impl<'a, C: ::std::ops::Deref> OrgPulseAudioCore1Sink for dbus::ConnPath<'a, C> { - type Err = dbus::Error; - - fn get_monitor_source(&self) -> Result, Self::Err> { - ::get(&self, "org.PulseAudio.Core1.Sink", "MonitorSource") - } -} - -pub fn org_pulse_audio_core1_sink_server(factory: &tree::Factory, D>, data: D::Interface, f: F) -> tree::Interface, D> -where - D: tree::DataType, - D::Method: Default, - D::Property: Default, - T: OrgPulseAudioCore1Sink, - F: 'static + for <'z> Fn(& 'z tree::MethodInfo<'_, tree::MTFn, D>) -> & 'z T, -{ - let i = factory.interface("org.PulseAudio.Core1.Sink", data); - let f = ::std::sync::Arc::new(f); - let p = factory.property::, _>("MonitorSource", Default::default()); - let p = p.access(tree::Access::Read); - let fclone = f.clone(); - let p = p.on_get(move |a, pinfo| { - let minfo = pinfo.to_method_info(); - let d = fclone(&minfo); - a.append(r#try!(d.get_monitor_source())); - Ok(()) - }); - let i = i.add_p(p); - i -} - -pub trait OrgFreedesktopDBusIntrospectable { - type Err; - fn introspect(&self) -> Result; -} - -impl<'a, C: ::std::ops::Deref> OrgFreedesktopDBusIntrospectable for dbus::ConnPath<'a, C> { - type Err = dbus::Error; - - fn introspect(&self) -> Result { - let mut m = r#try!(self.method_call_with_args(&"org.freedesktop.DBus.Introspectable".into(), &"Introspect".into(), |_| { - })); - r#try!(m.as_result()); - let mut i = m.iter_init(); - let data: String = r#try!(i.read()); - Ok(data) - } -} - -pub fn org_freedesktop_dbus_introspectable_server(factory: &tree::Factory, D>, data: D::Interface, f: F) -> tree::Interface, D> -where - D: tree::DataType, - D::Method: Default, - T: OrgFreedesktopDBusIntrospectable, - F: 'static + for <'z> Fn(& 'z tree::MethodInfo<'_, tree::MTFn, D>) -> & 'z T, -{ - let i = factory.interface("org.freedesktop.DBus.Introspectable", data); - let f = ::std::sync::Arc::new(f); - let fclone = f.clone(); - let h = move |minfo: &tree::MethodInfo<'_, tree::MTFn, D>| { - let d = fclone(minfo); - let data = r#try!(d.introspect()); - let rm = minfo.msg.method_return(); - let rm = rm.append1(data); - Ok(vec!(rm)) - }; - let m = factory.method("Introspect", Default::default(), h); - let m = m.out_arg(("data", "s")); - let i = i.add_m(m); - i -} - -pub trait OrgFreedesktopDBusProperties { - type Err; - fn get(&self, interface_name: &str, property_name: &str) -> Result>, Self::Err>; - fn set(&self, interface_name: &str, property_name: &str, value: arg::Variant>) -> Result<(), Self::Err>; - fn get_all(&self, interface_name: &str) -> Result<::std::collections::HashMap>>, Self::Err>; -} - -impl<'a, C: ::std::ops::Deref> OrgFreedesktopDBusProperties for dbus::ConnPath<'a, C> { - type Err = dbus::Error; - - fn get(&self, interface_name: &str, property_name: &str) -> Result>, Self::Err> { - let mut m = r#try!(self.method_call_with_args(&"org.freedesktop.DBus.Properties".into(), &"Get".into(), |msg| { - let mut i = arg::IterAppend::new(msg); - i.append(interface_name); - i.append(property_name); - })); - r#try!(m.as_result()); - let mut i = m.iter_init(); - let value: arg::Variant> = r#try!(i.read()); - Ok(value) - } - - fn set(&self, interface_name: &str, property_name: &str, value: arg::Variant>) -> Result<(), Self::Err> { - let mut m = r#try!(self.method_call_with_args(&"org.freedesktop.DBus.Properties".into(), &"Set".into(), |msg| { - let mut i = arg::IterAppend::new(msg); - i.append(interface_name); - i.append(property_name); - i.append(value); - })); - r#try!(m.as_result()); - Ok(()) - } - - fn get_all(&self, interface_name: &str) -> Result<::std::collections::HashMap>>, Self::Err> { - let mut m = r#try!(self.method_call_with_args(&"org.freedesktop.DBus.Properties".into(), &"GetAll".into(), |msg| { - let mut i = arg::IterAppend::new(msg); - i.append(interface_name); - })); - r#try!(m.as_result()); - let mut i = m.iter_init(); - let props: ::std::collections::HashMap>> = r#try!(i.read()); - Ok(props) - } -} - -pub fn org_freedesktop_dbus_properties_server(factory: &tree::Factory, D>, data: D::Interface, f: F) -> tree::Interface, D> -where - D: tree::DataType, - D::Method: Default, - T: OrgFreedesktopDBusProperties, - F: 'static + for <'z> Fn(& 'z tree::MethodInfo<'_, tree::MTFn, D>) -> & 'z T, -{ - let i = factory.interface("org.freedesktop.DBus.Properties", data); - let f = ::std::sync::Arc::new(f); - let fclone = f.clone(); - let h = move |minfo: &tree::MethodInfo<'_, tree::MTFn, D>| { - let mut i = minfo.msg.iter_init(); - let interface_name: &str = r#try!(i.read()); - let property_name: &str = r#try!(i.read()); - let d = fclone(minfo); - let value = r#try!(d.get(interface_name, property_name)); - let rm = minfo.msg.method_return(); - let rm = rm.append1(value); - Ok(vec!(rm)) - }; - let m = factory.method("Get", Default::default(), h); - let m = m.in_arg(("interface_name", "s")); - let m = m.in_arg(("property_name", "s")); - let m = m.out_arg(("value", "v")); - let i = i.add_m(m); - - let fclone = f.clone(); - let h = move |minfo: &tree::MethodInfo<'_, tree::MTFn, D>| { - let mut i = minfo.msg.iter_init(); - let interface_name: &str = r#try!(i.read()); - let property_name: &str = r#try!(i.read()); - let value: arg::Variant> = r#try!(i.read()); - let d = fclone(minfo); - r#try!(d.set(interface_name, property_name, value)); - let rm = minfo.msg.method_return(); - Ok(vec!(rm)) - }; - let m = factory.method("Set", Default::default(), h); - let m = m.in_arg(("interface_name", "s")); - let m = m.in_arg(("property_name", "s")); - let m = m.in_arg(("value", "v")); - let i = i.add_m(m); - - let fclone = f.clone(); - let h = move |minfo: &tree::MethodInfo<'_, tree::MTFn, D>| { - let mut i = minfo.msg.iter_init(); - let interface_name: &str = r#try!(i.read()); - let d = fclone(minfo); - let props = r#try!(d.get_all(interface_name)); - let rm = minfo.msg.method_return(); - let rm = rm.append1(props); - Ok(vec!(rm)) - }; - let m = factory.method("GetAll", Default::default(), h); - let m = m.in_arg(("interface_name", "s")); - let m = m.out_arg(("props", "a{sv}")); - let i = i.add_m(m); - i -} diff --git a/src/pa_eq/mod.rs b/src/pa_eq/mod.rs deleted file mode 100644 index 09b2039..0000000 --- a/src/pa_eq/mod.rs +++ /dev/null @@ -1,115 +0,0 @@ -mod dbus_api; - -use crate::cli::pa_eq::*; -use crate::utils::*; -use crate::Filter; - -use self::dbus_api::equalizing_manager::OrgPulseAudioExtEqualizing1Manager; -use self::dbus_api::server_lookup::OrgPulseAudioServerLookup1; -use self::dbus_api::sink::OrgPulseAudioExtEqualizing1Equalizer; - -use dbus::{BusType, ConnPath, Connection}; - -use failure::{Error, ResultExt}; - -#[derive(Fail, Debug)] -#[fail(display = "No equalized sink found")] -struct NoEqualizedSink; - -pub fn main(cmd: Command) -> Result<(), Error> { - use crate::cli::pa_eq::Command::*; - - warn!("The PulseAudio equalizer has been deprecated for a while, and is known to sometimes cause crashes, latency or audible artifacts"); - - match cmd { - Load(args) => load(args), - Reset(args) => reset(args), - } -} - -pub fn reset(_args: ResetCli) -> Result<(), Error> { - let conn = connect()?; - let conn_sink = get_equalized_sink(&conn)?; - let filter_rate = conn_sink.get_filter_sample_rate()?; - let filter = Filter { - preamp: 1f64, - frequencies: vec![], - coefficients: vec![], - } - .pad(filter_rate); - - send_filter(&conn_sink, filter)?; - - Ok(()) -} - -pub fn load(args: LoadCli) -> Result<(), Error> { - let conn = connect()?; - let conn_sink = get_equalized_sink(&conn)?; - - let filter = read_filter_from_arg(&args.file)?; - - let filter_rate = conn_sink.get_filter_sample_rate()?; - send_filter(&conn_sink, filter.pad(filter_rate))?; - - Ok(()) -} - -fn connect() -> Result { - Ok(connect_impl().context( - "Could not connect to PulseAudio's D-Bus socket. Have you loaded the 'module-dbus-protocol' module?" - )?) -} - -fn connect_impl() -> Result { - let pulse_sock_path = get_pulse_dbus_sock()?; - info!("PulseAudio's D-Bus socket path is: {}", pulse_sock_path); - - trace!("Connecting to PulseAudio's D-Bus socket"); - Ok(Connection::open_private(&pulse_sock_path)?) -} - -fn get_equalized_sink(conn: &Connection) -> Result, Error> { - Ok(get_equalized_sink_impl(conn).context( - "Could not find an equalized sink. Have you loaded the 'module-equalizer-sink' module?", - )?) -} - -fn get_equalized_sink_impl(conn: &Connection) -> Result, Error> { - let conn_manager = conn.with_path("org.PulseAudio.Core1", "/org/pulseaudio/equalizing1", 2000); - - // TODO: make that a command-line option - trace!("Getting (one of) the equalized sink(s)"); - let mut sinks = conn_manager.get_equalized_sinks()?; - let sink_path = sinks.pop().ok_or(NoEqualizedSink {})?; - info!("Using equalized sink: {:?}", sink_path.as_cstr()); - - trace!("Connecting to equalized sink"); - Ok(conn.with_path("org.PulseAudio.Core1", sink_path, 2000)) -} - -fn send_filter(conn_sink: &ConnPath<'_, &Connection>, filter: Filter) -> Result<(), Error> { - let channel = conn_sink.get_nchannels()?; - info!("Using channel: {}", channel); - trace!("Sending filter: {:?}", filter); - conn_sink.seed_filter( - channel, - filter.frequencies, - filter - .coefficients - .into_iter() - .map(decibel_to_ratio) - .collect(), - decibel_to_ratio(filter.preamp), - )?; - Ok(()) -} - -fn get_pulse_dbus_sock() -> Result { - trace!("Connecting to the D-Bus' session bus"); - let conn = Connection::get_private(BusType::Session)?; - let conn = conn.with_path("org.PulseAudio1", "/org/pulseaudio/server_lookup1", 2000); - - trace!("Checking PulseAudio's D-Bus socket path"); - Ok(conn.get_address()?) -} diff --git a/src/utils.rs b/src/utils.rs index 2e585b0..4596b3f 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -67,34 +67,3 @@ where message: format!("{}", error), } } - -pub fn decibel_to_ratio(decibel: f64) -> f64 { - 10f64.powf(decibel / 10f64).sqrt() -} - -/* -fn introspect(conn: &dbus::ConnPath<&Connection>) { - let mut thing = conn - .method_call_with_args( - &"org.freedesktop.DBus.Introspectable".into(), - &"Introspect".into(), - |_| {}, - ).unwrap(); - thing.as_result().unwrap(); - - println!("{}", thing.iter_init().read::().unwrap()); -} -*/ - -#[cfg(test)] -mod tests { - - #[test] - fn decibel_to_ratio() { - assert_eq!(super::decibel_to_ratio(0f64), 1f64); - assert_eq!(super::decibel_to_ratio(20f64), 10f64); - assert_eq!(super::decibel_to_ratio(40f64), 100f64); - assert_eq!(super::decibel_to_ratio(60f64), 1000f64); - } - -} -- cgit v1.2.3