79 lines
2.8 KiB
TypeScript
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,
|
|
};
|
|
}
|