diff --git a/src/components/player/CompactPlayer.tsx b/src/components/player/CompactPlayer.tsx index 028df7d..836537a 100644 --- a/src/components/player/CompactPlayer.tsx +++ b/src/components/player/CompactPlayer.tsx @@ -27,10 +27,10 @@ export function CompactPlayer({ className }: CompactPlayerProps) { status: 'stopped', mode: 'continuous', volume: 80, + previous_volume: 50, position: 0 }) const [isLoading, setIsLoading] = useState(false) - const [previousVolume, setPreviousVolume] = useState(50) // Load initial state useEffect(() => { @@ -58,12 +58,6 @@ export function CompactPlayer({ className }: CompactPlayerProps) { } }, []) - // Initialize previous volume when state loads - useEffect(() => { - if (state.volume > 0 && previousVolume <= 0) { - setPreviousVolume(state.volume) - } - }, [state.volume, previousVolume]) const executeAction = useCallback(async (action: () => Promise, actionName: string) => { setIsLoading(true) @@ -96,13 +90,12 @@ export function CompactPlayer({ className }: CompactPlayerProps) { const handleVolumeToggle = useCallback(() => { if (state.volume === 0) { // Unmute - executeAction(() => playerService.setVolume(previousVolume), 'unmute') + executeAction(playerService.unmute, 'unmute') } else { // Mute - setPreviousVolume(state.volume) - executeAction(() => playerService.setVolume(0), 'mute') + executeAction(playerService.mute, 'mute') } - }, [previousVolume, state.volume, executeAction]) + }, [state.volume, executeAction]) // Don't show if no current sound if (!state.current_sound) { diff --git a/src/components/player/Player.tsx b/src/components/player/Player.tsx index 972c0ae..49ee910 100644 --- a/src/components/player/Player.tsx +++ b/src/components/player/Player.tsx @@ -46,6 +46,7 @@ export function Player({ className, onPlayerModeChange }: PlayerProps) { status: 'stopped', mode: 'continuous', volume: 80, + previous_volume: 50, position: 0 }) const [displayMode, setDisplayMode] = useState(() => { @@ -67,8 +68,6 @@ export function Player({ className, onPlayerModeChange }: PlayerProps) { }, [displayMode, onPlayerModeChange]) const [showPlaylist, setShowPlaylist] = useState(false) const [isLoading, setIsLoading] = useState(false) - const [isMuted, setIsMuted] = useState(false) - const [previousVolume, setPreviousVolume] = useState(50) // Load initial state useEffect(() => { @@ -152,23 +151,17 @@ export function Player({ className, onPlayerModeChange }: PlayerProps) { const handleVolumeChange = useCallback((volume: number[]) => { const newVolume = volume[0] executeAction(() => playerService.setVolume(newVolume), 'change volume') - if (newVolume > 0 && isMuted) { - setIsMuted(false) - } - }, [executeAction, isMuted]) + }, [executeAction]) const handleMute = useCallback(() => { - if (isMuted) { + if (state.volume === 0) { // Unmute - executeAction(() => playerService.setVolume(previousVolume), 'unmute') - setIsMuted(false) + executeAction(playerService.unmute, 'unmute') } else { // Mute - setPreviousVolume(state.volume) - executeAction(() => playerService.setVolume(0), 'mute') - setIsMuted(true) + executeAction(playerService.mute, 'mute') } - }, [isMuted, previousVolume, state.volume, executeAction]) + }, [state.volume, executeAction]) const handleModeChange = useCallback(() => { const modes: PlayerMode[] = ['continuous', 'loop', 'loop_one', 'random', 'single'] @@ -460,7 +453,7 @@ export function Player({ className, onPlayerModeChange }: PlayerProps) { onClick={handleMute} className="h-8 w-8 p-0" > - {isMuted || state.volume === 0 ? ( + {state.volume === 0 ? ( ) : ( @@ -468,7 +461,7 @@ export function Player({ className, onPlayerModeChange }: PlayerProps) {
- {isMuted || state.volume === 0 ? ( + {state.volume === 0 ? ( ) : ( @@ -668,7 +661,7 @@ export function Player({ className, onPlayerModeChange }: PlayerProps) {
- {Math.round(isMuted ? 0 : state.volume)}% + {Math.round(state.volume)}%
diff --git a/src/lib/api/services/player.ts b/src/lib/api/services/player.ts index d9d7332..8eb31cd 100644 --- a/src/lib/api/services/player.ts +++ b/src/lib/api/services/player.ts @@ -27,6 +27,7 @@ export interface PlayerState { status: PlayerStatus mode: PlayerMode volume: number + previous_volume: number position: number duration?: number index?: number @@ -107,6 +108,20 @@ export class PlayerService { return apiClient.post('/api/v1/player/volume', { volume }) } + /** + * Mute playback + */ + async mute(): Promise { + return apiClient.post('/api/v1/player/mute') + } + + /** + * Unmute playback + */ + async unmute(): Promise { + return apiClient.post('/api/v1/player/unmute') + } + /** * Set playback mode */