feat: you can now get volume for all sound individually, not only via fullstate

This commit is contained in:
2026-02-25 00:34:05 +03:00
parent e72fc519a0
commit ce948ce678
5 changed files with 36 additions and 8 deletions
+12
View File
@@ -208,6 +208,18 @@ impl AudioPlayer {
PlayerState::Stopped
}
pub fn get_volume(&mut self, id: Option<u32>) -> Option<f32> {
if let Some(id) = id {
if let Some(sound) = self.tracks.get_mut(&id) {
return Some(sound.sink.volume());
} else {
return None;
}
} else {
return Some(self.volume);
}
}
pub fn set_volume(&mut self, volume: f32, id: Option<u32>) {
if let Some(id) = id {
if let Some(sound) = self.tracks.get_mut(&id) {
+10 -3
View File
@@ -40,7 +40,9 @@ pub struct IsPausedCommand {}
pub struct GetStateCommand {}
pub struct GetVolumeCommand {}
pub struct GetVolumeCommand {
pub id: Option<u32>,
}
pub struct SetVolumeCommand {
pub volume: Option<f32>,
@@ -188,9 +190,14 @@ impl Executable for GetStateCommand {
#[async_trait]
impl Executable for GetVolumeCommand {
async fn execute(&self) -> Response {
let audio_player = get_audio_player().await.lock().await;
let volume = audio_player.volume;
let mut audio_player = get_audio_player().await.lock().await;
let volume = audio_player.get_volume(self.id);
if let Some(volume) = volume {
Response::new(true, volume.to_string())
} else {
Response::new(false, "Failed to get volume")
}
}
}
+8 -2
View File
@@ -82,8 +82,14 @@ impl Request {
Request::new("is_paused", vec![])
}
pub fn get_volume() -> Self {
Request::new("get_volume", vec![])
pub fn get_volume(id: Option<u32>) -> Self {
let mut args = vec![];
let id_str;
if let Some(id) = id {
id_str = id.to_string();
args.push(("id", id_str.as_str()));
}
Request::new("get_volume", args)
}
pub fn get_position(id: Option<u32>) -> Self {