diff --git a/package.json b/package.json index e87c617f7..f93083d7b 100755 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "classnames": "2.3.1", "eventemitter3": "4.0.7", "filter-invalid-dom-props": "2.1.0", + "langs": "^2.0.0", "hat": "0.0.3", "langs": "^2.0.0", "lodash.debounce": "4.0.8", diff --git a/src/common/index.js b/src/common/index.js index 90c266e64..22dcad52a 100644 --- a/src/common/index.js +++ b/src/common/index.js @@ -31,7 +31,6 @@ const languageNames = require('./languageNames'); const routesRegexp = require('./routesRegexp'); const useAnimationFrame = require('./useAnimationFrame'); const useBinaryState = require('./useBinaryState'); -const useDeepEqualMemo = require('./useDeepEqualMemo'); const useFullscreen = require('./useFullscreen'); const useLiveRef = require('./useLiveRef'); const useModelState = require('./useModelState'); @@ -75,7 +74,6 @@ module.exports = { routesRegexp, useAnimationFrame, useBinaryState, - useDeepEqualMemo, useFullscreen, useLiveRef, useModelState, diff --git a/src/common/useDeepEqualMemo.js b/src/common/useDeepEqualMemo.js deleted file mode 100644 index 00f5e72ce..000000000 --- a/src/common/useDeepEqualMemo.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (C) 2017-2022 Smart code 203358507 - -const React = require('react'); -const isEqual = require('lodash.isequal'); - -const useDeepEqualMemo = (cb, deps) => { - const valueRef = React.useRef(); - const mountedRef = React.useRef(false); - const prevDepsRef = React.useRef(deps); - if (!mountedRef.current || !isEqual(prevDepsRef.current, deps)) { - valueRef.current = cb(); - prevDepsRef.current = deps; - } - React.useLayoutEffect(() => { - mountedRef.current = true; - }, []); - return valueRef.current; -}; - -module.exports = useDeepEqualMemo; diff --git a/src/routes/Player/Player.js b/src/routes/Player/Player.js index 6b8244236..61a583256 100644 --- a/src/routes/Player/Player.js +++ b/src/routes/Player/Player.js @@ -44,6 +44,7 @@ const Player = ({ urlParams, queryParams }) => { const [speedMenuOpen, , closeSpeedMenu, toggleSpeedMenu] = useBinaryState(false); const [videosMenuOpen, , closeVideosMenu, toggleVideosMenu] = useBinaryState(false); const defaultSubtitlesSelected = React.useRef(false); + const defaultAudioTrackSelected = React.useRef(false); const [error, setError] = React.useState(null); const [videoState, setVideoState] = React.useReducer( (videoState, nextVideoState) => ({ ...videoState, ...nextVideoState }), @@ -343,8 +344,20 @@ const Player = ({ urlParams, queryParams }) => { } } }, [videoState.subtitlesTracks, videoState.extraSubtitlesTracks]); + React.useEffect(() => { + if (!defaultAudioTrackSelected.current) { + const findTrackByLang = (tracks, lang) => tracks.find((track) => track.lang === lang || langs.where('1', track.lang)?.[2] === lang); + const audioTrack = findTrackByLang(videoState.audioTracks, settings.audioLanguage); + + if (audioTrack && audioTrack.id) { + onAudioTrackSelected(audioTrack.id); + defaultAudioTrackSelected.current = true; + } + } + }, [videoState.audioTracks]); React.useEffect(() => { defaultSubtitlesSelected.current = false; + defaultAudioTrackSelected.current = false; }, [videoState.stream]); React.useEffect(() => { if ((!Array.isArray(videoState.subtitlesTracks) || videoState.subtitlesTracks.length === 0) && diff --git a/src/routes/Search/Search.js b/src/routes/Search/Search.js index bea2e7606..3ea5bd3b5 100644 --- a/src/routes/Search/Search.js +++ b/src/routes/Search/Search.js @@ -5,7 +5,7 @@ const PropTypes = require('prop-types'); const classnames = require('classnames'); const debounce = require('lodash.debounce'); const Icon = require('@stremio/stremio-icons/dom'); -const { Image, MainNavBars, MetaRow, MetaItem, useDeepEqualMemo, withCoreSuspender, getVisibleChildrenRange } = require('stremio/common'); +const { Image, MainNavBars, MetaRow, MetaItem, withCoreSuspender, getVisibleChildrenRange } = require('stremio/common'); const useSearch = require('./useSearch'); const styles = require('./styles'); @@ -13,7 +13,7 @@ const THRESHOLD = 100; const Search = ({ queryParams }) => { const [search, loadSearchRows] = useSearch(queryParams); - const query = useDeepEqualMemo(() => { + const query = React.useMemo(() => { return search.selected !== null ? search.selected.extra.reduceRight((query, [name, value]) => { if (name === 'search') { diff --git a/src/routes/Settings/Settings.js b/src/routes/Settings/Settings.js index 9ca68fd52..85c790094 100644 --- a/src/routes/Settings/Settings.js +++ b/src/routes/Settings/Settings.js @@ -28,6 +28,7 @@ const Settings = () => { subtitlesTextColorInput, subtitlesBackgroundColorInput, subtitlesOutlineColorInput, + audioLanguageSelect, seekTimeDurationSelect, bingeWatchingCheckbox, playInBackgroundCheckbox, @@ -310,6 +311,15 @@ const Settings = () => { {...subtitlesOutlineColorInput} /> +