mirror of
https://github.com/Stremio/stremio-web.git
synced 2026-05-13 01:51:28 +00:00
Player: subtitle improvements
This commit is contained in:
parent
07a37c872b
commit
0925cb0939
1 changed files with 17 additions and 2 deletions
|
|
@ -91,6 +91,7 @@ const Player = ({ urlParams, queryParams }) => {
|
||||||
|
|
||||||
const nextVideoPopupDismissed = React.useRef(false);
|
const nextVideoPopupDismissed = React.useRef(false);
|
||||||
const defaultSubtitlesSelected = React.useRef(false);
|
const defaultSubtitlesSelected = React.useRef(false);
|
||||||
|
const lastSubtitleTrack = React.useRef(null);
|
||||||
const defaultAudioTrackSelected = React.useRef(false);
|
const defaultAudioTrackSelected = React.useRef(false);
|
||||||
const playingOnExternalDevice = React.useRef(false);
|
const playingOnExternalDevice = React.useRef(false);
|
||||||
const [error, setError] = React.useState(null);
|
const [error, setError] = React.useState(null);
|
||||||
|
|
@ -246,14 +247,22 @@ const Player = ({ urlParams, queryParams }) => {
|
||||||
}, [video.state.videoScale]);
|
}, [video.state.videoScale]);
|
||||||
|
|
||||||
const onSubtitlesTrackSelected = React.useCallback((track) => {
|
const onSubtitlesTrackSelected = React.useCallback((track) => {
|
||||||
|
defaultSubtitlesSelected.current = true;
|
||||||
video.setSubtitlesTrack(track?.id ?? null);
|
video.setSubtitlesTrack(track?.id ?? null);
|
||||||
|
if (track) {
|
||||||
|
lastSubtitleTrack.current = { id: track.id, embedded: true };
|
||||||
|
}
|
||||||
streamStateChanged({
|
streamStateChanged({
|
||||||
subtitleTrack: track ? { id: track.id, embedded: true, lang: track.lang } : null,
|
subtitleTrack: track ? { id: track.id, embedded: true, lang: track.lang } : null,
|
||||||
});
|
});
|
||||||
}, [streamStateChanged]);
|
}, [streamStateChanged]);
|
||||||
|
|
||||||
const onExtraSubtitlesTrackSelected = React.useCallback((track) => {
|
const onExtraSubtitlesTrackSelected = React.useCallback((track) => {
|
||||||
|
defaultSubtitlesSelected.current = true;
|
||||||
video.setExtraSubtitlesTrack(track?.id ?? null);
|
video.setExtraSubtitlesTrack(track?.id ?? null);
|
||||||
|
if (track) {
|
||||||
|
lastSubtitleTrack.current = { id: track.id, embedded: false };
|
||||||
|
}
|
||||||
streamStateChanged({
|
streamStateChanged({
|
||||||
subtitleTrack: track ? { id: track.id, embedded: false, lang: track.lang } : null,
|
subtitleTrack: track ? { id: track.id, embedded: false, lang: track.lang } : null,
|
||||||
});
|
});
|
||||||
|
|
@ -537,6 +546,7 @@ const Player = ({ urlParams, queryParams }) => {
|
||||||
React.useEffect(() => {
|
React.useEffect(() => {
|
||||||
defaultSubtitlesSelected.current = false;
|
defaultSubtitlesSelected.current = false;
|
||||||
defaultAudioTrackSelected.current = false;
|
defaultAudioTrackSelected.current = false;
|
||||||
|
lastSubtitleTrack.current = null;
|
||||||
nextVideoPopupDismissed.current = false;
|
nextVideoPopupDismissed.current = false;
|
||||||
playingOnExternalDevice.current = false;
|
playingOnExternalDevice.current = false;
|
||||||
// we need a timeout here to make sure that previous page unloads and the new one loads
|
// we need a timeout here to make sure that previous page unloads and the new one loads
|
||||||
|
|
@ -659,7 +669,7 @@ const Player = ({ urlParams, queryParams }) => {
|
||||||
|
|
||||||
onShortcut('volumeDown', () => {
|
onShortcut('volumeDown', () => {
|
||||||
if (video.state.volume !== null) {
|
if (video.state.volume !== null) {
|
||||||
onVolumeChangeRequested(Math.min(video.state.volume - 5, 200));
|
onVolumeChangeRequested(Math.max(video.state.volume - 5, 0));
|
||||||
}
|
}
|
||||||
}, [video.state.volume], !menusOpen);
|
}, [video.state.volume], !menusOpen);
|
||||||
|
|
||||||
|
|
@ -675,10 +685,15 @@ const Player = ({ urlParams, queryParams }) => {
|
||||||
const isEnabled = video.state.selectedSubtitlesTrackId !== null || video.state.selectedExtraSubtitlesTrackId !== null;
|
const isEnabled = video.state.selectedSubtitlesTrackId !== null || video.state.selectedExtraSubtitlesTrackId !== null;
|
||||||
|
|
||||||
if (isEnabled) {
|
if (isEnabled) {
|
||||||
|
if (video.state.selectedSubtitlesTrackId) {
|
||||||
|
lastSubtitleTrack.current = { id: video.state.selectedSubtitlesTrackId, embedded: true };
|
||||||
|
} else if (video.state.selectedExtraSubtitlesTrackId) {
|
||||||
|
lastSubtitleTrack.current = { id: video.state.selectedExtraSubtitlesTrackId, embedded: false };
|
||||||
|
}
|
||||||
video.setSubtitlesTrack(null);
|
video.setSubtitlesTrack(null);
|
||||||
video.setExtraSubtitlesTrack(null);
|
video.setExtraSubtitlesTrack(null);
|
||||||
} else {
|
} else {
|
||||||
const savedTrack = player.streamState?.subtitleTrack;
|
const savedTrack = player.streamState?.subtitleTrack ?? lastSubtitleTrack.current;
|
||||||
if (savedTrack?.id) {
|
if (savedTrack?.id) {
|
||||||
savedTrack.embedded ? video.setSubtitlesTrack(savedTrack.id) : video.setExtraSubtitlesTrack(savedTrack.id);
|
savedTrack.embedded ? video.setSubtitlesTrack(savedTrack.id) : video.setExtraSubtitlesTrack(savedTrack.id);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue