mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-05-24 02:02:36 -04:00
Add default subtitle handling
This commit is contained in:
parent
e60a1e5a25
commit
de0eb0b4e9
@ -18,7 +18,7 @@
|
|||||||
* along with Kyoo. If not, see <https://www.gnu.org/licenses/>.
|
* along with Kyoo. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Episode, Subtitle } from "@kyoo/models";
|
import { Episode, Subtitle, useAccount } from "@kyoo/models";
|
||||||
import { atom, useAtom, useAtomValue, useSetAtom } from "jotai";
|
import { atom, useAtom, useAtomValue, useSetAtom } from "jotai";
|
||||||
import { useAtomCallback } from "jotai/utils";
|
import { useAtomCallback } from "jotai/utils";
|
||||||
import { ElementRef, memo, useEffect, useLayoutEffect, useRef, useState, useCallback } from "react";
|
import { ElementRef, memo, useEffect, useLayoutEffect, useRef, useState, useCallback } from "react";
|
||||||
@ -128,20 +128,29 @@ export const Video = memo(function Video({
|
|||||||
setPrivateProgress(startTime.current ?? 0);
|
setPrivateProgress(startTime.current ?? 0);
|
||||||
setPublicProgress(startTime.current ?? 0);
|
setPublicProgress(startTime.current ?? 0);
|
||||||
} else {
|
} else {
|
||||||
|
// keep current time when changing between direct and hls.
|
||||||
startTime.current = getProgress();
|
startTime.current = getProgress();
|
||||||
}
|
}
|
||||||
oldLinks.current = links;
|
oldLinks.current = links;
|
||||||
setPlay(true);
|
setPlay(true);
|
||||||
}, [mode, links, setLoad, setPrivateProgress, setPublicProgress, setPlay, getProgress]);
|
}, [mode, links, setLoad, setPrivateProgress, setPublicProgress, setPlay, getProgress]);
|
||||||
|
|
||||||
const [subtitle, setSubtitle] = useAtom(subtitleAtom);
|
const account = useAccount();
|
||||||
|
const defaultSubLanguage = account?.settings.subtitleLanguage;
|
||||||
|
const setSubtitle = useSetAtom(subtitleAtom);
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!subtitle || !subtitles) return;
|
if (!subtitles) return;
|
||||||
setSubtitle(subtitles.find((x) => x.language === subtitle.language) ?? null);
|
setSubtitle((subtitle) => {
|
||||||
|
const subRet = subtitle ? subtitles.find((x) => x.language === subtitle.language) : null;
|
||||||
|
if (subRet) return subRet;
|
||||||
|
if (!defaultSubLanguage) return null;
|
||||||
|
if (defaultSubLanguage == "default") return subtitles.find((x) => x.isDefault) ?? null;
|
||||||
|
return subtitles.find((x) => x.language === defaultSubLanguage) ?? null;
|
||||||
|
});
|
||||||
// When the video change, try to persist the subtitle language.
|
// When the video change, try to persist the subtitle language.
|
||||||
// Also include the player ref, it can be initalised after the subtitles.
|
// Also include the player ref, it can be initalised after the subtitles.
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [subtitles, ref.current]);
|
}, [subtitles, setSubtitle, defaultSubLanguage, ref.current]);
|
||||||
|
|
||||||
const volume = useAtomValue(volumeAtom);
|
const volume = useAtomValue(volumeAtom);
|
||||||
const isMuted = useAtomValue(mutedAtom);
|
const isMuted = useAtomValue(mutedAtom);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user