mirror of
				https://github.com/zoriya/Kyoo.git
				synced 2025-10-31 10:37:13 -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