Files
streamyfin/hooks/usePlaybackSpeed.ts
2026-01-03 19:14:20 +01:00

46 lines
1.4 KiB
TypeScript

import type { BaseItemDto } from "@jellyfin/sdk/lib/generated-client";
import { useMemo } from "react";
import type { Settings } from "@/utils/atoms/settings";
/**
* Determines the appropriate playback speed for a media item based on a three-tier priority system:
* 1. Media-specific speed (highest priority)
* 2. Series-specific speed (medium priority)
* 3. Default speed (lowest priority)
*/
const usePlaybackSpeed = (
item: BaseItemDto | null,
settings: Settings | null,
): { readonly playbackSpeed: number } => {
const playbackSpeed = useMemo(() => {
if (!settings || !item) {
return 1.0;
}
// Start with the lowest priority: default playback speed
let selectedPlaybackSpeed = settings.defaultPlaybackSpeed;
// Second priority: use what is set for Series if it is a Series
if (item.SeriesId && settings.playbackSpeedPerShow[item.SeriesId]) {
selectedPlaybackSpeed = settings.playbackSpeedPerShow[item.SeriesId];
}
// Highest priority: use what is set for Media if it is set
if (item.Id && settings.playbackSpeedPerMedia[item.Id] !== undefined) {
selectedPlaybackSpeed = settings.playbackSpeedPerMedia[item.Id];
}
return selectedPlaybackSpeed;
}, [
item?.Id,
item?.SeriesId,
settings?.defaultPlaybackSpeed,
settings?.playbackSpeedPerMedia,
settings?.playbackSpeedPerShow,
]);
return { playbackSpeed };
};
export default usePlaybackSpeed;