mirror of
https://github.com/streamyfin/streamyfin.git
synced 2025-08-20 18:37:18 +02:00
63 lines
1.7 KiB
TypeScript
63 lines
1.7 KiB
TypeScript
// utils/getDefaultPlaySettings.ts
|
|
import { BITRATES } from "@/components/BitrateSelector";
|
|
import {
|
|
BaseItemDto,
|
|
MediaSourceInfo,
|
|
} from "@jellyfin/sdk/lib/generated-client";
|
|
import { Settings } from "../atoms/settings";
|
|
|
|
interface PlaySettings {
|
|
item: BaseItemDto;
|
|
bitrate: (typeof BITRATES)[0];
|
|
mediaSource?: MediaSourceInfo | null;
|
|
audioIndex?: number | null;
|
|
subtitleIndex?: number | null;
|
|
}
|
|
|
|
export function getDefaultPlaySettings(
|
|
item: BaseItemDto,
|
|
settings: Settings
|
|
): PlaySettings {
|
|
if (item.Type === "Program") {
|
|
return {
|
|
item,
|
|
bitrate: BITRATES[0],
|
|
mediaSource: undefined,
|
|
audioIndex: undefined,
|
|
subtitleIndex: undefined,
|
|
};
|
|
}
|
|
|
|
// 1. Get first media source
|
|
|
|
const mediaSource = item.MediaSources?.[0];
|
|
|
|
// 2. Get default or preferred audio
|
|
const defaultAudioIndex = mediaSource?.DefaultAudioStreamIndex;
|
|
const preferedAudioIndex = mediaSource?.MediaStreams?.find(
|
|
(x) => x.Language === settings?.defaultAudioLanguage
|
|
)?.Index;
|
|
const firstAudioIndex = mediaSource?.MediaStreams?.find(
|
|
(x) => x.Type === "Audio"
|
|
)?.Index;
|
|
|
|
// 3. Get default or preferred subtitle
|
|
const preferedSubtitleIndex = mediaSource?.MediaStreams?.find(
|
|
(x) => x.Language === settings?.defaultSubtitleLanguage?.value
|
|
)?.Index;
|
|
const defaultSubtitleIndex = mediaSource?.MediaStreams?.find(
|
|
(stream) => stream.Type === "Subtitle" && stream.IsDefault
|
|
)?.Index;
|
|
|
|
// 4. Get default bitrate
|
|
const bitrate = BITRATES[0];
|
|
|
|
return {
|
|
item,
|
|
bitrate,
|
|
mediaSource,
|
|
audioIndex: preferedAudioIndex ?? defaultAudioIndex ?? firstAudioIndex,
|
|
subtitleIndex: preferedSubtitleIndex ?? defaultSubtitleIndex ?? -1,
|
|
};
|
|
}
|