1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

chore: clear and set secondary track for continued plays

This commit is contained in:
Ivan Schurawel 2023-02-15 02:10:55 -05:00 committed by Ivan Schurawel
parent fb68bb1419
commit c74c0cddde

View file

@ -422,7 +422,8 @@ function getPlaybackInfo(player,
enableDirectPlay, enableDirectPlay,
enableDirectStream, enableDirectStream,
allowVideoStreamCopy, allowVideoStreamCopy,
allowAudioStreamCopy) { allowAudioStreamCopy,
secondarySubtitleStreamIndex) {
if (!itemHelper.isLocalItem(item) && item.MediaType === 'Audio' && !player.useServerPlaybackInfoForAudio) { if (!itemHelper.isLocalItem(item) && item.MediaType === 'Audio' && !player.useServerPlaybackInfoForAudio) {
return Promise.resolve({ return Promise.resolve({
MediaSources: [ MediaSources: [
@ -462,6 +463,9 @@ function getPlaybackInfo(player,
if (subtitleStreamIndex != null) { if (subtitleStreamIndex != null) {
query.SubtitleStreamIndex = subtitleStreamIndex; query.SubtitleStreamIndex = subtitleStreamIndex;
} }
if (secondarySubtitleStreamIndex != null) {
query.SecondarySubtitleStreamIndex = secondarySubtitleStreamIndex;
}
if (enableDirectPlay != null) { if (enableDirectPlay != null) {
query.EnableDirectPlay = enableDirectPlay; query.EnableDirectPlay = enableDirectPlay;
} }
@ -1720,6 +1724,7 @@ class PlaybackManager {
}).then(function (deviceProfile) { }).then(function (deviceProfile) {
const audioStreamIndex = params.AudioStreamIndex == null ? getPlayerData(player).audioStreamIndex : params.AudioStreamIndex; const audioStreamIndex = params.AudioStreamIndex == null ? getPlayerData(player).audioStreamIndex : params.AudioStreamIndex;
const subtitleStreamIndex = params.SubtitleStreamIndex == null ? getPlayerData(player).subtitleStreamIndex : params.SubtitleStreamIndex; const subtitleStreamIndex = params.SubtitleStreamIndex == null ? getPlayerData(player).subtitleStreamIndex : params.SubtitleStreamIndex;
const secondarySubtitleStreamIndex = params.SubtitleStreamIndex == null ? getPlayerData(player).secondarySubtitleStreamIndex : params.secondarySubtitleStreamIndex;
let currentMediaSource = self.currentMediaSource(player); let currentMediaSource = self.currentMediaSource(player);
const apiClient = ServerConnections.getApiClient(currentItem.ServerId); const apiClient = ServerConnections.getApiClient(currentItem.ServerId);
@ -1746,6 +1751,7 @@ class PlaybackManager {
} }
getPlayerData(player).subtitleStreamIndex = subtitleStreamIndex; getPlayerData(player).subtitleStreamIndex = subtitleStreamIndex;
getPlayerData(player).secondarySubtitleStreamIndex = secondarySubtitleStreamIndex;
getPlayerData(player).audioStreamIndex = audioStreamIndex; getPlayerData(player).audioStreamIndex = audioStreamIndex;
getPlayerData(player).maxStreamingBitrate = maxBitrate; getPlayerData(player).maxStreamingBitrate = maxBitrate;
@ -2031,6 +2037,7 @@ class PlaybackManager {
state.PlayState.PlaybackRate = self.getPlaybackRate(player); state.PlayState.PlaybackRate = self.getPlaybackRate(player);
state.PlayState.SubtitleStreamIndex = self.getSubtitleStreamIndex(player); state.PlayState.SubtitleStreamIndex = self.getSubtitleStreamIndex(player);
state.PlayState.SecondarySubtitleStreamIndex = self.getSecondarySubtitleStreamIndex(player);
state.PlayState.AudioStreamIndex = self.getAudioStreamIndex(player); state.PlayState.AudioStreamIndex = self.getAudioStreamIndex(player);
state.PlayState.BufferedRanges = self.getBufferedRanges(player); state.PlayState.BufferedRanges = self.getBufferedRanges(player);
@ -2311,11 +2318,16 @@ class PlaybackManager {
}); });
} }
function rankStreamType(prevIndex, prevSource, mediaSource, streamType) { function rankStreamType(prevIndex, prevSource, mediaSource, streamType, isSecondarySubtitle) {
if (prevIndex == -1) { if (prevIndex == -1) {
console.debug(`AutoSet ${streamType} - No Stream Set`); console.debug(`AutoSet ${streamType} - No Stream Set`);
if (streamType == 'Subtitle') if (streamType == 'Subtitle') {
mediaSource.DefaultSubtitleStreamIndex = -1; if (isSecondarySubtitle) {
mediaSource.DefaultSecondarySubtitleStreamIndex = -1;
} else {
mediaSource.DefaultSubtitleStreamIndex = -1;
}
}
return; return;
} }
@ -2373,8 +2385,13 @@ class PlaybackManager {
if (bestStreamIndex != null) { if (bestStreamIndex != null) {
console.debug(`AutoSet ${streamType} - Using ${bestStreamIndex} score ${bestStreamScore}.`); console.debug(`AutoSet ${streamType} - Using ${bestStreamIndex} score ${bestStreamScore}.`);
if (streamType == 'Subtitle') if (streamType == 'Subtitle') {
mediaSource.DefaultSubtitleStreamIndex = bestStreamIndex; if (isSecondarySubtitle) {
mediaSource.DefaultSecondarySubtitleStreamIndex = bestStreamIndex;
} else {
mediaSource.DefaultSubtitleStreamIndex = bestStreamIndex;
}
}
if (streamType == 'Audio') if (streamType == 'Audio')
mediaSource.DefaultAudioStreamIndex = bestStreamIndex; mediaSource.DefaultAudioStreamIndex = bestStreamIndex;
} else { } else {
@ -2382,7 +2399,7 @@ class PlaybackManager {
} }
} }
function autoSetNextTracks(prevSource, mediaSource, audio, subtitle) { function autoSetNextTracks(prevSource, mediaSource, audio, subtitle, secondarySubtitle) {
try { try {
if (!prevSource) return; if (!prevSource) return;
@ -2398,6 +2415,10 @@ class PlaybackManager {
if (subtitle && typeof prevSource.DefaultSubtitleStreamIndex == 'number') { if (subtitle && typeof prevSource.DefaultSubtitleStreamIndex == 'number') {
rankStreamType(prevSource.DefaultSubtitleStreamIndex, prevSource, mediaSource, 'Subtitle'); rankStreamType(prevSource.DefaultSubtitleStreamIndex, prevSource, mediaSource, 'Subtitle');
} }
if (secondarySubtitle && typeof prevSource.DefaultSecondarySubtitleStreamIndex == 'number') {
rankStreamType(prevSource.DefaultSecondarySubtitleStreamIndex, prevSource, mediaSource, 'Subtitle', true);
}
} catch (e) { } catch (e) {
console.error(`AutoSet - Caught unexpected error: ${e}`); console.error(`AutoSet - Caught unexpected error: ${e}`);
} }
@ -2463,14 +2484,14 @@ class PlaybackManager {
return getPlaybackMediaSource(player, apiClient, deviceProfile, maxBitrate, item, startPosition, mediaSourceId, audioStreamIndex, subtitleStreamIndex).then(async (mediaSource) => { return getPlaybackMediaSource(player, apiClient, deviceProfile, maxBitrate, item, startPosition, mediaSourceId, audioStreamIndex, subtitleStreamIndex).then(async (mediaSource) => {
const user = await apiClient.getCurrentUser(); const user = await apiClient.getCurrentUser();
autoSetNextTracks(prevSource, mediaSource, user.Configuration.RememberAudioSelections, user.Configuration.RememberSubtitleSelections); const playerData = getPlayerData(player);
autoSetNextTracks(prevSource, mediaSource, user.Configuration.RememberAudioSelections, user.Configuration.RememberSubtitleSelections, playerData.secondarySubtitleStreamIndex);
const streamInfo = createStreamInfo(apiClient, item.MediaType, item, mediaSource, startPosition, player); const streamInfo = createStreamInfo(apiClient, item.MediaType, item, mediaSource, startPosition, player);
streamInfo.fullscreen = playOptions.fullscreen; streamInfo.fullscreen = playOptions.fullscreen;
const playerData = getPlayerData(player);
playerData.isChangingStream = false; playerData.isChangingStream = false;
playerData.maxStreamingBitrate = maxBitrate; playerData.maxStreamingBitrate = maxBitrate;
playerData.streamInfo = streamInfo; playerData.streamInfo = streamInfo;
@ -2832,7 +2853,8 @@ class PlaybackManager {
return { return {
...prevSource, ...prevSource,
DefaultAudioStreamIndex: prevPlayerData.audioStreamIndex, DefaultAudioStreamIndex: prevPlayerData.audioStreamIndex,
DefaultSubtitleStreamIndex: prevPlayerData.subtitleStreamIndex DefaultSubtitleStreamIndex: prevPlayerData.subtitleStreamIndex,
DefaultSecondarySubtitleStreamIndex: prevPlayerData.secondarySubtitleStreamIndex
}; };
} }
@ -2991,9 +3013,11 @@ class PlaybackManager {
if (mediaSource) { if (mediaSource) {
playerData.audioStreamIndex = mediaSource.DefaultAudioStreamIndex; playerData.audioStreamIndex = mediaSource.DefaultAudioStreamIndex;
playerData.subtitleStreamIndex = mediaSource.DefaultSubtitleStreamIndex; playerData.subtitleStreamIndex = mediaSource.DefaultSubtitleStreamIndex;
playerData.secondarySubtitleStreamIndex = mediaSource.DefaultSecondarySubtitleStreamIndex;
} else { } else {
playerData.audioStreamIndex = null; playerData.audioStreamIndex = null;
playerData.subtitleStreamIndex = null; playerData.subtitleStreamIndex = null;
playerData.secondarySubtitleStreamIndex = null;
} }
self._playNextAfterEnded = true; self._playNextAfterEnded = true;