Files
lidify/frontend/lib/audio-hooks.tsx
2025-12-25 18:58:06 -06:00

79 lines
2.8 KiB
TypeScript

"use client";
import { useAudioState } from "./audio-state-context";
import { useAudioPlayback } from "./audio-playback-context";
import { useAudioControls } from "./audio-controls-context";
/**
* Unified hook that combines all audio contexts.
* Use this for backward compatibility with existing code.
*
* For optimal performance, prefer using the individual hooks:
* - useAudioState() - for rarely changing data (currentTrack, queue, etc.)
* - useAudioPlayback() - for frequently changing data (currentTime, isPlaying)
* - useAudioControls() - for actions only (play, pause, next, etc.)
*/
export function useAudio() {
const state = useAudioState();
const playback = useAudioPlayback();
const controls = useAudioControls();
return {
// State
currentTrack: state.currentTrack,
currentAudiobook: state.currentAudiobook,
currentPodcast: state.currentPodcast,
playbackType: state.playbackType,
queue: state.queue,
currentIndex: state.currentIndex,
isShuffle: state.isShuffle,
isRepeat: state.isRepeat,
repeatMode: state.repeatMode,
playerMode: state.playerMode,
volume: state.volume,
isMuted: state.isMuted,
// Vibe mode state
vibeMode: state.vibeMode,
vibeSourceFeatures: state.vibeSourceFeatures,
vibeQueueIds: state.vibeQueueIds,
// Playback
isPlaying: playback.isPlaying,
currentTime: playback.currentTime,
duration: playback.duration,
isBuffering: playback.isBuffering,
targetSeekPosition: playback.targetSeekPosition,
canSeek: playback.canSeek,
downloadProgress: playback.downloadProgress,
// Controls
playTrack: controls.playTrack,
playTracks: controls.playTracks,
playAudiobook: controls.playAudiobook,
playPodcast: controls.playPodcast,
pause: controls.pause,
resume: controls.resume,
next: controls.next,
previous: controls.previous,
addToQueue: controls.addToQueue,
removeFromQueue: controls.removeFromQueue,
clearQueue: controls.clearQueue,
setUpcoming: controls.setUpcoming,
toggleShuffle: controls.toggleShuffle,
toggleRepeat: controls.toggleRepeat,
updateCurrentTime: controls.updateCurrentTime,
seek: controls.seek,
skipForward: controls.skipForward,
skipBackward: controls.skipBackward,
setPlayerMode: controls.setPlayerMode,
returnToPreviousMode: controls.returnToPreviousMode,
setVolume: controls.setVolume,
toggleMute: controls.toggleMute,
// Vibe mode controls
startVibeMode: controls.startVibeMode,
stopVibeMode: controls.stopVibeMode,
};
}