Use dynamic step size for volume up/down
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Thu, 24 Oct 2024 23:59:22 +0000 (01:59 +0200)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Thu, 24 Oct 2024 23:59:22 +0000 (01:59 +0200)
music_assistant/server/controllers/players.py

index b36519a7a0d98f6f4666fb9c9d8eb0674805b476..f2ca3ac17a7640c4e7eddb4e6ef6c6d6d8596193 100644 (file)
@@ -398,7 +398,15 @@ class PlayerController(CoreController):
 
         - player_id: player_id of the player to handle the command.
         """
-        new_volume = min(100, self._players[player_id].volume_level + 5)
+        if not (player := self.get(player_id)):
+            return
+        if player.volume_level < 5 or player.volume_level > 95:
+            step_size = 1
+        elif player.volume_level < 20 or player.volume_level > 80:
+            step_size = 2
+        else:
+            step_size = 5
+        new_volume = min(100, self._players[player_id].volume_level + step_size)
         await self.cmd_volume_set(player_id, new_volume)
 
     @api_command("players/cmd/volume_down")
@@ -408,7 +416,15 @@ class PlayerController(CoreController):
 
         - player_id: player_id of the player to handle the command.
         """
-        new_volume = max(0, self._players[player_id].volume_level - 5)
+        if not (player := self.get(player_id)):
+            return
+        if player.volume_level < 5 or player.volume_level > 95:
+            step_size = 1
+        elif player.volume_level < 20 or player.volume_level > 80:
+            step_size = 2
+        else:
+            step_size = 5
+        new_volume = max(0, self._players[player_id].volume_level - step_size)
         await self.cmd_volume_set(player_id, new_volume)
 
     @api_command("players/cmd/group_volume")