fix: audio track selection

This commit is contained in:
Adrian Castro
2024-03-06 14:24:21 +01:00
parent b5a7e58e66
commit 6e3aabf369
2 changed files with 21 additions and 2 deletions

View File

@@ -1,3 +1,4 @@
import { useEffect } from "react";
import { Pressable, ScrollView, View } from "react-native"; import { Pressable, ScrollView, View } from "react-native";
import Modal from "react-native-modal"; import Modal from "react-native-modal";
import { MaterialCommunityIcons } from "@expo/vector-icons"; import { MaterialCommunityIcons } from "@expo/vector-icons";
@@ -21,7 +22,9 @@ export interface AudioTrack {
export const AudioTrackSelector = () => { export const AudioTrackSelector = () => {
const tracks = usePlayerStore((state) => state.interface.audioTracks); const tracks = usePlayerStore((state) => state.interface.audioTracks);
const setAudioTracks = usePlayerStore((state) => state.setAudioTracks);
const stream = usePlayerStore((state) => state.interface.currentStream); const stream = usePlayerStore((state) => state.interface.currentStream);
const selectedTrack = useAudioTrackStore((state) => state.selectedTrack);
const setSelectedAudioTrack = useAudioTrackStore( const setSelectedAudioTrack = useAudioTrackStore(
(state) => state.setSelectedAudioTrack, (state) => state.setSelectedAudioTrack,
@@ -30,6 +33,22 @@ export const AudioTrackSelector = () => {
const { isTrue, on, off } = useBoolean(); const { isTrue, on, off } = useBoolean();
const { synchronizePlayback } = useAudioTrack(); 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; if (!tracks?.length) return null;
return ( return (

View File

@@ -12,8 +12,8 @@ export const useAudioTrackStore = create(
immer<AudioTrackStore>((set) => ({ immer<AudioTrackStore>((set) => ({
selectedTrack: null, selectedTrack: null,
setSelectedAudioTrack: (track) => { setSelectedAudioTrack: (track) => {
set((s) => { set((state) => {
s.selectedTrack = track; state.selectedTrack = track;
}); });
}, },
})), })),