mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
fix endsAt when playback rate changes
This commit is contained in:
parent
961acc8d61
commit
610b05025d
3 changed files with 9 additions and 8 deletions
|
@ -330,8 +330,8 @@ import '../../elements/emby-button/emby-button';
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getEndsAtFromPosition(runtimeTicks, positionTicks, includeText) {
|
export function getEndsAtFromPosition(runtimeTicks, positionTicks, playbackRate, includeText) {
|
||||||
let endDate = new Date().getTime() + ((runtimeTicks - (positionTicks || 0)) / 10000);
|
let endDate = new Date().getTime() + (1 / playbackRate) * ((runtimeTicks - (positionTicks || 0)) / 10000);
|
||||||
endDate = new Date(endDate);
|
endDate = new Date(endDate);
|
||||||
|
|
||||||
const displayTime = datetime.getDisplayTime(endDate);
|
const displayTime = datetime.getDisplayTime(endDate);
|
||||||
|
|
|
@ -1960,6 +1960,7 @@ class PlaybackManager {
|
||||||
|
|
||||||
state.PlayState.PositionTicks = getCurrentTicks(player);
|
state.PlayState.PositionTicks = getCurrentTicks(player);
|
||||||
state.PlayState.PlaybackStartTimeTicks = self.playbackStartTime(player);
|
state.PlayState.PlaybackStartTimeTicks = self.playbackStartTime(player);
|
||||||
|
state.PlayState.PlaybackRate = self.getPlaybackRate(player)
|
||||||
|
|
||||||
state.PlayState.SubtitleStreamIndex = self.getSubtitleStreamIndex(player);
|
state.PlayState.SubtitleStreamIndex = self.getSubtitleStreamIndex(player);
|
||||||
state.PlayState.AudioStreamIndex = self.getAudioStreamIndex(player);
|
state.PlayState.AudioStreamIndex = self.getAudioStreamIndex(player);
|
||||||
|
|
|
@ -545,7 +545,7 @@ import { appRouter } from '../../../components/appRouter';
|
||||||
const player = this;
|
const player = this;
|
||||||
currentRuntimeTicks = playbackManager.duration(player);
|
currentRuntimeTicks = playbackManager.duration(player);
|
||||||
const currentTime = playbackManager.currentTime(player) * 10000;
|
const currentTime = playbackManager.currentTime(player) * 10000;
|
||||||
updateTimeDisplay(currentTime, currentRuntimeTicks, playbackManager.playbackStartTime(player), playbackManager.getBufferedRanges(player));
|
updateTimeDisplay(currentTime, currentRuntimeTicks, playbackManager.playbackStartTime(player), playbackManager.getPlaybackRate(player), playbackManager.getBufferedRanges(player));
|
||||||
const item = currentItem;
|
const item = currentItem;
|
||||||
refreshProgramInfoIfNeeded(player, item);
|
refreshProgramInfoIfNeeded(player, item);
|
||||||
showComingUpNextIfNeeded(player, item, currentTime, currentRuntimeTicks);
|
showComingUpNextIfNeeded(player, item, currentTime, currentRuntimeTicks);
|
||||||
|
@ -640,7 +640,7 @@ import { appRouter } from '../../../components/appRouter';
|
||||||
btnRewind.disabled = !playState.CanSeek;
|
btnRewind.disabled = !playState.CanSeek;
|
||||||
const nowPlayingItem = state.NowPlayingItem || {};
|
const nowPlayingItem = state.NowPlayingItem || {};
|
||||||
playbackStartTimeTicks = playState.PlaybackStartTimeTicks;
|
playbackStartTimeTicks = playState.PlaybackStartTimeTicks;
|
||||||
updateTimeDisplay(playState.PositionTicks, nowPlayingItem.RunTimeTicks, playState.PlaybackStartTimeTicks, playState.BufferedRanges || []);
|
updateTimeDisplay(playState.PositionTicks, nowPlayingItem.RunTimeTicks, playState.PlaybackStartTimeTicks, playState.PlaybackRate, playState.BufferedRanges || []);
|
||||||
updateNowPlayingInfo(player, state);
|
updateNowPlayingInfo(player, state);
|
||||||
|
|
||||||
if (state.MediaSource && state.MediaSource.SupportsTranscoding && supportedCommands.indexOf('SetMaxStreamingBitrate') !== -1) {
|
if (state.MediaSource && state.MediaSource.SupportsTranscoding && supportedCommands.indexOf('SetMaxStreamingBitrate') !== -1) {
|
||||||
|
@ -682,7 +682,7 @@ import { appRouter } from '../../../components/appRouter';
|
||||||
return (currentTimeMs - programStartDateMs) / programRuntimeMs * 100;
|
return (currentTimeMs - programStartDateMs) / programRuntimeMs * 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateTimeDisplay(positionTicks, runtimeTicks, playbackStartTimeTicks, bufferedRanges) {
|
function updateTimeDisplay(positionTicks, runtimeTicks, playbackStartTimeTicks, playbackRate, bufferedRanges) {
|
||||||
if (enableProgressByTimeOfDay) {
|
if (enableProgressByTimeOfDay) {
|
||||||
if (nowPlayingPositionSlider && !nowPlayingPositionSlider.dragging) {
|
if (nowPlayingPositionSlider && !nowPlayingPositionSlider.dragging) {
|
||||||
if (programStartDateMs && programEndDateMs) {
|
if (programStartDateMs && programEndDateMs) {
|
||||||
|
@ -716,9 +716,9 @@ import { appRouter } from '../../../components/appRouter';
|
||||||
} else {
|
} else {
|
||||||
nowPlayingPositionSlider.value = 0;
|
nowPlayingPositionSlider.value = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (runtimeTicks && positionTicks != null && currentRuntimeTicks && !enableProgressByTimeOfDay && currentItem.RunTimeTicks && currentItem.Type !== 'Recording') {
|
if (runtimeTicks && positionTicks != null && currentRuntimeTicks && !enableProgressByTimeOfDay && currentItem.RunTimeTicks && currentItem.Type !== 'Recording' && playbackRate !== null) {
|
||||||
endsAtText.innerHTML = ' ' + mediaInfo.getEndsAtFromPosition(runtimeTicks, positionTicks, true);
|
endsAtText.innerHTML = ' ' + mediaInfo.getEndsAtFromPosition(runtimeTicks, positionTicks, playbackRate, true);
|
||||||
} else {
|
} else {
|
||||||
endsAtText.innerHTML = '';
|
endsAtText.innerHTML = '';
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue