Files
App/src/zustand/engineStore.ts
Ritesh Shukla 94ba3af9d1 Adding Cast Support (#489)
Adds Google Cast Speaker Support!

A new button is now present in the bottom left of the player screen. Pressing this button will prompt the user to pick a Cast enabled speaker. Once a speaker is selected, the player controls in Jellify will control the playback of the Cast speaker.
2025-08-26 16:36:57 -05:00

43 lines
1.2 KiB
TypeScript

import { create } from 'zustand'
import { devtools, persist } from 'zustand/middleware'
import { useCastState, CastState } from 'react-native-google-cast'
import TrackPlayer from 'react-native-track-player'
export enum PlayerEngine {
GOOGLE_CAST = 'google_cast',
CARPLAY = 'carplay',
REACT_NATIVE_TRACK_PLAYER = 'react_native_track_player',
}
type playerEngineStore = {
playerEngineData: PlayerEngine
setPlayerEngineData: (data: PlayerEngine) => void
}
const usePlayerEngineStore = create<playerEngineStore>()(
devtools(
persist(
(set) => ({
playerEngineData: PlayerEngine.REACT_NATIVE_TRACK_PLAYER,
setPlayerEngineData: (data: PlayerEngine) => set({ playerEngineData: data }),
}),
{
name: 'player-engine-storage',
},
),
),
)
export const useSelectPlayerEngine = () => {
const setPlayerEngineData = usePlayerEngineStore((state) => state.setPlayerEngineData)
const castState = useCastState()
if (castState === CastState.CONNECTED) {
setPlayerEngineData(PlayerEngine.GOOGLE_CAST)
TrackPlayer.pause() // pause the track player to avoid conflicts
return
}
setPlayerEngineData(PlayerEngine.REACT_NATIVE_TRACK_PLAYER)
}
export default usePlayerEngineStore