feat: Add mute and unmute functionality to player service and API
This commit is contained in:
@@ -47,6 +47,7 @@ class PlayerState:
|
||||
self.status: PlayerStatus = PlayerStatus.STOPPED
|
||||
self.mode: PlayerMode = PlayerMode.CONTINUOUS
|
||||
self.volume: int = 50
|
||||
self.previous_volume: int = 50
|
||||
self.current_sound_id: int | None = None
|
||||
self.current_sound_index: int | None = None
|
||||
self.current_sound_position: int = 0
|
||||
@@ -64,6 +65,7 @@ class PlayerState:
|
||||
"status": self.status.value,
|
||||
"mode": self.mode.value,
|
||||
"volume": self.volume,
|
||||
"previous_volume": self.previous_volume,
|
||||
"position": self.current_sound_position or 0,
|
||||
"duration": self.current_sound_duration,
|
||||
"index": self.current_sound_index,
|
||||
@@ -378,12 +380,27 @@ class PlayerService:
|
||||
async def set_volume(self, volume: int) -> None:
|
||||
"""Set playback volume (0-100)."""
|
||||
volume = max(0, min(100, volume)) # Clamp to valid range
|
||||
|
||||
# Store previous volume when muting (going from >0 to 0)
|
||||
if self.state.volume > 0 and volume == 0:
|
||||
self.state.previous_volume = self.state.volume
|
||||
|
||||
self.state.volume = volume
|
||||
self._player.audio_set_volume(volume)
|
||||
|
||||
await self._broadcast_state()
|
||||
logger.debug("Volume set to: %s", volume)
|
||||
|
||||
async def mute(self) -> None:
|
||||
"""Mute the player (stores current volume as previous_volume)."""
|
||||
if self.state.volume > 0:
|
||||
await self.set_volume(0)
|
||||
|
||||
async def unmute(self) -> None:
|
||||
"""Unmute the player (restores previous_volume)."""
|
||||
if self.state.volume == 0 and self.state.previous_volume > 0:
|
||||
await self.set_volume(self.state.previous_volume)
|
||||
|
||||
async def set_mode(self, mode: PlayerMode) -> None:
|
||||
"""Set playback mode."""
|
||||
self.state.mode = mode
|
||||
|
||||
Reference in New Issue
Block a user