feat: playback speed options

This commit is contained in:
Fredrik Burmester
2026-01-03 19:14:20 +01:00
parent 1d8d92175a
commit 3ff7c47b7f
9 changed files with 465 additions and 1 deletions

45
hooks/usePlaybackSpeed.ts Normal file
View File

@@ -0,0 +1,45 @@
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;