This commit is contained in:
Fredrik Burmester
2024-08-12 19:38:17 +02:00
parent 040ef3b79a
commit d5ee79d740
4 changed files with 25 additions and 10 deletions

View File

@@ -46,6 +46,8 @@ const page: React.FC = () => {
value: undefined, value: undefined,
}); });
const [selectedAudioStream, setSelectedAudioStream] = useState<number>(0);
const { data: item, isLoading: l1 } = useQuery({ const { data: item, isLoading: l1 } = useQuery({
queryKey: ["item", id], queryKey: ["item", id],
queryFn: async () => queryFn: async () =>
@@ -224,7 +226,11 @@ const page: React.FC = () => {
onChange={(val) => setMaxBitrate(val)} onChange={(val) => setMaxBitrate(val)}
selected={maxBitrate} selected={maxBitrate}
/> />
<AudioTrackSelector item={item} onChange={() => {}} selected={null} /> <AudioTrackSelector
item={item}
onChange={setSelectedAudioStream}
selected={selectedAudioStream}
/>
</View> </View>
<PlayButton item={item} chromecastReady={false} onPress={onPressPlay} /> <PlayButton item={item} chromecastReady={false} onPress={onPressPlay} />
</View> </View>

View File

@@ -5,6 +5,7 @@ import { atom, useAtom } from "jotai";
import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models";
import { useEffect, useMemo } from "react"; import { useEffect, useMemo } from "react";
import { MediaStream } from "@jellyfin/sdk/lib/generated-client/models"; import { MediaStream } from "@jellyfin/sdk/lib/generated-client/models";
import { tc } from "@/utils/textTools";
interface Props extends React.ComponentProps<typeof View> { interface Props extends React.ComponentProps<typeof View> {
item: BaseItemDto; item: BaseItemDto;
@@ -18,10 +19,6 @@ export const AudioTrackSelector: React.FC<Props> = ({
selected, selected,
...props ...props
}) => { }) => {
console.log(
item.MediaSources?.[0].MediaStreams?.filter((x) => x.Type === "Audio"),
);
const audioStreams = useMemo( const audioStreams = useMemo(
() => () =>
item.MediaSources?.[0].MediaStreams?.filter((x) => x.Type === "Audio"), item.MediaSources?.[0].MediaStreams?.filter((x) => x.Type === "Audio"),
@@ -33,15 +30,20 @@ export const AudioTrackSelector: React.FC<Props> = ({
[audioStreams, selected], [audioStreams, selected],
); );
useEffect(() => {
console.log(audioStreams, selected);
}, [audioStreams, selected]);
return ( return (
<View className="flex flex-row items-center justify-between" {...props}> <View className="flex flex-row items-center justify-between" {...props}>
<DropdownMenu.Root> <DropdownMenu.Root>
<DropdownMenu.Trigger> <DropdownMenu.Trigger>
<View className="flex flex-col mb-2"> <View className="flex flex-col mb-2">
<Text className="opacity-50 mb-1 text-xs">Bitrate</Text> <Text className="opacity-50 mb-1 text-xs">Audio streams</Text>
<View className="flex flex-row"> <View className="flex flex-row">
<TouchableOpacity className="bg-neutral-900 rounded-2xl border-neutral-900 border px-3 py-2 flex flex-row items-center justify-between"> <TouchableOpacity className="bg-neutral-900 max-w-32 h-12 rounded-2xl border-neutral-900 border px-3 py-2 flex flex-row items-center justify-between">
<Text>{selectedAudioSteam?.DisplayTitle}</Text> <Text className="">
{tc(selectedAudioSteam?.DisplayTitle, 13)}
</Text>
</TouchableOpacity> </TouchableOpacity>
</View> </View>
</View> </View>
@@ -55,7 +57,7 @@ export const AudioTrackSelector: React.FC<Props> = ({
collisionPadding={8} collisionPadding={8}
sideOffset={8} sideOffset={8}
> >
<DropdownMenu.Label>Bitrates</DropdownMenu.Label> <DropdownMenu.Label>Audio streams</DropdownMenu.Label>
{audioStreams?.map((audio, index: number) => ( {audioStreams?.map((audio, index: number) => (
<DropdownMenu.Item <DropdownMenu.Item
key={index.toString()} key={index.toString()}

View File

@@ -44,7 +44,7 @@ export const BitrateSelector: React.FC<Props> = ({
<View className="flex flex-col mb-2"> <View className="flex flex-col mb-2">
<Text className="opacity-50 mb-1 text-xs">Bitrate</Text> <Text className="opacity-50 mb-1 text-xs">Bitrate</Text>
<View className="flex flex-row"> <View className="flex flex-row">
<TouchableOpacity className="bg-neutral-900 rounded-2xl border-neutral-900 border px-3 py-2 flex flex-row items-center justify-between"> <TouchableOpacity className="bg-neutral-900 h-12 rounded-2xl border-neutral-900 border px-3 py-2 flex flex-row items-center justify-between">
<Text> <Text>
{BITRATES.find((b) => b.value === selected.value)?.key} {BITRATES.find((b) => b.value === selected.value)?.key}
</Text> </Text>

7
utils/textTools.ts Normal file
View File

@@ -0,0 +1,7 @@
/*
* Truncate a text longer than a certain length
*/
export const tc = (text: string | null | undefined, length: number = 20) => {
if (!text) return "";
return text.length > length ? text.substr(0, length) + "..." : text;
};