Fix pulse volume parsing

This commit is contained in:
2024-08-14 11:44:50 +02:00
parent e4ffeb6747
commit 9187503e30

View File

@ -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<String, Volume>,
/// Arbitrary stringly-typed properties
pub properties: BTreeMap<String, String>,
}
#[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<output::SinkList> {
@ -20,14 +39,19 @@ pub fn get_sinks() -> eyre::Result<output::SinkList> {
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 {