From 610b05025d4201d7f234cc4010f5196f22e4e2cd Mon Sep 17 00:00:00 2001 From: Hazil Mohamed Date: Sat, 3 Jul 2021 17:08:25 +0530 Subject: [PATCH 1/4] fix endsAt when playback rate changes --- src/components/mediainfo/mediainfo.js | 4 ++-- src/components/playback/playbackmanager.js | 1 + src/controllers/playback/video/index.js | 12 ++++++------ 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/components/mediainfo/mediainfo.js b/src/components/mediainfo/mediainfo.js index 717a297246..d27af89f01 100644 --- a/src/components/mediainfo/mediainfo.js +++ b/src/components/mediainfo/mediainfo.js @@ -330,8 +330,8 @@ import '../../elements/emby-button/emby-button'; return null; } - export function getEndsAtFromPosition(runtimeTicks, positionTicks, includeText) { - let endDate = new Date().getTime() + ((runtimeTicks - (positionTicks || 0)) / 10000); + export function getEndsAtFromPosition(runtimeTicks, positionTicks, playbackRate, includeText) { + let endDate = new Date().getTime() + (1 / playbackRate) * ((runtimeTicks - (positionTicks || 0)) / 10000); endDate = new Date(endDate); const displayTime = datetime.getDisplayTime(endDate); diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index 6defed364a..6cac797c54 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -1960,6 +1960,7 @@ class PlaybackManager { state.PlayState.PositionTicks = getCurrentTicks(player); state.PlayState.PlaybackStartTimeTicks = self.playbackStartTime(player); + state.PlayState.PlaybackRate = self.getPlaybackRate(player) state.PlayState.SubtitleStreamIndex = self.getSubtitleStreamIndex(player); state.PlayState.AudioStreamIndex = self.getAudioStreamIndex(player); diff --git a/src/controllers/playback/video/index.js b/src/controllers/playback/video/index.js index d7e8fd5bf2..637d532228 100644 --- a/src/controllers/playback/video/index.js +++ b/src/controllers/playback/video/index.js @@ -545,7 +545,7 @@ import { appRouter } from '../../../components/appRouter'; const player = this; currentRuntimeTicks = playbackManager.duration(player); 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; refreshProgramInfoIfNeeded(player, item); showComingUpNextIfNeeded(player, item, currentTime, currentRuntimeTicks); @@ -640,7 +640,7 @@ import { appRouter } from '../../../components/appRouter'; btnRewind.disabled = !playState.CanSeek; const nowPlayingItem = state.NowPlayingItem || {}; 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); if (state.MediaSource && state.MediaSource.SupportsTranscoding && supportedCommands.indexOf('SetMaxStreamingBitrate') !== -1) { @@ -682,7 +682,7 @@ import { appRouter } from '../../../components/appRouter'; return (currentTimeMs - programStartDateMs) / programRuntimeMs * 100; } - function updateTimeDisplay(positionTicks, runtimeTicks, playbackStartTimeTicks, bufferedRanges) { + function updateTimeDisplay(positionTicks, runtimeTicks, playbackStartTimeTicks, playbackRate, bufferedRanges) { if (enableProgressByTimeOfDay) { if (nowPlayingPositionSlider && !nowPlayingPositionSlider.dragging) { if (programStartDateMs && programEndDateMs) { @@ -716,9 +716,9 @@ import { appRouter } from '../../../components/appRouter'; } else { nowPlayingPositionSlider.value = 0; } - - if (runtimeTicks && positionTicks != null && currentRuntimeTicks && !enableProgressByTimeOfDay && currentItem.RunTimeTicks && currentItem.Type !== 'Recording') { - endsAtText.innerHTML = '    ' + mediaInfo.getEndsAtFromPosition(runtimeTicks, positionTicks, true); + + if (runtimeTicks && positionTicks != null && currentRuntimeTicks && !enableProgressByTimeOfDay && currentItem.RunTimeTicks && currentItem.Type !== 'Recording' && playbackRate !== null) { + endsAtText.innerHTML = '    ' + mediaInfo.getEndsAtFromPosition(runtimeTicks, positionTicks, playbackRate, true); } else { endsAtText.innerHTML = ''; } From e0031bc50e1cc78d3c8d07a9dc76b23c2ac0b4d9 Mon Sep 17 00:00:00 2001 From: Hazil Mohamed Date: Wed, 7 Jul 2021 08:09:56 +0530 Subject: [PATCH 2/4] fix eslint errors --- src/components/playback/playbackmanager.js | 2 +- src/controllers/playback/video/index.js | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index 6cac797c54..c287776071 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -1960,7 +1960,7 @@ class PlaybackManager { state.PlayState.PositionTicks = getCurrentTicks(player); state.PlayState.PlaybackStartTimeTicks = self.playbackStartTime(player); - state.PlayState.PlaybackRate = self.getPlaybackRate(player) + state.PlayState.PlaybackRate = self.getPlaybackRate(player); state.PlayState.SubtitleStreamIndex = self.getSubtitleStreamIndex(player); state.PlayState.AudioStreamIndex = self.getAudioStreamIndex(player); diff --git a/src/controllers/playback/video/index.js b/src/controllers/playback/video/index.js index 637d532228..7fa508fc3e 100644 --- a/src/controllers/playback/video/index.js +++ b/src/controllers/playback/video/index.js @@ -716,7 +716,6 @@ import { appRouter } from '../../../components/appRouter'; } else { nowPlayingPositionSlider.value = 0; } - if (runtimeTicks && positionTicks != null && currentRuntimeTicks && !enableProgressByTimeOfDay && currentItem.RunTimeTicks && currentItem.Type !== 'Recording' && playbackRate !== null) { endsAtText.innerHTML = '    ' + mediaInfo.getEndsAtFromPosition(runtimeTicks, positionTicks, playbackRate, true); } else { From 7975d482b50919c2f697bf419a391307ce49dabf Mon Sep 17 00:00:00 2001 From: hazil Date: Sun, 5 Sep 2021 06:08:51 +0530 Subject: [PATCH 3/4] Update src/controllers/playback/video/index.js Co-authored-by: Shadowghost --- src/controllers/playback/video/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/controllers/playback/video/index.js b/src/controllers/playback/video/index.js index 796cce57f2..1bcaf20baa 100644 --- a/src/controllers/playback/video/index.js +++ b/src/controllers/playback/video/index.js @@ -716,7 +716,6 @@ import { appRouter } from '../../../components/appRouter'; } else { nowPlayingPositionSlider.value = 0; } - if (runtimeTicks && positionTicks != null && currentRuntimeTicks && !enableProgressByTimeOfDay && currentItem.RunTimeTicks && currentItem.Type !== 'Recording' && playbackRate !== null) { endsAtText.innerHTML = '    ' + mediaInfo.getEndsAtFromPosition(runtimeTicks, positionTicks, playbackRate, true); } else { From afc8dbea1c2be54cbb145bf2d7c4b5f1df3dc70a Mon Sep 17 00:00:00 2001 From: hazil Date: Sun, 5 Sep 2021 19:46:55 +0530 Subject: [PATCH 4/4] Update src/controllers/playback/video/index.js Co-authored-by: Dmitry Lyzo <56478732+dmitrylyzo@users.noreply.github.com> --- src/controllers/playback/video/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/controllers/playback/video/index.js b/src/controllers/playback/video/index.js index 1bcaf20baa..5c267e58e2 100644 --- a/src/controllers/playback/video/index.js +++ b/src/controllers/playback/video/index.js @@ -716,6 +716,7 @@ import { appRouter } from '../../../components/appRouter'; } else { nowPlayingPositionSlider.value = 0; } + if (runtimeTicks && positionTicks != null && currentRuntimeTicks && !enableProgressByTimeOfDay && currentItem.RunTimeTicks && currentItem.Type !== 'Recording' && playbackRate !== null) { endsAtText.innerHTML = '    ' + mediaInfo.getEndsAtFromPosition(runtimeTicks, positionTicks, playbackRate, true); } else {