import { useEffect, useState } from "react"; import { MaterialCommunityIcons } from "@expo/vector-icons"; import { useTheme } from "tamagui"; import { useAudioTrack } from "~/hooks/player/useAudioTrack"; import { useAudioTrackStore } from "~/stores/audio"; import { usePlayerStore } from "~/stores/player/store"; import { MWButton } from "../ui/Button"; import { Controls } from "./Controls"; import { Settings } from "./settings/Sheet"; export interface AudioTrack { uri: string; name: string; language: string; active?: boolean; } export const AudioTrackSelector = () => { const theme = useTheme(); const [open, setOpen] = useState(false); const tracks = usePlayerStore((state) => state.interface.audioTracks); const setAudioTracks = usePlayerStore((state) => state.setAudioTracks); const stream = usePlayerStore((state) => state.interface.currentStream); const selectedTrack = useAudioTrackStore((state) => state.selectedTrack); const setSelectedAudioTrack = useAudioTrackStore( (state) => state.setSelectedAudioTrack, ); const { synchronizePlayback } = useAudioTrack(); useEffect(() => { if (tracks && selectedTrack) { const needsUpdate = tracks.some( (t) => t.active !== (t.uri === selectedTrack.uri), ); if (needsUpdate) { const updatedTracks = tracks.map((t) => ({ ...t, active: t.uri === selectedTrack.uri, })); setAudioTracks(updatedTracks); } } }, [selectedTrack, setAudioTracks, tracks]); if (!tracks?.length) return null; return ( <> } onPress={() => setOpen(true)} > Audio setOpen(false)} /> } title="Audio" /> {tracks?.map((track) => ( ) } onPress={() => { setSelectedAudioTrack(track); if (stream) { void synchronizePlayback(track, stream); } }} /> ))} ); };