diff --git a/apps/expo/src/components/player/ScraperProcess.tsx b/apps/expo/src/components/player/ScraperProcess.tsx index af8bbe1..c9a5efc 100644 --- a/apps/expo/src/components/player/ScraperProcess.tsx +++ b/apps/expo/src/components/player/ScraperProcess.tsx @@ -113,27 +113,29 @@ export const ScraperProcess = ({ data }: ScraperProcessProps) => { }; if (tracks?.audio.length) { - const audioTracks: AudioTrack[] = tracks.audio - .map((track) => ({ - uri: constructFullUrl( - (streamResult.stream as HlsBasedStream).playlist, - track.uri, - ), - name: - (track.properties[0]?.attributes.name as string) ?? "Unknown", - language: - (track.properties[0]?.attributes.language as string) ?? - "Unknown", - active: - (track.properties[0]?.attributes.default as boolean) ?? false, - })) - .filter((track, index, self) => { - const trackUriSet = new Set(self.map((t) => t.uri)); - return ( - !trackUriSet.has(track.uri) || trackUriSet.size === index + 1 - ); - }); - setAudioTracks(audioTracks); + const audioTracks: AudioTrack[] = tracks.audio.map((track) => ({ + uri: constructFullUrl( + (streamResult.stream as HlsBasedStream).playlist, + track.uri, + ), + name: (track.properties[0]?.attributes.name as string) ?? "Unknown", + language: + (track.properties[0]?.attributes.language as string) ?? "Unknown", + active: + (track.properties[0]?.attributes.default as boolean) ?? false, + })); + + const uniqueTracks = new Set(audioTracks.map((t) => t.language)); + + const filteredAudioTracks = audioTracks.filter((track) => { + if (uniqueTracks.has(track.language)) { + uniqueTracks.delete(track.language); + return true; + } + return false; + }); + + setAudioTracks(filteredAudioTracks); } } setPlayerStatus(PlayerStatus.READY);