mirror of
https://github.com/movie-web/native-app.git
synced 2025-09-13 14:33:26 +00:00
fix: audio track selection
This commit is contained in:
@@ -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 (
|
||||||
|
@@ -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;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
})),
|
})),
|
||||||
|
Reference in New Issue
Block a user