blob: 5c6d3e14e605f0c6d1be9ad513034129292d0498 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
use crate::config::CONFIG;
use crate::types::ThreadsData;
use alsa::mixer::{Mixer, SelemChannelId, SelemId};
// getting volume percentage
pub async fn get_volume() -> ThreadsData {
let card = if CONFIG.volume.card == "PULSE" {
"pulse"
} else {
"default"
};
let mixer = Mixer::new(card, false).expect("Failed to open mixer");
let selem_id = SelemId::new("Master", 0);
let selem = mixer.find_selem(&selem_id).expect("Couldn't find selem");
let selem_chan_id = SelemChannelId::FrontLeft;
let (min, max) = selem.get_playback_volume_range();
let mut raw_volume = selem
.get_playback_volume(selem_chan_id)
.expect("Failed to get raw_volume");
let range = max - min;
let vol = if range == 0 {
0
} else {
raw_volume -= min;
((raw_volume as f64 / range as f64) * 100.) as u64
};
let muted = selem
.get_playback_switch(selem_chan_id)
.expect("Failed to get playback state");
let icon = match muted {
0 => &CONFIG.volume.icon_muted,
_ => if vol < 50 { &CONFIG.volume.icon_low } else { &CONFIG.volume.icon_high }
};
let data = format!(" {} {}% {}", icon, vol, CONFIG.seperator);
ThreadsData::Sound(data)
}
|