From f08cc4014ddd048386f44aedd395bff0cc67c062 Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 2 Nov 2022 19:47:27 +0100 Subject: [PATCH] feat: select default subtitles track on Player --- package-lock.json | 11 +++++++++++ package.json | 1 + src/routes/Player/Player.js | 18 ++++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/package-lock.json b/package-lock.json index 1642068a8..0fb40775e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,6 +21,7 @@ "classnames": "2.3.1", "eventemitter3": "4.0.7", "filter-invalid-dom-props": "2.1.0", + "langs": "^2.0.0", "lodash.debounce": "4.0.8", "lodash.intersection": "4.4.0", "lodash.isequal": "4.5.0", @@ -9426,6 +9427,11 @@ "node": ">= 8" } }, + "node_modules/langs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/langs/-/langs-2.0.0.tgz", + "integrity": "sha512-v4pxOBEQVN1WBTfB1crhTtxzNLZU9HPWgadlwzWKISJtt6Ku/CnpBrwVy+jFv8StjxsPfwPFzO0CMwdZLJ0/BA==" + }, "node_modules/less": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/less/-/less-4.1.2.tgz", @@ -20962,6 +20968,11 @@ "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", "dev": true }, + "langs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/langs/-/langs-2.0.0.tgz", + "integrity": "sha512-v4pxOBEQVN1WBTfB1crhTtxzNLZU9HPWgadlwzWKISJtt6Ku/CnpBrwVy+jFv8StjxsPfwPFzO0CMwdZLJ0/BA==" + }, "less": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/less/-/less-4.1.2.tgz", diff --git a/package.json b/package.json index 43775796e..312792866 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", "lodash.debounce": "4.0.8", "lodash.intersection": "4.4.0", "lodash.isequal": "4.5.0", diff --git a/src/routes/Player/Player.js b/src/routes/Player/Player.js index 91e89c310..6be903d59 100644 --- a/src/routes/Player/Player.js +++ b/src/routes/Player/Player.js @@ -4,6 +4,7 @@ const React = require('react'); const PropTypes = require('prop-types'); const classnames = require('classnames'); const debounce = require('lodash.debounce'); +const langs = require('langs'); const { useRouteFocused } = require('stremio-router'); const { useServices } = require('stremio/services'); const { HorizontalNavBar, Button, useFullscreen, useBinaryState, useToast, useStreamingServer, withCoreSuspender } = require('stremio/common'); @@ -38,6 +39,7 @@ const Player = ({ urlParams, queryParams }) => { const setImmersedDebounced = React.useCallback(debounce(setImmersed, 3000), []); const [subtitlesMenuOpen, , closeSubtitlesMenu, toggleSubtitlesMenu] = useBinaryState(false); const [infoMenuOpen, , closeInfoMenu, toggleInfoMenu] = useBinaryState(false); + const defaultSubtitlesSelected = React.useRef(false); const [error, setError] = React.useState(null); const [videoState, setVideoState] = React.useReducer( (videoState, nextVideoState) => ({ ...videoState, ...nextVideoState }), @@ -308,6 +310,22 @@ const Player = ({ urlParams, queryParams }) => { pausedChanged(videoState.paused); } }, [videoState.paused]); + React.useEffect(() => { + if (defaultSubtitlesSelected.current === false) { + const findTrackByLang = (tracks, lang) => tracks.find((track) => track.lang === lang || langs.where('1', track.lang)?.[2] === lang); + + const subtitlesTrack = findTrackByLang(videoState.subtitlesTracks, settings.subtitlesLanguage); + const extraSubtitlesTrack = findTrackByLang(videoState.extraSubtitlesTracks, settings.subtitlesLanguage); + + if (subtitlesTrack && subtitlesTrack.id) { + onSubtitlesTrackSelected(subtitlesTrack.id); + defaultSubtitlesSelected.current = true; + } else if (extraSubtitlesTrack && extraSubtitlesTrack.id) { + onExtraSubtitlesTrackSelected(extraSubtitlesTrack.id); + defaultSubtitlesSelected.current = true; + } + } + }, [videoState.subtitlesTracks, videoState.extraSubtitlesTracks, settings.subtitlesLanguage]); React.useEffect(() => { if ((!Array.isArray(videoState.subtitlesTracks) || videoState.subtitlesTracks.length === 0) && (!Array.isArray(videoState.extraSubtitlesTracks) || videoState.extraSubtitlesTracks.length === 0) &&