diff --git a/src/pulse.rs b/src/pulse.rs index 9c55725..ce0d215 100644 --- a/src/pulse.rs +++ b/src/pulse.rs @@ -1,3 +1,5 @@ +use std::collections::BTreeMap; + use serde::{Deserialize, Serialize}; use crate::{ @@ -11,6 +13,23 @@ pub struct Sink { pub name: String, pub description: String, pub mute: bool, + + /// Comma-separated list + pub channel_map: String, + + /// Volume values per channel + pub volume: BTreeMap, + + /// Arbitrary stringly-typed properties + pub properties: BTreeMap, +} + +#[derive(Serialize, Deserialize)] +pub struct Volume { + /// Volume value in range 0..=65536 + value: u32, + value_percent: String, + db: String, } pub fn get_sinks() -> eyre::Result { @@ -20,14 +39,19 @@ pub fn get_sinks() -> eyre::Result { let mut output = SinkList::default(); for sink in sinks { - let default = dbg!(&sink.name) == dbg!(&default_sink); + let default = sink.name == default_sink; let sink = output::Sink { name: sink.name, pretty_name: sink.description, muted: sink.mute, default, - volume: 0, // TODO + volume: sink + .volume + .first_key_value() + .map(|(_key, volume)| u64::from(volume.value) * 100 / u64::from(u16::MAX)) + .map(|volume| volume as u8) + .unwrap_or(0), }; if default {